Krzysztof J. Kowalczyk (a guy and his software)

About  •  Subscribe (rss)  • 

Me

github.com/kjk
code.google.com/u/kkowalczyk
twitter.com/kjk
more...

On this site
SumatraPDF
(PDF Reader for Windows)
VisualAck
(visual grep for Mac)
fofou
(forum software for App Engine)
Cocoa reference
Python reference
JavaScript reference
15minutes
scdiff
more...

Tags
Why you shouldn't write Mac programs in QT

Toggl is a time-tracking web application that I just found. You can use it to measure how much time you spend on tasks.

They also have a desktop client for Mac, Windows and Linux, which is a nice touch.

Except…

Except the teeny-tiny desktop client, which has about 20k worth of logic in it, is 114 MB big. It’s an obscene amount of code even in today’s world, where neither programmers not users care that much about overhead. 106 MB of that is used by 9 Qt libraries.

The tragic thing is: with a little more (or even less) effort, it could have been a tiny application. I understand the difficulty of delivering a desktop app for 3 different OSes and the allure of using a framework that promises to “write once deploy everywhere”.

The thing is, Qt is not easy to learn or easy to write in (being a C++ monster that it is).

As far as I can tell Toggl’s desktop client is a window that embeds a web browser and the UI is implemented in HTML with a bit of native logic talking to it. Writing an application like that in C# on Windows or Cocoa on Mac is a weekend effort even by someone who doesn’t know those platforms very well. The complexity of those programs is at the level of introductory code samples examples for beginners.

Someone who knows what they’re doing would spend less time writing 2 apps using the best technologies on a given platform than it takes to setup a build environment for Qt and they would end up taking tens of kilobytes and not hundreds of megabytes.

posted on 22 August 2010

Hipmunk - a new site for finding flights

A new web service Hipmunk just launched. They offer a new interface for finding flights (which then can be booked through Orbitz).

In the past I’ve used every flight finding service there is (Kayak, Orbitz etc.) and after giving Hipmunk a try I have to say: their way of showing the results is much better.

I wonder how defensible their startup is. All other services could just copy their interface. That usually doesn’t happen quickly (or at all) in case of big, established players with a lot of inertia and politics, but recently I read an article about Kayak which touted it as a bad-ass, agile, quickly innovating company and if Kayak is all that, it shouldn’t take them long to copy that interface.

For now Hipmunk is certainly my new preferred flight finding website.

posted on 17 August 2010

SEO is harder than you think

Here is a frequent advice for aspiring entrepreneur: even before you launch your product, start a blog. Blog about topics related to your product, the product itself, blog about anything.

It’s a good advice, I just wish it was followed with “but don’t expect miracles” qualifier.

Bad expectations

People giving this advice usually provide 37signals or Joel Spolsky as examples of bloggers that have hundreds of thousands of readers and who used that attention to launch very successful businesses.

The thing is: your blog won’t get hundereds of thousands of readers and you need more than than to build a successful business.

This is a common problem called survivorship bias: when we only look at successes, we only see successes. It seems like being successful is the only natural state of being. What we don’t see is thousands of other people who started blogs, put as much effort into them as 37signals did and don’t have much to show for it.

You’re not a handsome billionaire

It’s true: 37signals and Joel Spolsky built huge readerships. It’s also true that they are incredibly good writers and you are not.

Another way to get lots of traffic is by being a celebrity. Ashton Kutcher doesn’t have so many followers because his tweets are so much better than yours or mine. Steve Jobs will get coverage on engadget based on enigmatic e-mail with few words.

But you’re not a handsome millionaire, you wont get attention of a celebrity and you’re unlikely to produce top quality content like Joel Spolsky.

How to attract traffic and why you shouldn’t

There are ways to engineer your posts for maximum traffic.

One is to be controversial or polarizing. Few years ago I wrote a post critical of Google. For the proverbial 15 minutes it attracted the attention of blogosphere. Some were criticizing my arguments, some were agreeing but they all were linking. My RSS subscriber count shot up.

For a moment, I was living a dream but was this traffic really worth much as a way to promote a product or build a lasting, focused readership base? Probably not. Since I didn’t follow up with similarly exciting posts, I just earned a bunch of disappointed readers.

Another is to write inane, superficial posts. “5 ways to achieve long lasting success”. “What I’ve learned driving Honda to work today”.

Posts like that pretend to address a universal need (who doesn’t want long lasting success) or tickle innate human curiosity (“I wonder what did he learn”) but they result in drive by traffic from ADD generation. You spent 5 minutes writing it, they’ll spend 1 minute reading it and will move to another inane, superficial post. Such traffic is not valuable to you.

The one way to attract traffic that I recommend is to write thoughtful, high-quality posts that provide useful information. That will build a readership base of people looking for thoughtful, useful content (as opposed to people looking for sensationalist headlines). More importantly, it’ll build your reputation and people will be more likely to listen to you when you have something to sell to them.

How to achieve mediocrity in eight years, just like me.

What kind of traffic can you realistically expect for your blog? I’ll use myself as an example, because that’s the only example I have.

I’ve been blogging for 8 years. I wrote ~650 posts. I have one popular open-source program (5k downloads per day) and a few less popular ones.

According to feedburner, I have 349 RSS subscribers. According to Google Analytics, I have 21k visits from 18k unique visitors per month.

I’m not a total looser but its not a smashing success either.

