Software that I use: Essentials 2008

Stealing an idea/meme from Mark Pilgrim I’m going to do a post of the essential software that I use in a day to day basis. Justin also did a similar post a couple days back. I think it is interesting to talk about what kind of tools you use, because it gives people an understanding into how you work, and also some pointers at stuff that maybe they too should be using.

I’m going to split my lists up rather arbitrarily, so here goes.

On the Server

  • Slicehost - I love these guys. I’ve had my slice for a good 8 months, and they are hands down the best web host I’ve ever had. Respond to tweets or e-mails within an hour, great customer support, and rock solid hardware. I highly recommend them for any sysadmin minded developer. It’s a great way to learn a little sysadmin skills, have root on a fast box with a fat pipe, and is generally just awesome. Best part: $20 a month for 256MB of RAM.
  • Vim - The venerable text editor and perennial love of my life. It’s great for making little quick fixes to files, and the key bindings are burned into my brain.
  • Django - Big surprise there. This site is running on Django, and I work and post mostly about it. Yet it goes to show how good the software is that I still love it, even when it’s my day job.
  • Varnish - This is a really nice “state-of-the-art, high-performance HTTP accelerator”. It sits in front of my Apache pages and caches them, making the site blazingly fast. At least that’s what it claims. My sysadmin at work recommended it and it’s really nice.
  • Apache/mod_wsgi - The up and coming way to run your Django apps on Apache. It’s a great way to host, and makes configuration and management a lot easier. Again, sysadmin recommended, but IANASA (I am not a sysadmin)
  • Ubuntu - My favorite Linux operating system these days. I run it for all my Linux needs, desktop and server. It makes everything really easy, and I understand it well since I’ve been running it for a couple years.
  • screen - Screen is the sysadmin and programmers best friend. If you aren’t using it on your remote servers, you’re doin it wrong. It gives you some really nice ways to attach and detach long running processes (think IRC clients, DB migrations, etc), basically gives you a terminal window manager, and lots lots more.
  • ssh - Everyone favorite work horse. I use it for the usual things like system administration, but also some other neat things like SSH Tunneling, X forwarding, and as a poor mans VPN.
  • bash - I don’t use any of those fancy shells out there. bash with screen is more than anyone should need.
  • Fabric - I am just starting to use this as a deployment tool for my Django applications. It makes life a lot easier and I’m really enjoying being able to automate simple repetitive tasks.
  • git - I jumped on this bandwagon a week or 2 ago as well. It seems to be becoming the defacto DVCS tool for the Django community, and Github is a really neat tool.
  • Feedburner - This is a neat app that gives you services associated with RSS feeds. They tell me how many subscribers i’ve lost with my pointless ramblings on a daily basis :). I also use it as an abstraction above a feed url, so if my feed url scheme changes on the backend, I just update Feedburner to point to the new one and nobody has to change their feeds.

On the Desktop

A note about my development environment. I try to only use tools that are available on Linux and OS X, because that gives me the mobility of being able to develop easily on both. Things like MacVim are neat because they give you Vim but in a Mac friendly way. However, software like Textmate and Coda I don’t want to get used to, because I think that Linux is the better choice for developing software (at least for Django/Python).

  • Firefox - The awesomest web browser ever. I don’t know what we did without Firebug. It’s great for web development, and lots of other stuff. The extensions community is great, and they do some good work. Vimperator is also really neat, it gives you Vim key bindings in Firefox ;)
  • Komodo Edit - The 5.0 version of this just got released, and I’m loving it. This is the open source and free version of the great Komodo IDE, from Activestate. I use it mostly because it’s cross platform, and because it has some great Vim key bindings. I get the convinces of an editor, with good key bindings, and not being tied to any platform. I highly recommend it for anyone doing web development, and I’m even considering getting the IDE version which includes Source control management and debugging support.
  • Xchat - The venerable IRC client. I’ve been using it on Linux since I began using it, and the Aqua port for OS X is a little lacking, but still has everything you need.
  • Adium/Pidgin - The greatest piece of IM software to be invented. Called Pidgin on Linux, they provided the libpurple library, which is an abstraction of their IM connectivity layer. On OS X, Adium uses this and gives you a great UI on top. You can connect to lots of IM networks, all in one buddy list.
  • Quicksilver/Gnome-do - These launcher-style programs are so integrated into my everyday habits, I don’t know how we lived without them. Quicksilver is the original version (that I know of), and Gnome-do is a well done Gnome version of the same ideas. They allow you do basically run without an Applications menu and just use a key command based launcher to do things. If you’re not using one, I highly recommend checking them out.
  • iTunes/Amarok - Everyone needs a good audio player. iTunes and Amarok are the best of breed for OS X and Linux respectively. Amarok is a KDE project, but I use it because it is a damn fine media player.
  • - I used to use iTerm on OS X, and there are still a couple of small things I like better on it (key bindings mostly). However, Terminal,app has gotten nice enough that I can use it, and it makes it easier to use other people’s machines. Gnome-terminal is my choice on Linux, because it’s a great one.
  • vlc/mplayer - For your video playing needs, you can’t beat these two open source projects. They both will play almost anything, and I tend to use vlc on OS X, and mplayer on Linux, because of their respective UIs. If these won’t play a media file, then almost nothing will.
  • sshfs/macfuse - I love sshfs. It uses the FUSE library to mount an SSH drive on your current filesystem. There are OS X and Linux versions of it, and it is insanely useful.
  • Skitch - This is a really nice tool for sharing images and screenshots. It allows you to capture them super simply, annotate them, and upload them for others in around 5 clicks. Great for showing website brokenness and other general stuff.
  • Twitterrific - A pretty good Twitter client for OS X. It isn’t amazing, but it’s good enough and it does what I need. I love me some twitter, and this keeps my addiction fed.
  • iShowU - I use this to create those screencasts that you all love :) It’s a great program for doing screencasts, it’s pretty simple, and does one thing well. I’d also be curious if anyone has any free alternatives, or linux based screencasting apps that they can recommend.
  • Transmission - A bit torrent client for the mac. It’s simple and easy to use, I like it a lot. It was actually ported to Linux and included in Ubuntu I do believe.

