Monthly Archives: January 2009

Software product myth

“Rob Walling has a good post”: about all the expenses it’s easy to overlook when starting a software business. The most insightful line is this:

“The point of The Software Product Myth is that at some point you are going to have too few sales to support yourself monetarily, yet too much work to fit comfortably into your evenings and weekends.”

This rings true for me. Wii Transfer is too successful to abandon, but not successful enough that I can retire to a beach house. Luckily I love the “people I work with”:, but I’ll admit that running Riverfold on the side is making me a little bit nuts.

I guess the “good news” is that I’m pretty used to too much work and too little sleep.

Work at sunrise

I don’t have an expensive camera and I don’t know that much about photography, but you’ll just have to trust me that the sky looked amazing this morning. Especially a few minutes before this picture was taken.


We should have another 80-degree day today before it gets cold again. As much as I complain that it doesn’t snow in Austin — that wouldn’t it be great if the kids could live a real winter at least every couple of years, the kind they read about in books and newspaper comics — I have to admit that it’s pretty nice to be outside with a t-shirt in the middle of winter.

Funny thing about mornings. I could sleep until noon every day if kids and work didn’t prevent me, but I seem to be most productive early anyway. Stepping into my home office still dreary eyed and without breakfast, catching up on tweets and email from Europeans and other night owls, then settling into source code or design or testing with some amount of quiet before the rest of the world sends another batch of distractions my way.

Forget the realities of slipping release schedules and buggy software. Morning is that special time when everything still seems possible.

App Store new version UI

Centralized app update notifications on the iPhone were a great idea, right? Turns out, maybe not. My App Store icon has a “26” badge on it. I have no idea which apps have a new version available until I click and scroll through the list, or use iTunes. The reality is that at least 3/4 of them are for apps I downloaded but don’t use very often. I now have to set aside some time to weed through this list of apps.

I’d much rather get a friendly reminder of a new version when I launch the app itself — maybe even outside the app’s control, near the top of the screen just like when a phone call is in the background. There are a few apps I use every day that were updated weeks ago, but I continued to use an old version because the notification was lost in the noise of dozens of other junk apps.

Stan Sakai

The 5th annual “STAPLE! indie comics expo”: is coming up in 2 months, and I’m happy to say that one of my favorite comics artists growing up will be headlining the show: Stan Sakai of “Usagi Yojimbo”: fame. If you are in Austin in March, please plan to attend. (And say hi if you see me. I’m usually helping sell t-shirts or milling around somewhere.)

There’s also a “new short Usagi story”: on MySpace’s Dark Horse page.

Core Intuition 12: Macworld

“Daniel Jalkut”: and I have wrapped up episode 12 of Core Intuition, available now on the “Core Intuition web site”: If you are a Mac or iPhone developer, or even if you are just interested in what two developers think about current Mac news, please subscribe and give it a listen.

This time we talk about Macworld 2009, including announcements in the keynote, third-party developers “Fraser Speirs”: and “BusyMac”:, future iPhone devices, and the Macworld user conference. Plus: I spill more details on my new indie app and Daniel shares a tip for refactoring NIBs.

Got feedback? We’ve love to hear from you at “”

Leonardo tips

Leonardo calendar Every year my New Year’s resolutions look about the same: draw more, journal more. (Blogging more is never one of my resolutions, but I’m nevertheless off to a good start this year with a goal of about one new post a day.)

This year I knew I needed some inspiration to keep drawing more. I ordered a calendar of drawings from the in-progress short film Leonardo and pinned it to the wall above my desk. My idea was pretty simple: every day I will see this calendar, and I will mark off the days that I actually draw.

The calendar is still blank. Guess I’ve failed, so far.

In better news, animator Jim Capobianco is nearing completion of the film. He’s been posting some “excellent tips on his blog”: about what he’s learned during production. I saw a rough cut of his film at the 2D Expo. Even in storyboard form you could tell it would be great. I blogged briefly “about the trip to California”: for the expo and WWDC back in 2004.

His day job is at Pixar, where he’s been responsible for other hand-drawn efforts such as Your Friend the Rat (on the Ratatouille DVD) and the WALL-E closing credits.

