SaltyCrane Blog — Notes on PythonJavascript and web development

My software tools list

Inspired by Mark Pilgrim's 2006 Essentials list, below is a list of my current software tools. If you notice a lot of "I switched from ..." statements, keep in mind that I am a programmer who likes shiny things.

Other lists


My software tools list

Category Currently using Comments

Operating System

Ubuntu 14.04 Trusty Tahr

My first Ubuntu install was in 2007 (dual-boot) and I got my first Windows-free machine in 2008. I have used Cygwin and coLinux when on Windows. Cygwin integrates better with Windows applications, but coLinux is super fast and allows you to run a full Linux distro on top of Windows. Windows does have some advantages, but overall I prefer Linux.

Update 2008-09: Switching jobs means I can now use Linux at work. I'm now using Linux about 90% of the time. My wife still uses Windows Vista on our laptop.

I don't have enough experience with OSX to draw any authoritative conclusions, though I think Mark Pilgrim has biased me against Apple. Also, I think Linux's free as in beer (and somewhat related free as in speech) characteristics vs. Mac's expensive (and somewhat related proprietary) characteristics resonate with the cheap engineer in me.

Additional Linux vs. Mac commentary:

History: 1987: Apple GS/OS, 1994: Windows 3.1, 2000: Windows 98, 2001: Windows XP, 2007: Windows Vista, 2007: Ubuntu

Window Manager


The WM written in Python, recommended by Matt Harrison.

Previously, wmii: dynamic, tiling, scriptable window manager that doesn't require a mouse. It sucks less.

I switched from ratpoison at the same time I started using coLinux because running native Linux allowed me to use any Linux window manager as well.

Recently, some have switched from wmii to xmonad, the new Haskell tiling window manager. It has some nice features over wmii, including dual head support, but after a brief excursion, I slightly prefer wmii's way of doing things.

If you're a hard core Lisper, stumpwm is the window manager for you. It has a REPL. This one seems a little too hard core for me, especially since I don't know Lisp.

History: 2007: ratpoison, 2007: wmii, 2012: Qtile


GNU Emacs 24.3

Switched from Eclipse in 2007. It was a slow transition, but I think Emacs is worth the investment.

On Emacs vs. Vim: I really like that Vim can be used easily on remote machines. Currently, I use TRAMP for remote file editing. It is very cool, but it is slow, and I sometimes fall back on nano (*gasp*) for a quick config file edit when I am logged into a remote terminal. I also suspect that the dual modes of Vim are more efficient than Emacs-- I'm just not smart enough to get used to it. Maybe someday I will switch to Viper mode. Why Emacs over Vim? I choose Emacs because it is more powerful and closer to an IDE. Emacs Lisp allows you to do whatever you want.

On Emacs vs. Eclipse: I found Eclipse was too slow and heavy, used too much screen real estate, and was too difficult to customize. Scripting Eclipse required writing extensions in Java whereas Emacs can be extended in elegant Lisp. I think Eclipse (and other IDE's) are better for code exploration and they probably have features that I'm not aware of since I don't use them. I figure, though, that with enough Emacs Lisp, Emacs can do anything those IDEs can do. If you really want those features, it's a question of if you want to spend the time achieving perfection in Emacs or getting real work done in another IDE. I choose perfection. ;)

Additional commentary:


Install method: from source sudo apt-get install emacs

Useful packages:

My emacs config on github:

History: 2001: Emacs/NEdit/UltraEdit, 2006: Eclipse, 2007: Emacs



9.19 +

urxvt supports xft (anti-aliased) fonts, real transparency (not that I actually use transparency with Qtile), and fading (which I do use with Qtile) and it is much faster and lighter than gnome-terminal or konsole. screen allows me to switch terminal sessions without ugly tabs, attach to remote sessions, search through the scrollback buffer, and more. Update: urxvt also has embedded perl.

Install method: from source sudo apt-get install rxvt-unicode

Version Control System