Apps in the Cloud

  • Google Reader - My current RSS reader. It’s simple, does what I need, and generally stays out of my way.
  • Gmail - My e-mail client of choice. It’s just a great way to do e-mail, I can access it from everywhere, and the spam filtering is amazing. I’ve gotten like 1 ever, and my e-mail is right on the bottom of this site :)
  • Google Analytics - What seems to be the big name in web analytics. Yahoo has a competing offering that they launched recently, which has kicked google into gear with new features. Competition is a great thing, and we’ll see if it’s worth switching over time, but for me it’s still Analytics.
  • Delicous - The great bookmark sharing service. I was using Ma.gnol.ia for a while, but most people at work are on delicious. I recommend culling a small network of like minded folk, and getting your network links in RSS. It is by far the best link feed I have, and beats any impersonal aggregator.
  • - I have over 32,000 tracks ‘scrobbled’ on their site. They know my taste of music scarily well, and it’s just really neat data to have in public. Plus they have some good APIs and feeds for accessing it.
  • Pandora - These guys have a brilliant music recommendation engine. I am constantly delighted and amazed by what music thay choose to play. You give it an artist and it plays similar music. I use this when my library is becoming stale, or I’m looking for good new music.
  • Facebook - I like it less and less everyday, but the utility in it can’t be denied. Keeping track of far away friends, old friends, and generally most of the people I know socially is key. I really hate how all the data is locked up and all that, but everyone uses it, so there isn’t much you can do.
  • Programming Reddit - I’ll check out the front page something, but the programming section seems to have some quality content a majority of the time. The Python and Django sections also have a decent signal to noise ratio.
  • Hacker News - I don’t use reddit or HN that much, but Hacker news consistently has interesting information. I don’t get the RSS, but they are really nice resources when you’re bored, or looking for inspiration.
  • Kayak - The best way that i’ve found to find flights online. Great tool for traveling.
  • Craigslist - Everyone’s favorite classifieds site. I bought a Wii for super cheap recently with lots of games. The free section is also a favorite.
  • Freecycle - A personal favorite. It’s like recycling, but people give stuff away for free. It’s like craigslist’s free, but generally less sketchy. This is how we got most of our furniture in college, it’s generally in good shape. People are usually just happy to see it go away to good people. Highly recommended!

Dot files

Brian also posted this similar post yesterday. He included his dot files, so I figured I would share mine.

This is my .bash_profile:

export PYTHONPATH=$HOME/Python:$HOME/Python/Modules
export PATH=$HOME/bin:$PATH
export DJANGO_SETTINGS_MODULE="settings"
export HISTFILESIZE=10000000
set -o vi
export EDITOR=vim
export PS1="[\u@\h:\w]$ "

alias rs='/usr/bin/python ~/EH/ runserver --settings settings_debug'
alias mp='/usr/bin/python ~/EH/'
alias sp='/usr/bin/python ~/EH/ shell_plus'
alias bkup='/usr/bin/python ~/EH/ dumpdata'
alias destroy-pyc='find . -name \*.pyc -delete'
alias dj='cd ~/Python/Modules/django-trunk'
alias a2='sudo /etc/init.d/apache2 restart'
alias tm='/usr/bin/python ~/EH/ testmaker --settings settings_debug'
alias p='python'
alias x='exit'
# ^l clear screen
bind -m vi-insert "\C-l":clear-screen
# ^p check for partial match in history
bind -m vi-insert "\C-p":dynamic-complete-history
# ^n cycle through the list of partial matches
bind -m vi-insert "\C-n":menu-complete

My terminals look like this: [eric@Odin:~/Python]$. I use Vim keybindings in my terminal as well (I’m addicted, what can I say). I also use similar git commands to Brian, so I’ll just let his stand as the original awesomeness.

I hope you all find these links useful and interesting. It gives you a little peek into how I spend my days. I’d love to hear what everyone else does. If you have any suggestions for things that I should probably be using, please feel free to let me know.

Hey there. I'm Eric and I do consulting and provide other services around software documentation. Feel free to email me if you want to chat.