JSCocoa in Acorn

I like this KVC mini-rant from Gus Mueller’s post about writing “Acorn plug-ins in JavaScript”:

“While KVC hacks can be awesomely cool and amazing and generally useful… it is possible to go a bit too far. So don’t use that sample code, or I’ll come looking for you and slam your toe in a door or something equally painful for you and very satisfying for me.”

Gus has been posting to both his personal and company blogs lately. Another neat script over on the Flying Meat blog is “this one about drop shadows”:

I still get a lot of mileage out of Flying Meat’s other product, VoodooPad. I’ll be writing a follow-up to my “authoring help post”: in the next week or so, this time with an example document.

Tagging survey

Last month “I asked on Twitter”: for opinions on comma-delimited vs. space-delimited tagging. I didn’t get very many responses, but what I did get was pretty interesting.

Consensus: most people like commas and everyone likes Flickr. (The second takeaway here is that the service or app is more important, since Flickr uses spaces and everyone seems to cope just fine, even that 66% who prefer commas.)

Tag survey chart

You can see the “full report stats on Wufoo”:

Will paginate for food

As I mentioned in my “Rails rant last week”:, I have an unhealthy distrust for Rails plug-ins and monkey-patching gems. In addition to often breaking when you upgrade Rails, too many high-level abstractions can make it difficult to understand and debug the code later when things go wrong. For those reasons I will sometimes roll my own solution instead of using someone else’s. (As an aside, I rarely do this with Mac development, perhaps because I understand the internals of Mac frameworks much better than I do for the Rails core.)

But I’ve just been so impressed with the “will_paginate”: plug-in. It’s fast and there are no obvious compromises — good out-of-the-box defaults and enough hooks that it can be customized.

If you are doing any Ruby on Rails work and haven’t checked it out yet, I think you’ll find that will_paginate is a very elegant solution to something every web app is going to need.

Get Rich Slowly

I started reading the “Get Rich Slowly”: blog last year and it has quickly become one of my favorites. Don’t let the name fool you — it’s really just about practical advice for paying off debt, keeping a budget, and saving money for retirement. The author hits that perfect blogging voice that feels very authentic, as if he and his readers are peers.

“This recent post”: to start off 2009 covers all the major goals of the site. Here’s a snippet from budgeting:

“There are a variety of budgeting methods you can choose, from Andrew Tobias’ three-step budget to the 60% budget. My recent favorite (and a favorite of GRS readers) is Elizabeth Warren’s balanced money formula: 50% to Needs, 20% to Savings, and everything else to Wants. Simple but effective.”

I think there’s something for just about anyone in his blog, whether you are paying off a mountain of credit card debt or starting as an entrepreneur who wants to keep enough cash in the bank to cover those slow months.

Follow-up on family packs

In October I “blogged about”: and then launched a “family pack” purchase option for Wii Transfer. $39 for 5 licenses vs. $19 for 1.

The results are in, and they are unspectacular.

2.6% of orders were family pack purchases. At an extra $20 per order, that essentially comes out to the equivalent of one extra sale for every 40.

To all my customers who were honest enough to choose the more expensive option, thank you. I don’t think most people need the flexibility of running 5 copies of Wii Transfer simultaneously, but I’m glad that it’s helpful for a few of you out there.

Now that I’ve written this down and crunched the numbers, it calls to mind something that “Joel Spolsky”: said in an interview. All the coupons or referral fees or discount prices or other gimmicks they tried are ultimately just a diversion from the best way to increase sales: make the software better.

I’ll leave you with this chart for 2008 sales. August was shiny-new-version month.

Sales 2008

Macworld 2009

I liked today’s Macworld keynote. In many ways it was a return to pre-iPhone keynotes, with a few good announcements but nothing crazy earth-shatteringly amazing how-can-we-ever-top-this-again. Solid upgrade to iLife. Good news on iTunes. Impressive battery life on the refreshed 17-inch MacBook Pro.