More importantly, even with this decent amount of traffic, I couldn’t make any given product a success.

You don’t need a lot of traffic, or seed theory of success.

The reason why you shouldn’t get depressed right about now is this: you don’t actually need a lot of traffic to successfully promote your product.

A simplistic way to look at this is: the more traffic you get, the more people will know about your product, the more people will buy it, the more money you’ll make.

In reality the quality of your product is a very important multiplier of that traffic. If your product sucks, no one will buy regardless of how widely it’s advertised.

If your product is awesomely great, not only will everyone buy it but they’ll also blog about how great it is and tell everyone they know to buy it.

Hence my seed theory of success: you need only enough audience to spark initial interest in your product. How successful it’ll eventually be will be determined by how good it is, how close to totally awesome, not by how big the initial audience was. Due to the nature of compound interest, even a small change in the multiplier (i.e. quality of the product) will, over time, dwarf the importance of the size of the seed audience.

Your product is somewhere in between the extremes: it doesn’t totally suck but it’s also not totally awesome.

The practical consequence of seed theory is: don’t spend too much time blogging to build traffic. You only need a little bit. Spend the time making your product remarkable so that other people will blog about it.

Leave the pimping to pimps.

Ironically, because everyone else is obsessed with blogging for the sake of building traffic, they’ll do the blogging for your. They’re desperate for things to blog about, you just have to give them a reason to blog about your product. The best way to do it is to make it awesome.

Bend, the pudding with the proof

Don’t believe me? I give you Bend Editor as an example. As far as I can tell, it didn’t have a blog, its author didn’t make a single blog post about it. It was just CodePlex project with source code and a downloadable installer (curiously, it’s no longer available on CodePlex).

I found it the other day by browsing CodePlex projects that used WPF. I downloaded it and played with it. It didn’t have many features but it looked really nice, like a notepad after extreme makeover.

I didn’t blog about it but apparently I wasn’t the only one who serendipitously found it. Within days major blogs like lifehacker, appscout and downloadsquad did blog about it, along with many others.

This is an extreme example that validates my point: quality product will be noticed even with zero marketing effort on your part.

posted on 14 August 2010

A rant on iTunes TV experience

or why I switched from iTunes to Amazon’s Video On Demand (and so should you).

I don’t have cable so whenever I want to watch a TV show that is not on Hulu or Netflix, I buy it. I used to buy them on iTunes but their awful interface for buying TV shows made me quit it.

I can understand when Apple makes terrible decisions, like forcing programmers to use Objective C to write iPhone programs, when it serves their interests at the expense of users and developers.

It is in Apple’s best interest to make buying TV shows as easy as possible so I have to attribute the failure to do so to incompetence.

So what is the problem with iTunes? I watch several shows and buy new episodes as they are added. Every time I have to search for the show and click several times before I can give my money to Apple. Not a pleasant experience especially when done through VNC (I do it on a remote mac mini that is connected to a projector).

It’s not like it would be hard to improve that scenario: all I need is a way to bookmark show’s page. iTunes store, after all, is just a bad web browser. I’m not even suggesting using alien technology so that iTunes figures out that I watch a given show and alerts me when new episodes become available. That’s clearly too complicated, but a bookmark manager?

I went to the trouble of manually creating a web page with links to shows’ web pages (in iTunes you can copy url of the current page to clipboard) but that doesn’t help much. It still requires many unnecessary clicks before I can give my money to Apple. At least in that case Apple hasn’t lost ability to be self-serving at the expense of users: even if you copy a link to a standard definition version of the show, opening that link always gives you HD (i.e. 50% more expensive) version.

After suffering this process in silent range for months I had an Eureka (which I don’t watch) moment: there is competition.

Amazon On Demand has exactly the same shows, for exactly the same price and I can bookmark the shows because theirs are web pages inside a web browser and not web pages inside a crappy wrapper that takes away bookmarking abilities.

And they don’t try to upsell me on more expensive version of the show by making standard version hard to get to, like Apple does.

This is, therefore, a public announcement: don’t forget, like I did for many months, that when it comes to buying TV shows online there is a more usable alternative to iTunes: Amazon’s Video On Demand

posted on 11 August 2010

Comparing program versions (in C# and Python)

When you write an auto-update system for desktop software, you need code that compares two version numbers (given as strings) and tells you which version is greater.

This would be simple if we could stick with a simple version naming scheme e.g. we could say that a version number is just an integer (1, 2 etc.) in which case it would be as simple as converting a string to an integer and comparing those integers.

Version numbers in real life are more complicated. They can be multi-part (e.g. “1.2.32). We have notions of alpha and beta builds etc. Writing code to compare such program version numbers seem daunting.

There is, however, a relatively simple algorithm that supports multi-level version numbers and notions of alpha, beta and rc builds. Among other things, it knows the following relations between program numbers:

  • 1.1 > 1.0
  • 1.0.38 > 1.0.5
  • 1.1 > 1.1rc > 1.1b > 1.1a ('a’ stands for alpha builds, 'b’ for beta and 'rc’ for, well, rc builds)

The algorithm is quite clever but instead of describing it, I’ll just include the Python and C# implementations. I wrote them myself and I put the code into public domain, so you can use it any way you want. I use C# implementation in my desktop software.

Go to:

Tags: programming, c#, python • posted on 26 July 2010


← newer • 1 of 128 pages • older →