Switched from Subversion to Mercurial in June 2007. The merging in Mercurial is very nice and can be done without thinking. I do miss Subversion/Subclipse's revision history viewer, file compare, and ability to isolate files apart from changesets. Update 2010-04-05: See my comment below.

Update 2011-05: Switched my personal repos to Git. Use Git almost exclusively now.

Additional commentary:

Install method: sudo apt-get install mercurial

History: 2001: SCCS, 2003: Other, 2007: Subversion, 2007: Mercurial, 2010: Mercurial/Git, 2011: Git

"High-level" Language


Previously, I used C. Now I use don't use any statically-typed languague. Wouldn't mind learning C++ Go. Although, Linus doesn't like it.

"High-high-level" Language

Python 2.7

My love for Python is strong. I switched from Perl in 2005 and have no regrets. Object-oriented, easy to read (no more TIMTOWTDI), and smart people use it. I also want to learn Javascript 2 becuase it is the "Next Big Language" and Lisp because it is the "most powerful language".

On Python vs. Ruby: from what I've read, I characterize Ruby as the more expressive language more similar to Perl (than Python is) and Python as the more regimented language. Since I like regimented, I like Python.

On Python vs. Lisp: I've concluded that I lack the intelligence to harness enough of Lisp's power to counteract its non-practicality (e.g. lack of libraries).

Additional commentary:

Install method: preinstalled on Ubuntu

History: 2001: Perl, 2005: Python

Web Framework

Django / Flask

2014-10:I now use Flask at work. Previously, I used Django. I think I like SQLAlchemy and Jinja2 better than Django. Django has a lot more built in and is put together better. Flask's thread locals are convenient and messy. Probably Pyramid is the best but no one uses it.

Here are some links:

Install method: pip install Django / pip install Flask

Web Browser


Not to be confused with Konqueror, Conkeror is an emacs-like, keyboard driven, scriptable, Mozilla-based web browser. I've used it almost full time since January 2008. It is still considered alpha stage software so there are a number of bugs. However, it is still pretty sweet. I use Firefox as a backup (and IE Tab for Launchcast and Netflix on Windows).

Unfortunately, one of the annoying things in Firefox 2 is present in Conkeror as well-- memory leaks. Based on this Mozilla article and some brief personal experience, Firefox 3 has made fixes in this area. It would be nice if Conkeror could benefit from the Firefox 3 fixes.

Update 2010-05-04: Conkeror is really awesome, but I had some memory/cpu issues with it a while ago and haven't put in the work to merge my custom keybindings with the latest Conkeror code. Also waiting to see if there will be an Emacs version of Vimium (since, after all vimperator followed conkeror).

I'm currently using a combination of Google Chrome and Firefox. Chrome is faster, especially for Javascript-intensive sites, but I really hate the Google Chrome Omnibar. If you have a solution or workaround, please post an answer. Firefox also has some Add-ons that Chrome doesn't.



Update 2010-05-04: Gmail. It's slow but it has a lot of features and it's in my web browser and it's easy and it works and I don't really like using email that much anyways. Oh, and, big plus, syncing works almost perfect with my Android phone. (Actual full switch to Gmail was around December 2008.)

Graphical diff/merge


I started using KDiff a while ago on Windows and have always liked it. I'm thinking, though, since I'm an Emacs person, I ought to use Ediff.

Install method: sudo apt-get install kdiff3


Unicomp Endurapro / Leopold Tenkeyless w/ Cherry MX Browns

I realize a keyboard is hardware and not software, but it is hardware that can evoke strong opinions, so I made an exception.

One problem with hardware is I can't try out all the different types and choose the one I like the best as I can with software. So my selection is based on reviews not on actual experience. And, after buying the Endurapro, I found I actually did not like the integrated mouse stick, so I should have bought a Customizer 104/105 and saved $30.

Update 2011-05: Got the Leopold tenkeyless for work. Tenkeyless is a must for quicker mouse access. And I actually like the lighter touch of the Cherry MX Browns versus the Unicomp's buckling springs. I like it so much I want to replace my Unicomp at home with another Leopold.

