Monthly Archives: December 2005

To-do lists and embracing the network

There is something about Ta-da List that works really well. Simple things like hitting return to save one to-do item and start a new one, tidying up of completed lists, and automatic ordering of recent lists. And above all else, speed. It is without question the fastest web app I use. Because the application is so focused, even full page reloads are faster in Ta-da than AJAX requests in some other web apps.

These are seemingly simple things, but they add up to an app that rivals any native (Mac or Windows) to-do list software. It makes me wonder how great a native app could be if someone put the same thought into user interface and simple workflow that Ta-da has. The advantage so-called Web 2.0 apps have over native apps is that they are inherently client/server based, but a native application could embrace the network in the same way and (maybe) provide a superior user experience. I’ve yet to see any apps that do this effectively, but it will have to happen if the desktop hopes to stay relevant for anything except tasks that benefit from large local storage (e.g. Photoshop and Final Cut Pro).

I use Ta-da List for everything now. Here’s a sample of recent lists:

NaNoWriMo Capital 10k staple_tada_small.gif

Bring me the head of Charlie Brown

Tonight ABC aired the original Charlie Brown Christmas special yet again. That thing never gets old. The animation is limited and the characters always off model from one scene to the next, but it has great voices and characters and heart.

This seems a perfect opportunity to link to Bring Me the Head of Charlie Brown, a hilarious CalArts student film that I first saw linked from Jim Hull’s excellent blog, Steward Street. Every person who has hosted the movie has been shutdown by their web host due to bandwidth usage. Luckily it’s now up on The short is made even more amusing if you contrast it with the animation style of the original Charlie Brown specials: the CalArts film has much fuller animation and better lip-sync. Even so, I wouldn’t want anything about Charlie Brown Christmas changed.

Randal and Rebecca

Okay, I admit it. I’ve been watching The Apprentice this year. I hate being addicted to it. It’s not even entertaining for me because it’s so stressful just to watch. I’m probably more nervous sitting on my couch then they are in the boardroom.

(Spoiler warning for those of you who do not watch live television.)

Traci predicted he would hire both of them, and I was leaning toward a Rebecca pick, but either choice would be fine. Then Trump totally sets it up to hire both of them with the two potential jobs, until Randal slaps Rebecca in the face with the “There can only be one Apprentice” line. Unbelievable. I’m still obsessing over how wrong that was.

Hopefully writing this blog post will allow me to move on and think about something else.

CGContextSelectFont is slow

We’ve heard it countless times: Before you spend any time optimizing, profile your code. And yet we always think we know where the performance problems are without testing.

Earlier this year I started some extra work to help a company port their Windows software to the Mac. It turned into a large project, and when the app ships I will write more about it here. But for now let’s just say that it involves a lot of Windows bitmaps.

Performance had been a problem almost from the start. It is a very drawing-intensive application, and I spent time optimizing the path to Quartz. Eventually everything goes through a CGImage, but there is some overhead getting there. I knew more could be done.

Eventually I bothered to run Shark on it. Within 30 seconds it revealed that almost 50% of the application time was being spent inside CGContextSelectFont, which was called very frequently for the very basic text drawing that was needed. I had not even suspected that code. I rewrote it to use ATSUI and all the performance problems immediately melted away. And it wasn’t even optimized ATSUI — just brain-dead create a text layout, font size, and draw.

It was not obvious to me that CGContextSelectFont would be so slow, so I’m posting this one for Google to pick up. Happy coding!

Set unreasonable deadlines

Damon and I have been discussing how time constraints can encourage creativity. I hinted at this in my first NaNoWriMo post, and it’s something I’ve been trying on other projects at work. Of course the concept is all through what 37signals is doing.

A few weeks ago there was a web application I wanted to write. I estimated it would take a couple of weeks to knock in the basic functionality. A small project, but big enough that it would have to be juggled with other priorities. And the requirements would need to be discussed with other members of the team, which might mean a quick death at the hands of committee-led design.

