My GitHub account

Recent software that I've written and open-sourced is available at and isn't listed below.


streetnames is a website that lets you test yourself to see how many streets in San Francisco you can name. - nutrition information viewer is a website that I made for accessing the USDA's nutrition database. It's fast, configurable, and doesn't have any ads.

xsettingsd - desktop-agnostic settings daemon for X11

xsettingsd is a daemon that implements the XSETTINGS specification.

It is intended to be small, fast, and minimally dependent on other libraries. It can serve as an alternative to gnome-settings-daemon for users who are not using the GNOME desktop environment but who still run GTK+ applications and want to configure things such as themes, font antialiasing/hinting, and UI sound effects.

lmnopuz - collaborative crossword puzzles

lmnopuz is a web-based crossword server that my friend Evan and I wrote a few years ago. I think it turned out pretty well, considering that neither of us knew much about programming for the web. Another friend is in the process of porting it to Google Wave.

smartychat - XMPP / Jabber / Google Talk bot for group chats

Some friends and I used to use a multiplexing chat bot called PartyChat for group-chatting within our Gmail accounts. It was down one weekend, so I spent a boring Saturday banging out a quick replacement in Ruby and jokingly named it "smartychat". The original PartyChat was later ported to Google App Engine and then EC2 (I guess?) and now doesn't exist (I think?). If you want to look at my smartychat code as an example of an XMPP bot, it's at GitHub.

audioscrobbler - Ruby library for

This is an implementation of the Audioscrobbler plugin protocol, used by music-playing applications to submit playlist histories to I don't know if this protocol is still in use, but it looks like the gem is still hosted by

trie - Ruby trie data structure implementation

This is an implementation of a trie data structure, well-suited for storage and prefix-based lookup of strings or other sequential data. The code is on GitHub and it looks like there's also a gem at

bind-to-tinydns - convert BIND DNS zone files to djbdns's format

This is a little C program that parses zone files used by the BIND DNS server and spits out their content in the native format of the tinydns component of Dan Bernstein's djbdns DNS server. It should be pretty fast (it does a single pass of each entry and doesn't dynamically allocate any memory). It makes more of an effort to mimic BIND's behavior than other programs and libraries that I've seen that parse zone files. Be advised that I wrote it a long time ago at a previous job and the code is sorta embarrassing now. I've pushed the source to GitHub.

craigsnipe - Craigslist RSS-to-email script

While looking for a new apartment, I wrote a Python script to scrape Craigslist RSS feeds for items matching certain criteria and email them to me. It's pretty rough around the edges (SQL queries are required to configure it), but otherwise works fine. The source is at GitHub.

Gearman Ruby API

Gearman "provides a generic application framework to farm out work to other machines or processes that are better suited to do the work". I have still never actually used it, but I was bored and looking for a project, so I wrote a Ruby API for communicating with Gearman servers. It turns out that writing tests for client-server interaction is kind of neat. The library appears to be under active development by other people at this GitHub repository now.

Typhon Usenet server scripts

Here are a couple of Perl scripts that may be useful if you're using Highwind Software's Typhoon Usenet server. I wrote them in 2003 or 2004 for a previous job and haven't touched them since then. is an authentication wrapper that lets Typhoon check users against a RADIUS server. is a cheesy script that downloads the list of newsgroups from ISC's FTP site and brings the server's active file into sync with it (parsing control messages is a better route to take, though).

dmc - OpenGL-based media center

This is an application that I used to run on a small PC that was hooked up to a stereo and television. It plays MP3s and IT/S3M/MOD/XM modules using the FMOD library, runs arcade, NES, SNES, and Genesis games using a variety of emulators, reads M3U playlists and ID3v1 tags, has some neat graphical effects (translucent zooming text, neat water-rippling effect on backgrounds, text flying all over the place on the music player screen, things happening in time with the music, etc.), supports joypads and IR transmitters, and is themable. Here's the source.

screenshot showing music browser
Album list
screenshot showing music player
Music player
screenshot showing theme browser
Theme browser
screenshot showing ripple effect on background
Ripple effect on background
Reflect - puzzle game

This is a small puzzle game that I wrote in JavaScript a while back to give myself a chance to play with the <canvas> element. The goal is to place the blue mirrors such that the red beams hit the yellow targets.

game screenshot
Epplets - applets for the Enlightenment window manager

Here are some little applets that I wrote way back in the 20th century. They used to, and may still, work with Enlightenment 0.16.

E-Flame is a nice-looking system load monitor, E-Mount lets you mount and unmount drives, and E-Netgraph graphs network utilization. I don't have any screenshots lying around, unfortunately.

Converting my website to AMP (Accelerated Mobile Pages)

I wrote a long thing about how I generated an AMP version of my website.

Shell recipes