At first I was worried that new versions of iPhoto and iMovie would obsolete my new app before its 1.0 even ships, but I think I’ve narrowly escaped the knife.

“Ryan at 37signals had this to say”: about iPhoto ’09:

“Now iPhoto ’09 has kicked their language up a notch further. In addition to Events there are also Faces and Places. Apple has made a few new slices into the photo organization cake, and they’ve opened up a new field of possibilities for people to find and enjoy their photos.”

The new iPhoto does look amazing, but I’m not convinced that adding these new concepts improves the usability of the app significantly. Even in iPhoto ’08, it’s not often clear when to use an Event vs. an Album. Tagging in Flickr and other popular web apps has proven that a fast, generic one-size-fits-all approach to categorizing can not only work, but is more flexible and requires less mental overhead to churn through images, movies, or what have you.

Dave Winer rethinks auth

“Dave Winer proposes”: a simple solution to revoking authentication in web services:

“Now imagine that Twitter had a page that showed all the IP addresses that have used your login in the last 30 days, with a start date for each and a count of calls made. I bet you could figure out which one was The Greasy Spoon Group, pronto. Further suppose there was a checkbox next to each IP address. You could uncheck that one, click Submit, and voila, no more spam from your account.”

There are important things missing here, such as not sharing your credentials, but I have to admit I do like the simplicity. If the hostnames were grouped by user agent, the UI wouldn’t even be half bad. If nothing else, maybe this will light a fire under OAuth implementors to get moving. (And I count myself in that group too, since I’m involved with some services that need OAuth pretty badly.)

If you “string together tweets from Alex Payne”:, it makes for an interesting narrative about OAuth too.

Dan Benjamin turns it up

Dan Benjamin did something interesting several weeks ago: he took his popular blog Hivelogic, where he’s been posting since 2001, and rebranded the content under a new domain, “”: Apparently that was just the kick he needed to “get even more serious”: about blogging, because he’s been on a roll lately.

A couple of my favorite recent posts over there include “Apologize”: and “Fake Amazon”: The latter is a must-read that finally puts a name to what may be the beginning of the end of the Amazon we all know and love:

“By offering these services, Amazon has created a gigantic marketplace, while simultaneously making even the most obscure or hard-to-find items available to anybody. Just type some text into Amazon search, and you’ll get results. Lots of results. Too many results, it seems, even for Amazon.”

I’ve also been enjoying the “Tack Sharp podcast”:, even though I hope to never pay more than $300 for a camera.

Mike Ash on private APIs

Mike Ash has been rocking with his weekly Friday Q&As. From the “latest about using private APIs”:

“Remember that the cost is not just to you, but to your users. If you’re really unlucky the break will be so bad that it’s not even obvious that it’s your fault, and they’ll figure it out only after much head-scratching. Once they do figure it out, they will hate you if your fix doesn’t come really fast.”

My new app (not officially announced yet — more later) currently uses Quick Look as a significant part of the user interface. Quick Look is a private API on 10.5, but my hope was that surely it would be made public by 10.6. If I coded correctly for both cases (I have a 10.6 seed running here I can test against), then I could safely release the product and be reasonably certain that nothing would be break.

I’m now rethinking that, both because it looks increasingly like Quick Look will remain a private API even in Snow Leopard, and because I’ve gotten feedback that it’s not a perfect fit for how I’m using it anyway. At the very least I will turn Quick Look into a secondary option, something that wouldn’t be missed if it went away, and roll my own preview UI to be the default.

Rails 4 years later

Blog archives don’t lie. It’s been nearly 4 years since I first “blogged about Ruby on Rails”: (Three years and 10 months, but I’m not patient enough to wait until February to post this.) Here’s a portion of what I said back then:

“But the PHP people will switch, easily, and with the apparent momentum of Ruby right now, maybe it’s already happening. Forget the enterprise for now. Rails is a perfect fit for anyone who develops for the web on its own terms, and the people behind apps like Basecamp, 43things, and the upcoming Odeo match that profile.”

In that time I’ve increase my use of Rails. At “VitalSource”: we have a bunch of Xserves running Rails applications. Mac developers have embraced Rails in the form of “PotionStore”: Cheap shared hosts have been replaced with virtual servers, “many”: with an emphasis on Rails hosting.

