Tools of the trade

Peter Cooper of Ruby Inside recently asked if people wanted to write about the things that they use in their development work. So I jumped squarely onto that band wagon...

Get organised with Things

Things icon

I used to manage my tasks in the legendary Lotus Agenda, running in a DOS emulator on Linux. Since I've switched to a Mac I've stopped using it, but reproducing the power of Agenda in Cocoa would be, without a shadow of doubt, my holy grail of desktop todo list management.

Agenda's flexibility allowed me to apply GTD the way I wanted; I would setup a list of tasks to work on today, and then a bunch of tasks that I'd get around to later. It didn't make the mistake of forcing you to assign due dates.

Things is the first modern desktop application I've seen that allows me to work this way, and it does it brilliantly. It also synchs with my iPhone. Perfect.

The only downside -- you can't export (i.e. backup) your data in a human readable form. Ouch.

TextMate

I came across TextMate in the first Rails "blog in 15 minutes" screencast. Then I went out and bought my first Mac.

Get yourself a copy of the Pragmatic Programmers' TextMate book; it's a great way to both learn the basics and learn about what's under the hood.

WriteRoom

WriteRoom icon

When I'm writing articles or long emails I find it can be quite difficult to stay focussed on the task in hand. Not only do I have to block out everything that's going on around me (I haven't always got those Sennheisers on), I also have to mentally filter out all the distractions on my desktop that are just begging me to click on them (the menu, desktop icons, Tweetie, etc.). Or rather I did, before I started using WriteRoom.

WriteRoom takes everything way and replaces it with a totally blank screen and a flashing cursor.

It's beautifully simple; you don't even need to pause to save your work as WriteRoom automatically saves it as you go. When you're done just copy and paste your text into your blogging software, email client, or word processor. It's perfect for writing in Markdown.

There are free and commercial versions. I find that the free version does everything I need.

Unix for, er, anything

This is a fairly obvious one, but you really need to be using Unix. And when I say "using Unix" I don't just mean that you need to be writing your software on Linux or a Mac (you do, but there's much more to it than that).

I mean that you need to know how to use the power of the Unix command line. Get familiar with your shell and learn how to automate repetitive tasks. I use find, xargs, sed, sort, uniq and bash itself to increase my productivity on a daily basis. You want to get yourself comfortable with writing little snippets of bash into your shell prompt. Here's an example from my bash history:

$ for p in $(grep -rl 'Parent: nesta' pages/)
>   do mv $p pages/nesta/
> done

Not very complicated, but damned useful.

Install the cheat gem and remember to read the cheat sheets to hand. Spend a spare five minutes reading some man pages.

VMware Fusion

VMware Fusion icon

If you deploy your code on Linux but like to use the Mac desktop, you've got a problem. Sooner or later you'll find that something doesn't quite work when you roll it out, and you'll wish you'd run your tests on a Linux box first.

That's where VMware Fusion comes in. I mount a Linux VM over NFS to allow TextMate to access code on the VM, and then ssh into the VM to run the tests, rake, etc.

It's not free, and there's no support (unless you pay for it), but it's still the best virtualisation solution on a Mac.

Omnigraffle

Omnigraffle icon

On the rare occassions that I need to capture a new data model I always use Omnigraffle. I find it faster than pen/paper for capturing a rapidly evolving data model.

Most diagrams, wireframes or designs just get sketched on paper.

Make backups with SuperDuper!

SuperDuper! icon

SuperDuper! is the best backup utility I've ever had (and yes, I also use Time Machine). SuperDuper!'s speciality is in making clones of a hard drive. I regularly make a snapshot of my laptop's drive to an external disk. If I were to just dump everything on one disk onto another it would take 4 hours, but SuperDuper! can run an incremental backup that takes under 30 minutes.

You can also boot from the backup, which is a life saver if your main disk fails. Hold down Option during start up to boot from a different disk. This trick saved me a fortune recently when my laptop spent two weeks with Apple getting the logic board replaced, and I started using a spare Mac mini.

