Ben Scheirman

These fickle bits...


My Vim Journey

For my Rails work, I’ve largely leaned on TextMate. It’s used by many Rubyists, looks sexy, and is easily extended.

I still use TextMate frequently, but I’ve been ramping up on my Vim skills and I’ve recently come to a point where I think I’m pretty productive in it.

My initial frustrations with Vim were that it was too configurable. Talk to any Vim power-user and you’ll find a completely different set of plugins & keyboard shortcuts. If you snag a friend’s set of Vim configuration files (like I did) you might find yourself frustrated that there’s too much to learn and it’s difficult to know where various behaviors are coming from.

In this post, I’ll attempt to demonstrate a very sane Vim setup that newcomers can use to get started and not be too overwhelmed.

Why Vim?

Before I get started with the basics of Vim, why would you use it in the first place?

For me it boils down to this: I love staying on the keyboard. Vim may not make you faster (in fact initially you’ll be a lot slower) but it can fit your workflow better.

Another big differentiator of Vim is Command Mode. The notion here is that you spend more time wrangling text rather than creating it from scratch. That’s certainly true of my code.

It is important, however, that in the larger software ecosystem, typing is not the bottleneck. Don’t expect Vim to make you build the right software faster.

Vim enables a keyboard-optimized workflow that may make you faster. YMMV. If you’re fast with TextMate or Emacs or don’t want to spend the time to learn something new, then Vim may very well not be for you.

Lastly, Vim is ubiquitous. It’s on every platform and you can carry your configuration (or a very large set of it) everywhere. People frequently put their vim configurations on Github for themselves and others to utilize.

Getting MacVim

Almost all Unix-based systems (like Mac) include a terminal version of Vim. The version included on OS X isn’t compiled with Ruby support, so some plugins won’t work. In addition, it doesn’t have OS-level integration like Copy & Paste in the same buffer.

Most Vim users I know use MacVim, which comes pre-compiled with Ruby support, has tabs, and more.

If you have homebrew installed, just type:

brew install  macvim

If you’d rather grab a pre-built binary, then head on over here.

You’ll also want to make sure that the mvim binary is in your path.

Basic Vim Navigation

I won’t cover everything you can do in Vim here, but here’s just enough to get you started:

In Command Mode:

  • Press h, j, k, l to move the cursor around. It will feel weird, but you start to appreciate not lifting your hand off of the home row to reach for the arrow keys.
  • Press G to go to the end of a document, gg to go to the top of the document.
  • Press i to go to insert mode at the current position
  • Press I to insert at the beginning of the line
  • Press a to “append” content after the cursor
  • Press A to “append” content at the end of a line
  • Type cw (“change word”) to replace the current word and go into insert mode
  • Type dta to (“delete ‘til the letter a”) in a line

In Insert Mode:

  • Press esc to go back to command mode.


  • In Command Mode, you can type commands by prefixing them with :.
  • To write the changes to the current buffer (save) type :w and hit enter. Often times you’ll write & quit in one command, with :wq.

Feel free to use the mouse & arrow-keys while you’re getting used to everything. It will feel weird.

For more Vim-fu, definitely check out this PeepCode screencast.

Installing a Base Set of Plugins with Janus

The real power of Vim is in the plugins, and fortunately Yehuda Katz & Carl Lerche have put together an opinionated and useful set of plugins that are pre-configured and work well together. Take a look at the plugins it includes here.

Getting Janus installed is easy. If you are super trust-worthy and don’t mind running a script blindly (I don’t recommend it) you can simply run:

curl -o - | sh

More explicit instructions for the paranoid can be found on the github page.

Once you have Janus installed, your Vim will be on steroids. Don’t worry though, I’ll try to cover the most important things you’ll be using.

Getting a Decent Theme installed

MacVim installs a hundred nasty looking themes, but a few of them are worth taking a look at. Here are some that I like:

  • molokai
  • railscasts
  • vividchalk
  • vibrantink

If you want to install other themes (like this nice github one) then you simply download it & copy the theme.vim (or whatever the theme is called) to ~/.vim/colors.

To switch between the themes that are installed, you can use the menu, or you can type :colorscheme <scheme>.

To set defaults for your installation, you’d normally add commands to ~/.vimrc however Janus has taken that file over. It instead reads your settings from ~/.vimrc.local. In order to provide settings for graphical Vim installations (like MacVim) there’s also a ~/.gvimrc file.