The community is huge now. What’s not to like?

Plenty! Here are my top gripes about Ruby on Rails.

Deployment. Ask anyone — even its biggest fans — and they will complain about deploying Rails applications. This stems from two points: the overhead to initializing a Rails application, meaning multiple instances have to be fired up and ready, unlike PHP which can process a script at a moment’s notice; and the path of ever-changing deployment strategies littered with the corpses of FCGI, Mongrel, Passenger, Thin, and more.

Upgrades. Rails matured quickly and is constantly improving. That’s great for features, great for best practices, and great for a clean API. The downside is that methods and entire chunks of the framework are deprecated and removed every major release. Forget about backwards compatibility. If you aren’t reading the blogs and keeping up with the latest changes, you’ll pay a price when it comes time to upgrade your application.

Attitude. David Heinemeier Hansson and the Rails core team have been outspoken in their lack of concern for end users. It’s because Rails is not actually a product. It was released and is open source to benefit the community and to grow the framework, but average developers should have no misconception that anyone with Git commit access is looking out for their application. I have great respect for Hansson, as well as the other high-profile developers of Rails, but it helps set expectations to underscore that Rails is not a supported product.

Java. Developers new to Rails generally come from the two other most popular web development languages: PHP and Java. Many leaders in the community come from that latter group, some of whom I count among my friends. Chad Fowler, in his “interview with Pragmatic”:, spoke to the baggage that developers bring to a new platform. I think some of this baggage from a more “serious” architecture is leading to new complex abstractions, such as Capistrano. Whether fair or not, I also largely blame the Java developers for using tabs-as-spaces, which is evil. ;-)

Extensibility. The Rails team wisely made a conscious effort to limit the number of features in the core of Rails, instead preferring new optional features to be implemented as gems or plug-ins. The problem is that there are limited hooks to extend the framework. Ruby is great at dynamically extending classes that weren’t designed with extensibility in mind, but there is no gaurantee that one plug-in’s monkey-patch will continue to work in future versions. Ironically, “merging Merb”: into Rails 3 will bring better supported APIs for plug-in authors while no doubt breaking a bunch of old stuff.

Speed. I put this one last because I don’t actually think it’s as big of a show-stopper as many people think. Still, it’s true that Ruby is one of the slowest languages out there, falling behind Python, Perl, PHP, Java, and enormously behind compiled languages. ActiveRecord is great, but it also makes developers lazy and requires tweaking the defaults to achieve the same performance as hand-rolled SQL. Projects like “Rails Metal”: look very cool, though, so that’s a good sign for the platform.

Even with all these critiques, there is something special about Rails and I will continue to use it for many applications. But at the same time, any shame I used to have at using PHP is gone. If I need to do something simple, I will use a simple solution. As a sort of backlash against my frustrations with Rails, I built everything that powers Riverfold (order processing, admin interfaces, the “Wii Codes application”: and Twitter services) off of PHP.


As we start 2009, I continue to be inspired by what independent artists and developers are able to create with limited resources. Here’s one example.

Roger Ebert recently “posted a thoughtful review”: of animator Nina Paley’s independent feature Sita Sings the Blues. Paley is still in a small bit of copyright trouble with the songs and is trying to “creatively find a way out”: The copyright problem was news to me. I subscribe to Paley’s blog but haven’t been keeping up with it lately.

Early in 2008 I invited Paley to screen her films at “STAPLE!”:, but she was busy finishing Sita and preparing for its premiere in Europe. She has some great older shorts too, including one of the first Flash to QuickTime animated shorts I remember seeing, Fetch, which was linked years ago off Hotwired’s defunct animation site.

(Speaking of STAPLE!, “Stan Sakai”: will be our guest in March. If you are in the Austin area, please stop by.)

Sita Sings the Blues will find an audience eventually. I gave some money as Paley was soliciting donations to finish the feature, and I know I’m not the only one inspired by what she’s created. Making an indie feature film is an amazing accomplishment.