Encouraged by Willie over that weekend, we said let’s just do it and see what happens. Monday morning I asked myself: could I implement most of the application… before lunch? Because if I couldn’t, the project would still probably be sitting at zero lines of code. Luckily the app was a simple discussion system, and Rails was a particularly good fit for it.

In the latest The Writing Show podcast, J Wynia talks about why NaNoWriMo works. He said the biggest problem writers are faced with is the blank page. NaNoWriMo forces you to start writing immediately, because otherwise you won’t have a chance of finishing 50,000 words in a month. And something magic happens when you’ve written the first sentence: before you know it stories and characters are flowing and you’ve got a half dozen pages or more. If you waited until the first page of the novel had been fully thought out in your mind, you’d still be looking at a blank page.

Kathy Sierra wrote about creativity on speed, but I take issue with part of her post. I see speed in development work (C++, Ruby, whatever) as a good thing when it forces you to do something you would not otherwise be able to do because the task was too daunting. But speed in art is something else entirely. The latter is the whole subject of Betty Edwards’ classic book Drawing on the Right Side of the Brain. The idea is that by working quickly (gesture drawing, for example), you draw on instinct and what you are seeing, and less on what you think you know about how something looks.

I was first introduced to this concept in animation through the books of Shamus Culhane. It resonated with me immediately not just because I knew it was true — it matched my own experience with life drawing — but because he first discovered this while working on an old 1930s Mickey and Pluto short (Hawaiian Holiday) that I remember fondly as a kid (I still have the VHS copy). In some ways the high-speed drawing technique works even better in animation because you are already talking about time. The faster you work the closer the process itself resembles the final product on screen.

While building software is definitely an art — especially the process of crafting the user interface, or just bootstrapping an idea from nothing through brainstorming — I don’t think programming benefits from speed in the same way that art does. With software development the main benefit you get from working fast is breaking through roadblocks, simplifying, and getting things done. The creativity is a result of forcing yourself to think of things in a new way.

I found my cell phone

So a couple of months ago a 1-year-old who shall remain nameless tossed my cell phone into the toilet. I thought surely I would have to buy a new phone, but after taking it all apart, cleaning it, and letting it dry in the sun — good as new. (Except for the screen. Wow, that thing has seen better days.)

Then, a few weeks later, the phone disappeared altogether. Again, I’d probably have to drop some $$$ and buy a new one. But you know what? I stopped looking for it. I could borrow Traci’s if I really needed one, I haven’t been traveling recently, and there is something strangely liberating about going to the store or whatnot and being impossible to contact. (Except for pigeons. They will always work in a pinch.)

The phone turned up yesterday. I’m not sure how I feel about that yet.

My podcast process, take one

Ryan described his hardware setup for podcasting a while back. With at least a few dozen podcasts under his belt, he’s got his system down.

I wanted to write a little about the process I used to create the Trains podcast. Not because I think it will be particularly helpful to newcomers, but just because I think it’s interesting. (Actually, I’m just now getting around to posting this. Months have past since I wrote it, and now Ryan spends his time writing about why none of this matters, and he’s right: tools should be accessible to non-technical beginners.)

I started by borrowing a good mic from a friend. Eventually he will want it back, but luckily for me he’s a great musician and has a bunch of microphones that he uses regularly. It’s from audio-technica.

I had a few choices for recording audio. I own a Griffin iMic, but decided not to record directly into the computer this time, so it went unused. Some of the recordings I planned to do would be away from a computer, so I needed something mobile.

A great choice for this might have been a Rio, or a MiniDisc. I was a MiniDisc fan back during the first-generation of the devices, but sold it years ago. And I’m a happy iPod owner, so buying yet another MP3 player didn’t make sense. My concern is that the moment I do that, Apple will release a software update to uncripple the voice recording in the iPod.

For the train conductor recording near the beginning of the podcast, I used a Griffin iTalk connected to an iPod. This is all the electronics I took with me on the train to Chicago. I ended up recording a lot with it, without an external mic at all, but not much of the audio was really usable.