Open up that file (:edit ~/.gvimrc) and add the following commands:

colorscheme github
set guifont=Menlo:h14

Feel free to tweak this to contain your favorite color scheme & font. In order to see these changes you have to “source” the file:

:source %

(% here means “current file”)

You should see the changes take effect immediately.

Opening MacVim with a “Project”

One common thing in TextMate is to cd into a project and then type mate . which will open TextMate’s project drawer with all of the files in that directory loaded up.

In MacVim, you can do the same. Navigate to a folder with some content (like a Rails app) and type: mvim .

You should see something resembling a file navigator. You can navigate these with the same movement commands from above.

Once you’ve chosen a file, press enter to open it in the buffer.

Janus comes with NERDTree, which has similar behavior to TextMate’s Project Drawer. Open up the NERDTree pane by typing <leader>-n or \n. By default the leader key is set to backslash. The leader key is a special, configurable key used to create quick shortcut combinations.

The NERDTree window can be collapsed by typing <leader>-n again.

You might want to instead find the file by searching for it by name. For that, the aptly-named Command-T plugin can be hepful.

Command-T can be activated (by default) with <leader>-t. Start typing and it will auto complete the results.

Scared Yet?

Writing this reminds me of how hard it was to get started. I can only offer some encouragement that with practice, Vim does start to feel like you can leverage your fast typing skills to really.

Practice only a couple of commands at a time. Really learn what they are doing and then move one to the next command. Print out a cheet sheet. Pair with someone else who uses Vim.

I hope you found this intro useful. I’ll cover some more Vim tricks as time goes on.

A Fresh Start?

So I’ve been thinking of ditching the traditional blog for a while now. My current blog is powered by WordPress, which is powerful enough, however it always seems like a hassle to maintain. There are also no fantastic blog editors for the Mac (still).

