Software I Use

One of the first things that I encounter when someone sees my laptop is, "What do you run on that?". I usually say something between "Linux" and "Ion" depending on the knowledge I expect someone to have. For my website, nothing beats comprehensive lists.

Operating System

Debian/testing

I use Debian's "testing" branch on my various workstations. It's not the bleeding edge, "unstable", but as the name implies, it's not too unstable. I prefer Debian over other distributions as it is a nice blend between binary packages and strict Open Source philosophy.

alternatives

Redhat/Fedora generally leaves something to be desired when it comes to philosophy as well as dealing with package dependencies. It tends to be more like the commercial model of distribution - where individual vendors produce their own packages of software and often to varying degrees of package quality and security. Debian tends to be more uniform, which ensures that when I install an application, it won't install with gaping security holes or in unscrupulous places on my disk.

One of my biggest gripes working on Redhat machines is that config file documentation is almost always lacking. Frequently, one will find man pages for common commands missing, too.

Gentoo is good in concept, but my poor laptop can't compile all that quickly. I rather like that I can stay abreast of the latest software packages without having to cross-compile or use the limited binary packages available. I always know that, if I need to recompile some part of my system (say to apply a patch), I can get the source easily through Debian's package management system and use the Debian tools to rebuild it.

GUI

Ion

A screenshot of my desktop, showing Ion

Probably the most noticeable bit about my computer is the window manager that I use, Ion. It's designed to be efficient and utilitarian while leaving behind any notion of bling. Everything that one needs to do - moving windows, switching desktops, changing window focus - is doable from the keyboard (and often only the keyboard).

See my blog entry entitled Ion and how I made it usable for more on my keyboard configuration.

I used to use Sawfish and was quite fond of it. It was easily themable, easily scriptable (and therefore hackable), and had a bunch of plugins and a large hacker community associated with it. However, after a while I found that a lot of what I do with it is shuffling windows around to be exactly how I want them. Why can't I just do that once and leave it at that? With that mindset, I discovered that Ion does just that: one creates frames and puts windows in it. The frames are permanent and the windows just drop in.

I have nine (9) virtual desktops, each with a dedicated purpose.

  1. System
  2. Graphics
  3. Music
  4. Work #1
  5. Work #2
  6. Work #3
  7. Communication
  8. Web
  9. Code/writing

By organizing them like this, I can multitask very effectively without having to constantly minimize windows or close/reopen applications.

Gnome/GTK2 stuff

When it comes to a decent system for integrating drag/drop, common UI widgets and common look/feel, Gnome/GTK is the best. KDE has many good points to it, though it focuses on bling more than function, I've found.

Applications

vim

With my move from Perl to Python, I've moved over to doing most of my coding in in vim. I still use emacs for editing complex XML documents (if/when I need to do that).

Instead of hnb mentioned below, I've switched over to vim-outliner. It's got most of the same functionality, but with a tab-based outline structure instead of an XML-based one. It has more familiar keyboard bindings than hnb ever did.

irssi

Irssi is an IRC client and the obvious choice for any hardcore IRC junkie. I leave my irssi logged in 24/7 inside a screen session.

GNU screen

Screen is one of my favorite applications. It has a wonderful learning curve and is much more powerful than most of its users even realize (it supports multi-user ACL-based display, so that you can have multiple people watch what you do with it remotely, but not be able to interact). I leave a screen session with mutt and irssi (other stuff too) on my server at home so I can check on mail/chat from anywhere.

mutt

For someone who deals with a lot of email, you need a high-powered email client. Mutt is just that, even though many are frightened by its console (text-only) exterior. It has a very powerful interface that lets me color-code messages, tag, filter, delete, etc. based on regular expressions. For a perl hacker, this makes managing email a piece of cake.

LyX

Simply put: LaTeX-generated papers look better. LyX is a decent WYSIWYG front-end for LaTeX. It's terribly buggy, but I find the aesthetics of the result to be worth the [minor] hassle.

Liferea

Liferea is the best 3-pane GTK 2 feed reader that I've found. Considering that it has about 1 competitor, that's not too hard, but it's still worth noting that it's decent. It could use some image caching, but beyond that I've had no issues with it.

Emacs

I really like Emacs, even though it has a few quirks that frustrate me, as it is incredibly powerful. My favorite features are some plugins for it.

nxml mode

Nxml-mode is a very powerful XML editor. I used to swear by xae-mode, but xae-mode has some issues with schemas - as in it doesn't do them. It does DTDs very well, but anything more advanced than that (including the ever-vital namespaces) is right-out. Namespaces are critically important when working with RDF and that was the main thing that prompted me to change. If you just need something that can handle DTDs, though, Xae-mode is the best.

Mule

Emacs has a very nice multi-language system. It lets me write Japanese easily and can detect a whole variety of file coding systems. Sadly, it doesn't play well with nxml-mode for some unknown reason. I hear there is a new version of Emacs that doesn't require Mule and keeps all the nice multi-language features, though I haven't seen it yet.

hnb

I've since switched to using vim-outliner instead of hnb. See above. A screenshot of my desktop showing hnb

Hnb is a hierarchical notebook. I used it extensively for taking notes in classes. I've found that it helps me organize my notes much better than any other system I've tried (flat text, HTML, word processor, handwritten) as it lets me collapse and expand on ideas.

As it happens to store its save files in XML, I've written some very handy XSLT stylesheets for hnb that let me turn hnb files into Atom feeds or HTML. As Firefox supports client-side application of XSLT, this lets me view my hnb files straight in Firefox for easy printing and browsing.

It's got some quirks to it, namely that it doesn't support UTF-8 or handle auto-save files very well, but it's quite powerful, flexible and effective.