You can't have a long career in software without accumulating a bag of tricks (well, some people can, but I wouldn't hire any of those people, would you?). Here are a few programs I've written that might prove useful or interesting to you or somebody you know.

Elko — Stateful session server suite

Much of the scalability of the web derives from the statelessness of the HTTP protocol and the consequent ease with which load may be distributed by simply replicating web servers. However, there remain a core of interesting and valuable interactive network applications that are fundamentally stateful, and trying to shoehorn these into the web paradigm can be awkward and frustrating.

Elko is an application server framework designed to address this, enabling you to quickly and easily create applications that require a live, truly bidirectional dialog between client and server. These especially include applications that require realtime interaction among multiple clients, such as realtime text chat or multiplayer games, or that have a strong "push" component wherein the server needs to initiate much of the interaction, such as service monitors or realtime auctions.

Elko is especially useful in the new world of Ajax, where we try to give web pages the same kind of livelyness and interactivity that people associate with traditional installed application software that has full access to the resources of the underlying OS platform and its hardware.

Jdep — A tool for Java programmers

Jdep is a utility to analyze Java class file dependencies and generate corresponding makefile dependency lines, which, together with a little slight of hand (also documented here), makes it finally possible to use javac in a Unix development environment and have it get along with make the way you wished it always had to begin with.

Ambient — An eccentric MP3 player

Ambient is a Linux MP3 music player program. It was created for two purposes. First, to give me a music player that satisfied my own admittedly somewhat eccentric feature desires. Second, to teach myself to use GTK, which at the time was the least obnoxious GUI toolkit I'd thus far encountered.

The idea for Ambient came about because I bought a big disk drive, ripped my CD collection (about 400 discs) and found myself with 6,000 or so MP3 files on my hands. The various MP3 player programs I tried out seemed to waste a lot of code on useless features like "skins" while not giving you a great handle on managing a big collection of music files (this was way before the advent of iTunes, which, though loaded with cool features, I still find unsatisfactory on a number of dimensions). Also, the way the MP3 world has developed, there seems to be a strong bias towards thinking of individual songs as the granularity of packaging, whereas CDs and other traditional recording media are structured around the album. This is not to say that the album is a better way to organize music, but simply that that is the way the corpus at hand is already structured artistically so it makes sense to be able to think of things that way when you want to. Finally, I wanted a way to characterize the music in my collection according to various traits that correspond more to mood than to genre: I mostly listen to music while working, and I find that the kind of music that is good for coding by is entirely different from the kind of music that good for debugging by, which is in turn entirely different from the kind of music that is good for writing by, and so on. So I wanted a program that I could just instruct, for example, "I'm debugging now" and have it queue up appropriate material. Then when I shift to writing, tell it so and have it seamlessly shift the mood of what it's playing accordingly. That's a big part of what Ambient does.

Ambient OSX — An eccentric MP3 player — for the Mac!

As I became more and more dependent on my MacBook as the place where I store my life, I became more and more irritated by some of the limitations of iTunes relative to the concerns that motivated my having written Ambient in the first place. And anyway, I wanted to learn Cocoa, so now there's a Mac version of Ambient. This is a nearly complete rewrite in Objective C, so it's got a separate distribution of its own. It has a number of advantages, including a much spiffier UI, the ability to play other audio formats besides MP3 files, and it is not dependent on XAudio or FMOD, though it is still dependent on the funky CDDB-driven metadata used by the Linux version (which means you can play the music on your Mac but you'll still want a Linux box to rip and maintain the music library). In the fullness of time I hope to have it make use of the music and metadata from iTunes directly, but that's another project unto itself and no excuse to hold off releasing what I've got now.