This time I’m going in a completely new direction. This blog is powered by Octopress (which uses Jekyll as the engine. I’m not going to import old posts and I’m not going to worry about integrating a lot of features. Just epic content, that’s it!

Posts are composed in Markdown (I’m using vim to write this), static HTML is generated and the blog is then deployed to a git repository.

Will it make me blog more? I hope so, but only time will tell!

Houston Code Camp Registration Is Now Open

Houston Code Camp 2011

August 20th, 2011

Houston Code Camp is a free day of sessions relating to software development. The event is free to attend, but registration is required.

A Code Camp follows these rules:

  • They are a organized by developers and for developers to come and learn from their peers. Topics are always based on community interest and never determined by anyone other than the community.
  • Code Camps are always FREE for attendees
  • The success of the Code Camp is determined by the community. All content that is delivered is original and voted for by you! Make sure your vote counts, and vote for the sessions you’d like to see at our speaker submission site.
  • No Fluff - Code Camps are about Code, not slides. You won’t find any marketing heavy powerpoint decks here
  • All are welcome to attend and speak and do so without expectation of payment. Learn more about speaking on our speaking page.
  • The beauty of the Code Camp is that they always occur on weekends.

The schedule is still being formed. Take a look at the list of submissions here. You can still get your session proposal in if you’re interested in speaking!

Space is limited, so make sure and snag your ticket today. It’s FREE!.

What are you waiting for? Go register!

Fixing Xcode 4’s Broken Code Completion

In my continued quest to actually use Xcode 4 full time, I’ve run into yet another major issue: Xcode 4’s code index sometimes gets borked and syntax highlighting & code completion stop working.

In the past, this has been fixed (temporarily) by deleting the Derived Data folder in Organizer, restarting Xcode, changing the compiler from LLVM to GCC & back again or some random combination of the 3. This doesn’t always work, and today I sat down to figure out what the cause was and how to fix it.

In searching stackoverflow and the developer forums, I found that Xcode’s code index can hang on recursive and/or relative search paths.

My project utilizes 2 static libraries, so I must provide proper header search paths, otherwise the compiler doesn’t recognize any of the symbols.

So if you have a Header Search Path setting of ../lib/MyAwesomeLib or ../lib/MyAwesomeLib/** then you might be having this problem too.

Step 1: Correcting relative paths

You might be tempted to hard code the path to the file. Don’t! This will break on somebody else’s machine, and most of the time you’re not working on this stuff alone. You can utilize the $(SOURCE_ROOT) build variable to construct a dynamic path relative to the Xcode project directory.

This step might be all you need, but in my case I needed to follow the next step as well…

Step 2: Remove the need for recursive searches

I have two subprojects, each of which symlink their build output to a build/current folder. This makes it easy to add a non-recursive library search path reference for similar reasons. I also want to copy headers into this folder so there’s always a deterministic location to find the headers, regardless of the platform & configuration we’re building for.
So I added a Run Script build phase to do this work for me:

# Symlink build output to a common directory for easy referencing in other projects
rm -rf "$BUILD_DIR/current"
ln -s "$BUILT_PRODUCTS_DIR" "$BUILD_DIR/current"

# Copy headers to a shared location
mkdir -p "$BUILD_DIR/current/headers"
for file in `find . -name "*.h"`; do cp $file "$BUILD_DIR/current/headers/"; done;

The line is a bash for loop that copies all the header files in any subfolder & flattens it out for a single headers folder reference.

Step 3: Add the new common header search paths

In my case I exchanged a relative, recursive search path of:


to the more explicit, and more Xcode 4 friendly:

As soon as I did that, my code lit up like a Christmas tree! Symbols were recognized, code was highlighted, and best of all… code completion resumed.
Here’s to hoping the Xcode 4 continues to be improved. In the meantime, hope this fix saves you the headache I’ve been having.

Creating Proper IPA Files in Xcode 4

Xcode 4 has changed a lot of things. Most of those things are ok, but occasionally I find that I just cannot do something any other way than to use Xcode 3.

Until today, I was creating Ad-hoc builds for my current project with Xcode 3, then selecting Share & saving the resulting IPA file to disk.

Xcode 4 has the new “Build -> Archive” menu option, but every time I’d try to share this file, I’d presented with this lovely restricted dialog box:


With the errors No Packager exists for the type of archive and This kind of archive cannot be signed.

As it turns out, if you have static libraries that you’re linking in, your Archive step actually outputs those as well. Xcode doesn’t know how to create an IPA out of 1 .app file and a handful of .a files, so it gives up.

You can tell that Xcode 4 is doing this if your Organizer -> Applications list shows an icon like this:


If you right-click on this build, and select “Reveal in Finder” you’ll see the files are .xcarchive files. Right click on that and select “Show Package Contents” to see what I’m talking about. If you see a usr/lib/mystaticlibary.a file, then read on for the fix.

You need to tell Xcode 4 not to “install” the static libraries. For each of the static library targets, select them in Xcode 4, and under Build Settings, search for “Skip Install”. Set that flag to YES. I had to do this to both of the static libraries I include in my project.


Once that’s done, your app should show a normal icon again & have the ability to export to IPA just like before. Yay!


Huge thanks to this stackoverflow question for pointing me in the right direction.

Rails Intrigue Video at NHDNUG

I gave a presentation at the North Houston .NET User Group a couple weeks ago entitled “Rails Intrigue”. My friend, Claudio Lassala recorded it and posted the video on YouTube.

In the presentation, I tried to give a little glimpse of what it feels like to build an application with Rails. I also tried to convey a little of why I think Rails is just Fun.

I think it went pretty well, for being mostly off the cuff. Give it a watch, and let me know what you think.

Houston Code Camp - Call for Speakers

I’m excited to announce the first annual Houston Code Camp 2011, happening on August 20th! The code camp is a one day conference on Saturday, held by developers - for developers. Here you’ll find sessions on a multitude of platforms and of varying skill levels. Best of all? It’s FREE.


Call for speakers

We’re currently looking for speakers, so if you are interested in speaking please feel free to submit a session. We’re interested in both veteran & novice speakers alike, as a code camp is the perfect opportunity to start speaking if it’s something you’ve been wanting to do.

Community Voting of Sessions

We want this conference to be valuable to the community, so we’re letting you vote for the sessions you’d like to see most. As registration draws near I’ll announce more details on how this work.

Registration will open soon, but for now…. save the date!

Dry Up Your Rspec Files With Subject & Let Blocks

Rspec is pretty awesome, however due to its flexibility, often times I find that people write specs in ways that either a) aren’t structured very well, or b) use the wrong terminology to group up common contexts & behaviors.

Update: Be sure to read David Chelimsky’s suggestions in the comments.

A friend of mine who is fairly new to Rspec, and asked me to provide some feedback on some tests that he wrote.

Here is the before:

The only real problems here are:

  • Lots of duplicated setup code. If the initialization aspect of the Card design ever called for something other than a string, we’d have a lot of test code to fix.
  • Lots of “extra” code to test a simple value. If it smells like duplication to type “it ‘has a value of 13’” and then type the same thing, only in ruby code, then you’re right.

The rspec constructs I recommend to deal with this are `subject,` `let, and` `its` blocks.

  • Subject blocks allow you to control the initialization of the subject under test. If you don’t have any custom initialization required, then you’re given a default `subject` method already. All it does is call `new` on the class you’re testing.
  • Let blocks allow you to provide some input to the subject block that change in various contexts. This way you can simply provide an alternative `let` block for a given value and not have to duplicate the setup code for the subject over again. Let blocks also work inside of `before :each` blocks if you need them.
  • Its blocks allow you to test methods on the subject that return a simple value. The benefit of using this over the more wordy version above is that it can actually format the test output for you.

Here is the same example above, using the above techniques to clean things up a bit.

And here is the output of the above spec:

    Two of Hearts
        should == 2
    Face Cards
      King of Clubs
          should == 13
      Queen of Clubs
          should == 12
      Jack of Hearts
          should == 11
    Bad Value
      should raise StandardError

I think that’s a big improvement.

Note: The code in this post is delivered via Github Gists, which unfortunately don’t render in Google Reader. Click through to see the code.

2011 Ultimate Tools List for Mac

In pure Hanselman-style, I present to you the 2011 Ultimate Tools List for Mac.

I posed a list of tools last year when I got my first MacBook Pro. Since then I’ve had plenty of time to find some new gems, retire some old ones, and decided that I should share my list with the world.

In each section, I’ll list why I like each app, whether or not it’s free or not, and occasionally list some honorable mentions that lost out to another app, however is worth mentioning anyway.

Without further ado…

The Big 10 Life Changing apps

These are the must-haves, and are among the first installed on any new machine.

  • Dropbox (free) - Painless file sync between computers. One of the most useful apps of all time. (if you’re going to sign up, consider using my referral link)
  • Alfred (free) - Awesome launcher utility. Sort of like Launchy & SlickRun for windows. (Event more awesome with Powerpack paid addon which gives you file operations, clipboard history, iTunes searching/playing and more). Special mention goes to QuickSilver and LaunchBar, both of which are fantastic.
  • 1Password ($40) - Stop using the same password for multiple sites. Keep all of your passwords and secure notes encrypted in one place. Easily access your passwords using browser plugins. Sync with Dropbox. Even use on your iPhone!
  • Evernote (free) - I use this to take client meeting notes, scan receipts & documents I need to keep, and anything else I think I’ll want to refer to later.
  • Sparrow ($10) - The best desktop Gmail I’ve used. I like it so much, I stopped using Gmail from the browser.
  • TextMate ($60) - The old standard. Still my favorite editor for Rails work. Hopefully TextMate 2 will ship before I’m 40.
  • PeepOpen ($12) - A better file CMD-T file opener for TextMate, MacVim, and Xcode. Does fuzzy searching on path & filename and is insanely fast.
  • Charles Proxy ($50, free for minor use) - An awesome web debugging proxy. Inspect HTTP traffic including request/response, HTTP Headers, format as JSON, XML, Image, files, etc. Even self-sign SSL certs to view HTTPS traffic.
  • rvm (free) - Leverage many versions of ruby and maintain separate gemsets for each rails application. A must have for any ruby developer.
  • Twitter for Mac (free) - Of all the Twitter clients, this is by far my favorite.

General System Apps

These are the generally helpful apps that didn’t go into any other category

  • SizeUp ($13) - Keyboard shortcuts to pin windows to the left side, right side, switch monitors or spaces, minimize, maximize.
  • Chicken of the VNC (free) - A VNC client is a must on any system
  • uTorrent (free) - For those Linux distros & stuff
  • Fluid (free) - Turn your favorite web apps into real mac apps.


  • Rdio ($10/month) - The Mac client to the Rdio service is awesome. Listen to anything you want, even sync to your iPhone for offline listening.
  • Pandora (free) - The amazing internet radio that only plays music that you like. I pay for the Premium subscription to get access to the desktop app and to higher quality feeds.
  • Pandora Jam ($15) (scrobble Pandora with, integrate with the keyboard controls & IM clients, and also record Pandora songs, if you so desire)
  • Tracks - Quick, keyboard access to your iTunes Library. I stopped using this once I bought the Alfred Powerpack, because it can do the same thing.


Apps to make you faster, more organized, and get more things done. This is a favorite of mine.

  • Things ($50) - One of the most well designed applications on the Mac. Track things left to do in various projects, set due dates, etc. I have mine synching with Dropbox, which works just fine. An update with “true” sync is in the works and should work on iOS as well. Doesn’t do a few things I’d like, such as integrating with iCal for reminders and push notifications on the iPhone app, but all in all, one of the best Mac apps around.
  • The Hit List ($50) - I LOVE this app. I like it better than Things. Unfortunately, I started using it in 2009 and it’s still in Beta. Seriously. The last 20 or so updates have simply said “Extending the beta period”. Apparently they are hard at work at a 1.0 release to coincide with their iPhone app they’ve been working on since early 2010. But at this pace, I wonder if they’ll ever ship.
  • Wunderlist (free) - This app is really nice, however it lacks a lot of the smaller things you’d get from a full-fledged native app like Things or THL. That said, it’s a quick & easy way to share todo lists amongst many devices, the web, as well as share with other people. Recommended.
  • Pomodoro App (free) - If you’re into doing “tomatoes,” or time-boxed sprints of distraction-free, focused work, this app can help you manage it.
  • TimeSink ($5) - Shows you how much time you spend in each app. Answers the question, “How long did I spend reading Twitter today?”
  • MindNode (free/pro versions) - Simple Mind Mapping tool. They even have an iPad app. Great for getting loose ideas down & organizing into groupings.
  • TextExpander ($35) - Create snippets that expand into larger, commonly typed expressions. Useful in email for signatures, or even in code. I use them to easily expand the lengthy property syntax in Objective-C.

File Transfer / Sync / Backup

  • Transmit ($34) - Simply the best FTP app out there. Does SSH, SFTP, S3, and more. It’s fast and beautiful.
  • Cyberduck (free) - Decent FTP program for those who don’t want to shell out money for a tool they use maybe twice a year. Also supports S3 & other cloud drives.
  • S3Hub (free) - Easy, free, access to buckets, files, & permissions on S3.
  • Receivd (subscription) - Send & receive large files between groups of people. If you need to frequently share large files with peers, forget email, forget skype. Use received.
  • Carbonite / Mozy / Backblaze / Crashplan - All of these basically do the same thing: back up your files online in the background. I’ve used Carbonite & Mozy, and I have had minor issues with both. Ultimately I decided that it wasn’t worth the performance hit to do this. I may try this again in the future, and if I do, I’ll try out Back Blaze.
  • Carbon Copy Cloner (free) - Easily clone a drive & restore it later. Seriously easy to use, and completely free.


  • TextMate - as mentioned above.
  • MacVim - I really want to get better at vim, and occasionally I’ll spend the day in MacVim to keep my chops. I can definitely see some aspects of improvement, but ultimately I’m faster with TextMate.
  • vico (alpha) - An interesting marriage of TextMate beauty and VIM speed & efficiency. It’s early alpha, but definitely one to watch.
  • Espresso ($65) - HTML, CSS, PHP Editor, great for WordPress site maintenance. Sexy UI.
  • CSSEdit ($40) - Powerful CSS editing, live preview, and CSS organization built-in. These MacRabbit guys make a damn fine user interface.
  • TextWrangler (free) - A decent text editor with powerful editing capabilities. A “little brother” to the for-pay BBEdit.
  • Coda ($99) - If I were doing PHP websites full time, I’d probably use this. Crazy powerful, connect to remote sites with ease, lookup documentation, and access the context-sensitive terminal straight from within the app. Oh, and it also has Subethaedit functionality for shared editing in real-time. Epic!

Graphics & Photos

  • Acorn ($50) - An excellent, affordable image editor that can do many of the things a web/iOS developer needs. My current favorite. Still not Photoshop though.
  • Pixelmator ($60) - Another cheap alternative to Photoshop. Does a lot of things well. Similar to Acorn in functionality, though not as minimal in design.
  • OmniGraffle ($99) - Seriously powerful diagramming. Worlds better than Visio.
  • Balsamiq Mockups ($75) - Rapid sketch-wireframing tool. Great way to create mockups to validate a user interface.
  • Opacity ($40) - Great for making icons, buttons, logos, & other artwork. The interesting part: It can give you CoreGraphics code to replicate the same image in code. Also has factories for automatically generating regular size + 2X images for Retina graphics on iOS.
  • Photoshop ($billions) - Still my favorite graphics editor, though too expensive for me to justify a license.
  • Picturesque ($30) - Quickly add rounded corners, reflections, perspectives, & other effects to photos.


  • Skype (free) - An essential part of our workplace. We use it for chat, remote pairing, and small meetings. Unfortunately, Skype has taken a turn for the worse. I’ll looking for alternatives.
  • Gabble (free) - The only Yammer client that doesn’t suck balls. Adobe Air is a joke, this app brings a native Cocoa UI & is much more friendly to use.
  • Adium (free) - Multi-platform chat client. Not a complete replacement for iChat, though, because it doesn’t do voice & video.
  • Colloquy (free) - Excellent IRC program.
  • Facetime ($1) - Call iPhone 4’s & iPad 2’s. Or call other Macs with Facetime.
  • GotoMeeting (subscription) - We use GotoMeeting for lots of our meetings. Share your screen, invite lots of people, use the built-in VOIP service or allow your clients to dial into a real phone #. Also works on iPad!


  • VLC (free) - Having trouble playing a video format? VLC plays damn near everything you throw at it.
  • Handbrake (free) - Rip DVDs and batch encode videos for playback on your iPad or iPhone. Seriously powerful. Who needs raw ffmpeg?
  • Flip4Mac (free) - Play WMV files on your Mac.
  • Rivet ($20) - Have a PS3 or Xbox360? Stream your movies from your Mac while transcoding weird video formats. This is an essential part of my home media experience.
  • AirVideo Server (free Mac client)- Similar to Rivet, but for your iOS devices.


  • WireTap Studio ($70) - Record audio from your computer. Even isolate by application! Need to snag some audio from a youtube video? Want to record a skype call? WireTap Studio has you covered.
  • Garage Band 11 (part of iLife) - I love this app. Powerful multi-track recording, software instruments, and powerful effects. I use this all the time to play electric guitar using nothing but the software amps & pedals. Combine with a cheap tube pre-amp and an M-Audio USB interface and you’re good to go!

Source Control

  • GitX (free) - Simple way to view your git log & all of your branches. Doesn’t make your eyes bleed like gitk. Make sure you enable the Terminal command use so you can type “gitx” from your git repo in Terminal.
  • Tower ($60) - If you need a gui for git, look no further.
  • Versions (€ 39.00) - If you’re stuck on Subversion still, this app is a must. Gorgeous UI.

File Diffs

  • Kaleidoscope (€ 29.00) - Wonderfully brilliant file & image comparison tool for Mac. Integrates with Git. Hoping they support merge soon.
  • p4Merge (free) - Decent 3-way merge tool for Git. Sucks the least out of all of the ones I’ve tried.


  • Microsoft Office for Mac ($150) - I use this for Word & Excel. Shitty user interface, but seamless compatibility with their Windows counterparts.
  • iWork ($49) - Not a complete MS Office replacement (though it’s darn close). I mostly use this for Keynote & occasionally Pages. Keynote is amazing. 1200% better than PowerPoint.


This is one of the sore spots on the Mac. Nothing really comes close to a Windows Live Writer experience on the Mac.

  • ecto ($20) - I’m writing this post in ecto. I like the custom toolbar for adding your own custom tags, but the UI is a little clunky and has some quirks that I don’t understand. So far the best I’ve found.
  • MarsEdit ($40) - I want to like this app, but I had issues with it. It emitted some pretty horrid HTML and I found it difficult to work with.
  • Blogo ($25) - Interesting newcomer, but I didn’t find it to fit into my blogging workflow.


  • Sequel Pro (free) - Manage MySQL databases like a pro. Sports a UI that doesn’t suck.
  • Base (£19) - The best app for managing SQLite databases. Sure SQLiteManager for Firefox is free, but it’s awkward to manage databases from Firefox and the UI is terrible. Base is worth the money.
  • pgAdmin (free) - Since postgres is my database of choice these days, I need a good GUI tool. Sadly, there are none. Utterly ugly, but pgAdmin gets the job done.
  • MongoHub (free) - A handful of our projects utilize MongoDB, and MongoHub is my preferred way of interacting with these databases. Also has a MapReduce tool!
  • Navicat Lite (free) - I don’t use this, but a few friends do. Works with many databases.
  • RazorSQL ($70) - Possible the ugliest application I have ever seen. But if you need 1 app for just about every SQL database on the planet, RazorSQL has you covered.


  • homebrew (free) - I don’t use MacPorts or Fink anymore. Easily install most OS packages via Homebrew.
  • FreeRuler (free) - for keeping pixels inline. Gives you a pixel screen ruler that is super handy.
  • Digital Color Meter (built-in) - Wanted to mention this one because it is already included on your Mac! Quickly snag a color from anything on your screen. Outputs color as Hex or % values for RGB.
  • Caffeine (free) - Prevent your Mac from going to sleep when you click on the icon. Super-effective, and such a simple idea. I use this at least once a week.
  • iStat Menus ($16) - Monitor your system resources from your menu bar. Better battery meter, bandwidth graphs, cpu/ram/hard disk meters, and more. Completely customizable.
  • Rubbernet (€30) - Detailed analysis of network activity broken down by application. Handy for telling how much bandwidth an app is taking up or for identifying applications that phone home.
  • Xbench (free) - Benchmark your Mac’s performance. I used this to take before/after hard drive scores when installing my SSD.


Grab Bag

  • Delicious Library ($25) - A seriously cool library application for keeping track of your books, music, movies, & software. Integrates with the iSight camera for bar code reading. Definitely a must-have.
  • PhoneView ($25) - Read files from your iPhone without iTunes. Has additional features that work with Jailbroken iPhones.
  • iSale ($24) - Sell things on Ebay with style.
  • SousChef ($30) - Cool recipe management for Mac. Easily paste in recipes, identify the various sections, and it parses ingredients, instructions, and yield as well. Drag a picture from the web & drop it on the recipe to assign an image. Also has a mode with gigantic text that you can read from across the room (works with the remote!)
  • Cross Loop (free) - Remote tech-support with other Mac & Windows computers over the internet.
  • Celestia (free) - Take a trip to Neptune, visit other galaxies, and take a look at stars. Cool 3D program, great for kids.


  • Screenflow ($99) - Of all of the screencasting programs, I found this one to be the most joy to use. Easily record screen, iSight camera, and audio (both from system audio & mic). The editing features were easy to use and included some really cool effets.
  • iShowU Classic ($20) - Cheap and effective. Easily record a small section of the screen. This is what I used to record all of the episodes for the Tekpub iPhone Series.
  • Camtasia ($99) - I got a free license to this from my MVP. It is a good contender. I didn’t like it at first because it wasn’t possible to just record a small section of the screen. Apparently they’ve fixed it. If you’re familiar with Camtasia on Windows, you’ll probably feel right at home with Camtasia for Mac.
  • KeyCastr (free) - Of course during screencasting it is usually helpful to show what keystrokes you’re using. KeyCastr does that beautifully.

Screen Capture

Capturing your screen (or a portion of it) is built-in to the Mac, but occasionally you want to mark them up & share them quickly on the web.

  • LittleSnapper ($30) - A good way to quickly annotate pictures, keep a library of shots, and share them on the web.
  • Skitch (free) - Also good (feature-wise), but I dislike their non-standard UI immensely.


  • VMWare Fusion ($80) - Run your VMs with ease.
  • Parallels ($80) - My current Windows VMs are in Parallels (mostly because Parallels was faster and had better DirectX support, thus games worked better) but nowadays VMWare Fusion & Parallels are pretty much equivalent). I just happen to own both.
  • Virtual Box (free) - If you need free virtualization software, look no further.

General Development

  • MonoDevelop (free) - For when I want to write .NET code without opening a VM. Also used for MonoTouch & MonoDroid.
  • HTTP Client (free) - A fantastic HTTP workbench. Essential when dealing with HTTP APIs.
  • SOAP Client (free) - If you are unlucky enough to have to work with SOAP web services, this little app can help you.
  • Gitifier (free) - A nifty tool to notify you when people push code to your monitored git repositories.
  • HTTP Scoop ($15) - Recommended by Kevin Lee. A great HTTP traffic inspector.
  • Charles Proxy - As mentioned above.

iOS Development

  • AppViz ($30) - Analyze app store sales & reviews. I use this to keep track of my app income for tax purposes as well.
  • iOS Simulator Cropper (free) - Capture screenshots of the iPhone/iPad simulator for use on websites or the app store. A must-have.
  • iConify (free) - drag one 512px image & spits out every possible icon size needed for iOS development. Also handles the regular/retina resizing.
  • CodePilot ($30) - Adds some nice productivity enhancements to Xcode 3. Apparently they’re working on an Xcode 4 version.
  • MoGenerator and Xmo’d (free) - Automatically generate sensible classes from your Core Data model. with xmo’d, it generates it whenever the model changes.
  • App Resigner (free) - Stuck with an ad-hoc build of app that was signed without your device included? Resign it in a snap!
  • Sound Stage ($5) Quick & Easy way to make iPhone app trailers (hat tip to Kevin Lee for this one).

Phew! That’s a big list. I’m sure that I’ve left out some gems, so if there’s something blatantly obvious that I should have included in this list, please feel free to leave a comment.

Using Guard & Spork With Mongoid & Devise

On my last project, I eventually settled on using Guard along with Spork to allow for quicker testing. Specifically, I used:

  • rspec
  • spork
  • rb-fsevent
  • guard
  • guard-rspec
  • guard-pow
  • guard-spork

You might be saying, “What the hell are all these gems for?!?!”


This is a lot of development gem dependencies, but once working, it can vastly grease your testing workflow. Guard is a framework for watching files & doing something when they change. Make sure to use rb-fsevent as well to make detecting files not melt your machine polling for changes.


guard-rspec notices that models and/or specs change, and runs the related spec file automatically. Just running one test makes things faster, but you still have to reload all of rails with each run, making the feedback loop completely undesirable.


This is where Spork comes in. Spork pre-loads your environment, allowing rspec files to run with –drb mode & essentially caching your environment for multiple, fast test runs. That is, unless you change something in the environment (such as config/environment, routes.rb, or Gemile). These changes require spork to be restarted, which is SLOOOOW.

It’s not always obvious when spork needs reloading, so sometimes you’d find yourself scratching your head, saying, “this test should be failing… but it’s not!” Followed by a head-slap, when you realize you need to bounce spork.


So guard-spork is a nice way of automatically detecting these changes and reloading spork for you.


Lastly, I’m using pow from 37signals, so any env related changes that require a server restart automatically call touch tmp/restart.txt and pow restarts the app. Guard-pow does this for you.


It’s hard to say what all this means for the developer’s workflow, but basically all you need to do is run `guard` in a Terminal tab of its own and let it run. I run `guard` almost all day, and it generally does what I need it to.

Life is good, until you try to use this on another project that uses Mongoid & Devise…

The Problem with Mongoid + Spork

Mongoid include its models with Rails, so that means if you change your models you have to reload rails. Not very friendly with a Spork-type model. Hopefully they’ll add a lifecycle hook in the future, but until they do, we can utilize a feature of Spork that can save the day: `trap_method/trap_class_method`.

The details are found here, but for the impatient, I modified my `spec_helper`’s prefork block to look like this:

Spork.prefork do<br />  ENV["RAILS_ENV"] ||= 'test'<br /><br />
  require 'rails/mongoid'
  Spork.trap_class_method(Rails::Mongoid, :load_models)

  # Now load our environment
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'

Basically this forces that call to be loaded later on in the lifecycle.

There’s a similar interception done for Device, which likes to load models along with Rails routes. You might also need to use this technique to deal with similar issues with Factory Girl, Machinist, and Shoulda Macros as well.

And now my specs are faster again. Yay!

Is the Complexity Worth it?

Is this complexity worth it? Some would say no, and I’m certainly aware of how much additional “gem weight” this adds to a project.

For a great discussion about how to make your specs fast without requiring the complexity of Spork, check out the latest episode of Destroy All Software: Fast Specs with and without Rails. These screencasts are excellent..