Update: Got a second Leopold for home to replace my Unicomp.

Additional commentary:

History: 2009: Unicomp Endurapro, 2011: Leopold Tenkeyless (MX Browns)

Office Chair


Herman Miller Aeron or Steelcase Leap

Mobile Phone

Motorola Droid 4

After almost 10 years (and 3 generations) of the Palm Treo, I got the Motorola Droid.

The Droid is pretty awesome, but I don't like switching to landscape mode to use the keyboard-- especially when toolbars and headers take up half the screen. I think Palm and Blackberry got this form factor Right. Just as I prefer the keyboard over the mouse on my PC, I want to use the keyboard and D-pad over the touchscreen on my phone. Update 2010-05-04: The keyboard is mediocre and use of the D-pad center button sucks. My Palm Treo 650 D-pad worked much better.

My reasons for choosing an Android phone are: I need a physical keyboard. I want to hack on my phone. I think Android has more potential than Palm's webOS or Maemo.

Useful apps:

  • Connectbot Secure shell (SSH) client for the Android platform. Use this all the time. Awesome.
  • Listen Listen from Google Labs brings podcast search, subscribe, download and stream to your Android-powered device.
  • My Tracks Record GPS tracks. Monitor your performance. Share your outdoor activities with friends. Really enjoy this one. Love tracking my romping.

2010-05-04 Updates:

  • Google Voice: Free text messages and better voicemail. Another useful app. Makes voicemail suck a lot less.
  • FoxyRing: automatically control the ringer volume based on ambient noise level. I was doubtful about this one, but it actually works well for me.
  • Flixter (Movies): Useful for checking movie showtimes.
  • Bible (YouVersion): This version is pretty good. I miss my Plucker created Bible on my Palm though. I wish there was something like Plucker for Android.
  • DroidLight: use the LED camera flash as a flashlight. Simple and useful. Works much better than using the screen as a flashlight.
  • Google Navigation: I don't need my Garmin anymore. (Each has advantages and disadvantages, but I have found it to be a capable replacement.)
  • Just want to mention that the Calendar sucks. It is great that I can sync with my Google calendar, but I really hate the Android Calendar UI.

Additional Commentary/Links:

History: 2002: Handspring Treo 180, 2003: Handspring Treo 600, 2005: Palm Treo 650, 2009: Motorola Droid 2011: Motorola Droid 4


#1 Nguyen commented on :

To me, claws-mail is awesome except that it can't send emails (can receive) thru microsoft exchange. But i aint complain much since no email client in linux can do this for me.

With plugins (I use dillo, bogofilter, tray, rss, calendar plugins) calws-mail totally beats all other app. I personally stay away from fatty thunderbird and evolution. Evolution has a lot other features and services running that I never need. Thunderbird, to have all functions of claws-mail, needs ton of addons.

Epiphany is my day-to-day browser now. But FF3.1 is promising to blow us with its speed. But I still consider it a heavy app. Opera has a very annoying bug that never be fixed. To me, the lightest and fastest browser on linux is midori, let's way for it to mature.

#2 Eliot commented on :

Nguyen, thanks for your input. I'm glad to hear another positive review of Claws Mail. I am not a heavy emailer, but it has worked for me so far. Thanks for the info about browsers as well. I will keep an eye out for midori.

#3 Jay commented on :

Thanks for the Python script to convert .pnm files to .pdf! It worked very well once I got the names of the files I was going to convert spelled correctly.

#4 PATX commented on :

Why does it say you useHg when you are more active on GitHub then Bitbucket?

#5 Eliot commented on :

PATX: you caught me-- I recently started using git for work so I decided to put my recent stuff on github. Based on just the VCS itself, I'd still probably choose hg over git, but since I have to use git for work anyways, and github has a larger community than bitbucket, I put my stuff on github. Apparently, I could use hg and github using but I have not tried it. I will try to update this post soon.

#6 PATX commented on :

Haha. Ok. And that plugin looks pretty cool. I might have to try it... Thanks!