External projects

(Or in other words, other people's projects I work on.)

Primary maintainer

Federated, decentralized stream server that does most of what people really want from a social network. Highly extensible via a big beautiful ActivityStreams API.



Opt out of global data surveillance programs like PRISM, XKeyscore and Tempora. Help make mass surveillance of entire populations uneconomical!

Completed projects


EasyC is a web application that was written by me and a friend for our robotics club. Essentially, it lets builders create prototype code with a drag-and-drop interface that's reminiscent of NXT-G. (It's in the completed section because it was, at one time, complete. However, it's since broken and we haven't bothered to fix it.)

Is The Field Control System Down?

Once I was at an FTC event where the Field Control System was down for about two hours. While I was waiting in the stands, I bought the domain for this website, created the web page in GitHub's web interface (because I was using a tablet), and SSH'd into my server and deployed it.


Recreate the URL scheme that GitHub Pages gives you, to avoid breaking links if you move to your own server. Currently it's a little aggressive (it deploys forks, which GitHub Pages does not) and could use some more features, but it gets the job done. Written primarily because I had this exact problem when moving to steevie.

In we needed to look into what Node versions different Linux distributions ship, so we could figure out when we could drop support for old Node versions. So I went and looked at a bunch of distribution sites, put all the data into a nice JSON file, wrote some nice Jade to display it, and put it up on

Eventually, I'll add a neat JS-powered selector that lets you interactively filter distros and versions based on what Node versions you're willing to support and/or what distributions you know you have to support. In the meantime, though, the site fufills its original purpose. Hence, "completed".


fulldom exposes a single endpoint at /<url> which, when sent an HTTP GET request, will give you back the serialized DOM of the page at <url> when the page's JS has "finished running". "Finished running" is in quotes because determining when a page's JS is "finished running" is basically impossible, so the point at which the DOM is serialized is based on a user-provided heuristic.

This is useful for scraping webpages which fill in their content with JS (i.e. webpages that suck at being webpages) with, say, Huginn.

Ongoing projects


I keep all my dotfiles on GitHub. This repository is ever-improving, because I spend way too much time customizing/playing with my environment and not enough time doing real work.


The continual maintenance and improvement of steevie. This includes both traditional system administration work as well as Puppet stuff.


Various PKGBUILDs I've written for the AUR.

Incomplete projects


Stratic is the streaming static site generator. It's comparible to Jekyll or Wintersmith, but instead of having a monolithic framework that you have to learn, it's all implemented in streaming Node.js modules orchestrated using Gulp. That means that not only do you have the power of The Node Way™ - small, composable modules that can easily be swapped out for something different - but you have the power of all of npm, too. Zero plugins required.


HackVCR can be thought of as screencasts on steroids. The idea is that instead of recording raw pixels, we should record keystokes in editors and frames in browsers. Then you can programmatically decide what happens with the "screencast" - e.g. how the windows are laid out, having only one window visible (useful when nothing is happening in the browser/editor), etc.

HackVCR uses a client-server model, where the server is a daemon that runs on the user's computer and the client is an editor extension or a browser extension. It uses a custom protocol reminiscent of SMTP, and runs over a Unix socket that, by default, sits in /tmp. Currently a very basic server is mostly implemented.

Fractured Reality

An exploration game like no other.


Python script to automatically download Arch GNU/Linux package updates without risking system breakage. Suitable for automated use with e.g. cron.


Terrible interactive calculator. Quoting from the icalc(1) manpage: "Don't use this. I wrote it to learn C, Make and troff. It's terrible and you almost certainly want bc(1) instead."


Experimental story software that utilizes the concept of emergence.

School projects

These have been put into their own section because they are, frankly, mostly boring.

Texting While Driving

For a Health project, I created a PSA website on texting while driving. It's written almost completely from scratch, only using a base of HTML5 Boilerplate, Twitter Bootstrap, and Font Awesome.

Dichotomous Key

Have you ever not known what programming language you were using? No problem. Use this hacky, buggy, over-verbose, aggressively non-DRY and overall terrible dichotomous key I built, for when we were learning about dichotomous keys in my Lab Science class.

Tidal & Wave Power

All you ever wanted to know about tidal/wave power. This site is intended as a reference, and was created for a Lab Science project with the assistance of a friend.

Boeing & Pollution

Informational website on the pollution impacts of Boeing in Washington.