My GitHub account

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

Converting my website to AMP (Accelerated Mobile Pages)
Running Node.js and npm JavaScript code as an unprivileged user

I finally grew uncomfortable enough about running untrusted JavaScript that I figured out how to run it using a less-privileged account.

Generating RSS feeds for Feedly

I wrote down miscellaneous advice about generating RSS/ATOM/JSON feeds for the Feedly feed reader.

Shell recipes
Debian on an ASUS Chromebox
Older projects

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.


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.

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


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)

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 circa 2003 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.