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.
Before I get started with the basics of Vim, why would you use it in the
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.
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.
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
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
curl https://raw.github.com/carlhuda/janus/master/bootstrap.sh -o - | sh
More explicit instructions for the paranoid can be found on the github
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:
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
Open up that file (:edit ~/.gvimrc) and add the following commands:
Feel free to tweak this to contain your favorite color scheme & font.
In order to see these changes you have to “source” the file:
(% 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.
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.
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 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!.
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.
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!
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!
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
King of Clubs
should == 13
Queen of Clubs
should == 12
Jack of Hearts
should == 11
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.
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.
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 Last.fm, 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.
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?
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!
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.
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.
Google Notifier (free) - Menu bar icon for showing unread emails and upcoming calendar events.
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.
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.
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.
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.
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.
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.