See also archived projects.

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


Filter for today's date in logfiles in an Artificial Ignorance-compatible way. Or in other words, make sure you never miss logs from today, even if you forget about stuff or if filter-other-days can't handle your logfile format.

You can read more about the background of and impetus for this design on my blog.

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.

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.

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.


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.

Tor relay

I have maintained a Tor relay, strugees, since February 2nd, 2014. It was originally descended from the now-defunct Tor Cloud project, so it ran Ubuntu.

In March 2017 the relay crashed due to an unresolvable boot problem - I took this as an opportunity to properly configure the relay from scratch as well as switch to FreeBSD to improve the network diversity. I brought the new relay online August 5th 2017. Its configuration is version-controlled on GitHub.

Incomplete projects

Fractured Reality

An exploration game like no other.


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.