Crouching tiger, coding monkey

The Art of Waiting

Filed under: Development, Performance — Grant August 25, 2008 @ 6:19 pm

My family consists of myself, my wife, my soon to be four year old daughter and my approximately six month old son. Not long ago we were getting the group ready to go somewhere, although I don’t recall where. (Yes, I’m getting old.)

Anyhow, the situation devolved into me sitting on the couch shoes on feet and keys in hand holding my son who was also completely dressed and ready to go. My daughter was rumaging through the shoe box trying to decide what shoes to wear and my wife was doing two or three different things at once in at least two different rooms in the house.

He looked up at me with a big pair of blue eyes asking without words because, well he can’t talk, “What in the world is taking them so long to get ready?” To that I looked down at him, conjurned up my best I’m-about-to-impart-fatherly-wisdom voice and said:

“Boy. Sometimes you just have to wait. There’s no good reason why and there’s nothing you can do about it.”

“Also, save your pennies so you can buy an iPhone. At least then you’ll have something to play around with while you’re waiting.”

I was reminded of this story today when I was setting up a test database. You see I wanted to gauge the level of suckiness of my code when confronted with a massive data set. The problem was that I needed to copy the test data from a network share onto my local machine and that it consisted of a zillion little files. Transferring one huge file, that’s no problem. It comes down in a few minutes just like downloading a bootleg movie, err, business task critical ISO image. Transferring loads and loads of little files though means it is time to go take a walk. Or make a sandwich. Or paint your house.

Worst part about it is that there was nothing I could do to make it go faster. I suppose if I was feeling really abmitious I could have hacked my way into the datacenter, pulled the drive from the server, somehow enclosed it and attached it directly to my Macbook Pro, and then outrun the IT staff. Not a great solution, especially considering that even if I pulled a Usain Bolt on them I’d still be greeted by a pink slip at the podium.

So as I sat, and as I waited, I tried to think of other similar software development tasks that require you to just sit around and wait. Much to my surprise that was the only one I could immediately think of. Even compilation, especially if you are like me and get to watch C++ chug, bend, and contort itself into binary form, isn’t that bad thanks to distributed build tools like Incredibuild or Xcode’s support of distcc. Most other problems have been solved by Moore’s Law, although as shown by my trusty laptop I have a tendency to agree with Wil Shipley about running your code on older development machines:

“IL: Finally, what is/are your main machine(s)? Hardware, software, processor—all the gory details. We’re geeks; we like this kind of stuff.

WS: At the café every day I still use a 1.67 GHz G4 PowerBook, with 1.5 GB of RAM. I’m intentionally waiting to buy a Core 2 Duo machine until I ship Delicious Library 2, because Delicious Library 2 runs so fast on the Core 2 Duos it would be unfair for me to use one day-to-day—I’d never optimize my code, and people stuck on old PowerBooks would hate me. I know a company where they recently bought every engineer a 30″ display, and my thought was, “Oh, man, it’s gonna be hard to use their apps on a portable… .” There are so many problems you don’t solve unless they are bothering you personally. I need to eat the same caviar I feed my customers. (What, you think I’d feed them dog food?)”

— Ars Technica interview with Wil Shipley of Delicious Monster

Well, the progress bar is a little closer to done. I’m going to get something eat. Come to think of it the house could use a little more color…

Must have software and tools (Mac OS X Edition)

Filed under: Apple, Development — Grant August 13, 2008 @ 12:03 am

A couple of weeks ago Tim posted his must have software and tools. Always one to steal a good idea, and wanting to balance out his Windows focus, here’s my list.

General Apps

Safari - I’m not a huge browser plugin guy and Safari is pretty darn fast.

Firefox - The above being said, having a backup browser is a good thing.

Mail.app - Solid mail client with excellent free form searching.

iChat - I never got into Adium because this guy has always worked for me.

iCal - Really looking forward to true Exchange integration with Snow Leopard. Google Calendar integration means I actually know what is scheduled at home now.

iTunes - Does a wonderful job with podcasts and video podcasts.

Bloglines - All my RSS in the same place on any computer.

Twitter - Still not sure why I like it so much.

OmniFocus - No program has saved me more often than OmniFocus. Plus it integrates perfectly with Mail.app which makes Inbox Zero easy.

OmniGraffle - People always ask if there is a Visio for the Mac. The question is wrong. It should be is there an OmniGraffle for Windows? (Answer: No.)

Comic Life - If you have ever read one of my design documents you’ll know how much I love this one.

MS Word - Word is the standard for business documents.

Keynote - All my presentations and screencasts are done in Keynote. The animation support alone is worth the price of admission.

Snapz Pro X - Speaking of screencasts, this is my screen capture program…

QuickTime Pro - …and since I’m unable to do anything in a single take you gotta edit.

BBEdit - As far as editors go BBEdit is old school. Sometimes it is good to be old school.

Parallels - For those times when you have to run Windows.

Transmit - An FTP program that costs money? I know, but it makes up for it by being brilliant.

Developer Tools

Terminal.app - Before OS X I was on Linux/Unix. You can give a guy a great UI but you can never take away the command line.

TestTrack Pro - I have used this just about every day for the last seven or eight years.

Surround SCM - Well, since I kinda work on it and all…

Xcode - It baffles people coming from Visual Studio world but it has really turned into a nice IDE.

Instruments - Because sometimes we all leak memory.

Shark - And sometimes we just run slow.

UnitTest++ - Best cross platform C++ unit testing framework I have found.

BuildBot - Nothing more fun than getting emails about broken CI builds. Wait, there’s lots of things more fun than that.