The UI is a rare example of a simple design that conceals great power. Rude not to buy it. Daft not to use it.

Git for version control

We all know about Git by now. I've invested some time in learning how to use some of Git's more useful features (branches, rebasing, squashed merges, the reflog, etc.) and it's really paid off.

Deploy with Vlad

Capistrano is neat, but Vlad is cleaner. I still use cap, but for new projects I always choose Vlad.

Web applications

For continuous integration I use Integrity. It looks gorgeous and, being a Sinatra app, is very easy to setup. CI Joe looks nice too, but it came out 1 week after I'd setup Integrity.

I also use GitHub and Basecamp. One of my clients is using Mingle. It's good, but it's pricey and I'm not sure if it's worth the wedge.

I use most of these apps in Fluid.

Hosting

I run most of my web apps on Ubuntu, running at slicehost. I've also been toying with Heroku recently and first impressions are excellent. AppEngine is fun (I also love Python), but I usually need to be able to run background processes which often rules it out in production.

Books

Mmm, maybe this should be a separate list, but it could get a bit dull. The short version goes something like this:

If you've never read chapters 2 and 3 of Refactoring by Fowler then find a copy now. They'll make you a better programmer. If you can spare the time read chapters 1 and 4 as well.

15" Macbook Pro

This is the best computer I've ever had, bar none. For a long time I toyed with the idea of getting a less powerful Macbook and an iMac. It would have cost about the same money as my MBP and the accompanying 23" screen, but I'm glad of the convenience of having everything on one machine.

Yes, I've had my share of Apple hardware problems. The DVD drive gave up the ghost a while back, which I haven't bothered to fix. The hard disk failed just before it's second birthday; I replaced it myself with a 7200rpm 500GB drive and the laptop has never felt snappier.

23" Mac cinema display

It's one of the original screens, with a matte finish. You can't get them any more and the new model has a glossy finish (lunacy, if you ask me). What on earth were Apple thinking?

External hard drives

I've got 4 (3 USB and 1 firewire), all of them 250GB.

The USB drives are 2.5" Formac disk minis. I bought them off Amazon; reasonably cheap, aesthetically pleasing and (so far) reliable. I use one for Time Machine while the other two are in continual rotation as off site snapshots (more on that later).

My firewire drive is a 3.5" Lacie, and to be honest it's sold me on firewire. I'll be paying extra for firewire in future. It just feels smoother.

Sennheiser headphones, Bithead amp

Some music (typically electronica) helps me focus, shutting out the hubbub around me without having a negative impact on my ability to concentrate. I've got a sneaky suspicion that it helps me achieve flow.

Total Bithead headphone amplifier

I invested in a cracking pair of high end Sennheiser headphones and a Total Bithead headphone amplifier from headphone.com to power them. Sure, you could just plug your headphones into your computer, but with headphones as good as the Sennheisers the upgraded soundcard in the Bithead (and the higher quality signal that it delivers) makes a big difference. It sounds superb.

AKG 26P headphones

If you find yourself working or reading on the train a portable pair of headphones to block out the noise is a good investment. I like the AKG 26P; they're fairly cheap, have superb bass, and give you a good seal around your ear. I've got some Shure in ear phones too, but they're a bit more fiddly and the bass response can't compete. They're good for flying and running though.

Brompton folding bike

I've saved the best 'til last (photo courtesy of Guy Chapman).

Folded Brompton bike

Cycling is the only sane way to get around London. A Brompton folding bike is the best way to get between your clients' offices. You can bung it on the tube/metro, hop in a cab, or if you really need to be somewhere on time, just ride the blessed thing.

You'll obviously be taking your laptop with you, and if you stick it in the Brompton's bag (the new S bag is the one you want) then the bike will take the weight.

Get yourself one with a hub dynamo and keep cycling through winter...