Engineering

I studied CS at Brown University; while I took my first CS course in 2005, I only really went head-first into CS in 2008 after too much fucking around, and graduated in 2010.

My best friend Saurya has a favorite quote of mine:

Becoming a software engineer because you love coding is like becoming a butcher because you love animals.

So personally, I'd love to have a petting zoo. Professionally, my life looks very different.

My personal computing interests are largely in programming languages. I did Advent of Code using a different language every day (twice, in 2016 and 2021) getting to about 22 languages before I tapped out. I wrote a Whitespace compiler in Racket when I was bored on the Google bus. I wrote a Scrabble bot who's backend is in Erlang, the client in Ruby (wrapping ncurses) and the key data structure is written by a C program using a custom binary format. This blog is generated by my first OCaml program. Those (and more) described below. So yeah, I get down!

Professionally, I tend to stick in mid-level application domain, mostly as a backend engineer, though I've also shipped Android apps, and desktop-deployed C++ for multiple platforms.

At a few companies, I've done people management. While I'm a nerdy dude, my passion is and has always been people; it's why I went to college intending to do theatre. "Computers are something I do, people is who I am."

My full job list is on the more general About me page.

Selected Projects (roughtly chronological order)

ScrabbleCheat

Your neighborhood friendly Scrabble solver.

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


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, check the first revision is pablomeier 😛

Ebooker

Markov-chain Twitter bots

Fall 2012. Go. Repo, 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.

Eventually I got a little too ambitious and tried refactoring the code into modules where it didn't make sense, so I think the eventual state of that code is rather miserable. But making a mess is partially what personal projects are for.

Invisible Thief

A Whitespace interpreter in Racket.

August 2012. Racket. Repo.


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. Repo. 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.

Did it again in 2021, Repo, featuring Factor, Standard ML, Common Lisp, Prolog, Erlang, Mercury, Pony, Racket, Ruby, Gleam, C, Elixir, Crystal, Haskell, Go, OCaml, Raku, Clojure, Lua, and Scala.


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.

Fleaswallow

Static site generator in OCaml.

January 2018. OCaml. Repo.


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!

Screamchess

Chess! But with more screaming!

Summer 2017. Repo. 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. It didn't realy work as intended in the field, but it was fun to hack up.

Ghostlight

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

Summer 2015. Repo. 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.

PizzaHutTacoBell

Plugins for StarCraft Streaming.

Fall 2011, Repo. Java, ActionScript 3


Around when Twitch.tv was rebranded from Justin.tv 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.

Others

Ask me about "PlayTabletop" and "Amado," who's repos are privately hosted, two Elixir webapps I got to 80% and decided not to launch. I'd write more now but I'm feeling lazy.

Favorite Articles (outdated, need to add more)

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.