The opening train sounds I recorded just a short distance from my house. I biked down to the crossing with my nice microphone and recorded directly into a digital video camera, on to MiniDV tape. This turned out to work so well that I recorded all my voice this way.

Since it was DV, I used iMovie to import clips of all the voice work. I could have exported to AIFF from there (and did try to), but because I was sampling lots of other material, I decided to be consistent and use Audio Hijack to grab the audio directly as it played from iMovie. I also used Audio Hijack to rip from a RealAudio source, iTunes music, and from DVD Player.

Once I had all the AIFF files, I simply dragged them onto the timeline in GarageBand to create new tracks. I had planned to use Audacity, but it turns out GarageBand does everything I needed. I was raised on SoundEdit Pro, and the clunkiness of Audacity by comparison is hard to deal with. Controlling the fade in and out of audio for different clips was super easy in Garage Band.


And then I exported to iTunes, converted to MP3, and posted to the site. Power to the people!

Music to drive back to

The U2 concert in Houston a few weeks ago was great. I drove back late at night, with The Killers album on repeat to keep me awake. In the era of single-click pop song purchases on iTunes, it’s not often that I buy a full album. Then again, it’s not often that a band releases an album that has 10 good songs on it.

The other day I found an old Converse shoe box taped closed, hidden behind some old VHS tapes. Opening it revealed a bunch of CDs I hadn’t listened to in many, many (many) years. Arrested Development, Pearl Jam, Gals Panic, Rollins Band, The Nixons, Temple of the Dog, Van Halen, Primus, New Order. It’s fun to think back on what I was doing, how a given song might have effected my mood or my life so long ago. It’s a lot like video game music: usually catchy, and maybe more importantly, listened to over and over again. I’m still trying to get a podcast out about that, hopefully before the end of the year.

50,136 words

Winner As I posted about a few weeks ago, I decided to write a novel this month (National Novel Writing Month, or NaNoWriMo). I posted some of my progress on 43 Things, and I’m going to repost those entries here.

Actually using 43 Things more fully, I am even more impressed. They have done an amazing job of allowing communities to form around goals. The site looks simple on the surface but there is depth to it. There is something about random encouragement from total strangers that works.

Another useful resource was the NaNoWriMo forums. I never posted there but people were always quick to help others and offer advice. They also organized many local gatherings at coffee shops or bookstores, so I went one night and met a couple other Austin writers. NaNoWriMo works not just because of the intense deadline, but because of the shared goal as thousands of people are doing the same thing. That’s why 43 Things was such a good fit.

Here are the entries.

12,002 words (Nov 9th):

I’m still behind, but I feel good about my progress because I started a few days late. The last chapter I just finished was one of the first to really work, which seems to be a good sign that I’ve found some kind of rhythm to get through the next few weeks. Either that or the plot is building up to something too soon and I’m about to run out of ideas. :-)

25,043 words (Nov 20th):

I only just now crossed the halfway point. I thought I was on my way to catching up, but there were several days last week where I didn’t write at all.

I’m still determined to finish, but it’s going to take some serious writing over the Thanksgiving weekend.

34,797 words (Nov 28th):

I didn’t write enough over Thanksgiving. I left the PowerBook at home and filled up spiral notebooks instead. Even without an accurate word count I knew I had fallen short of my goal. Last night I typed it all up until my wrists burned.

I will finish but it is going to take a lot: 5000 words a day for the next three days. Until now my top daily word count has been about 3000, and the average somewhat less than that.

Congratulations to everyone else who passed 50,000 over the weekend!

44,054 words (Nov 29th):

Looks like I will finish. I made a big push last night and wrote about 6000 words. Less tonight, but I still think I am on track to finish tomorrow. The story should wrap up right at 50,000.

50,136 words (Nov 30th):

Yay! I finished.

I spontaneously started this endeavor a few days into the month and I’m still a little amazed that I stuck with it. It’s a great feeling though, especially as I was nearing the end and the plot was wrapping up. Sure, the story has some problems, and it could have benefited from some research. But actually I’m quite happy with the overall flow of the story and some of the characters. There are some good scenes in there that I’m proud of.