I studied Computer Science software at Brown University's Computer Science Department, starting around 2008 after some existential angst, graduating in 2010.

I'd say my interests are primarily in programming languages, though most of my professional experience is in the mid-level application domain, working on large projects in Python, Java, and C++.



Your neighborhood friendly Scrabble solver.

August 2010-2011. Erlang, Ruby, C. GitHub

This was my first major side project after graduating college. I wanted to write a bot for Scrabble, and I wanted to learn Erlang. I did it! Here's how it breaks down:

It's actually pretty challenging to do this! Boggle is a common interview puzzle, but Scrabble has a lot trickier constraints. The trick is to use a variation of a Trie called a GADDAG, a bizarre data structure more-or-less invented for this kind of problem in 1995. I wrote the Wikipedia page for it!


Markov-chain Twitter bots

Fall 2012. Go. GitHub, announcement/explanation blog post.

I was miserable at Google and thought I might find love if I joined a programming language team. Issue is, I didn't actually know any Go. So I learned by writing this!

Generating Markov chains is not particularly challenging in Go (it's literally one of their codewalks to teach the language), but I learned a ton writing my own OAuth1 client for Twitter's API.


Static site generator in OCaml.

January 2018. OCaml. Github.

Baby's first OCaml project: I used to generate this site with Frog, an amazing site generator by the inimitable Greg Hendershott, but decided I wanted a few other features (like adding OpenGraph tags per-post) and/or a different templating model.

I started hacking and kept waiting for my sense to catch up to me; it never did and I finished!

Invisible Thief

A Whitespace interpreter in Racket.

August 2012. Racket. GitHub.

Did I mention I was miserable at Google? I was miserable at Google.

The daily commute had me on a Google Bus for ~4 hours every day where I couldn't work on company code: you must tunnel into their machines (no company code in your laptop), my team's project was in Java and needed a graphical environment like Eclipse, and I was competing with ~80 other Googlers to use the bus Wi-Fi. It wasn't conducive to tunneling a full X session.

So I read two blog posts (one on creating languages in Racket and one on Racket macros) and got to work on building a silly language interpreter.

Advent of Code 2016

22 languages in as many days.

December 2016. GitHub. Features Standard ML, Factor, Racket, Ruby, Go, C, Prolog, Haskell, Erlang, C++, Common Lisp, Rust, Python, Java, JavaScript, Pyret, Scala, Elixir, Mercury, Clojure, Lua, Awk, SQL.

I challenged myself to do Advent of Code every day in a new language. There were 25 days, I got through about 20 to completion, with half-solutions to another 3 or 4.


Chess! But with more screaming!

Summer 2017. GitHub. Python, collaboration with Karen Castelletti and Sara Drakeley.

For Burning Man 2017, we built a physical chess set that used a plexiglass board, a Raspberry Pi, a webcam, speakers, and some software to build a chess set that reacted to the game. So pieces would mourn their deaths, give soliloquys, and heckle the player.


IMDb for live performance web app (or most of it, anyways).

Summer 2015. GitHub. Erlang, Postgres.

I wanted to write a Real App that interested me, and I've always liked the idea of something like IMDb for live performance and theater. I got pretty far and modelling the data was super fun, but then I had a tough breakup, put it down, and haven't picked it up again. Learned a lot about Erlang, and using odd tech for products.


Plugins for StarCraft Streaming.

Fall 2011, GitHub. Java, ActionScript 3

Around when was rebranded from and StarCraft streaming was starting to boom, I wanted my stream to have some features like post-game stats. The most popular streaming software at the time (XSplit) allowed for ActionScript plugins, and a StarCraft replay tool allowed for Java plugins, so I wrote two plugins (Pizza Hut and Taco Bell) which communicated over a socket to provide and display stats.

This was also a way to Get Involved in my company's product: I was working on the Flash Runtime, and felt like I wasn't engaging the customer enough since I wasn't a Flash developer, so I built this entirely with our open-source ActionScript tools.

Favorite Articles

Most of us are pretty jaded having been on Hacker News or /r/programming and seeing a million "Why I switched to X" articles. That said, a few have really shaped how I approach programming in industry.