Last updated: 11 February 2016


Slack is a library for building bots to integrate with your slack teams in go. It features an interface similar to that of hubot, except with hubot's "hear" replaced with "Listen." You can read the docs to learn more about how to use the library.

I originally wrote this as a way to teach myself go. This ended up being a really valuable experience for me; the original result was quite a horrid mess (but it worked!), but I was able to go back and clean up it pretty nicely (I think). It's even sort of usable.


The Jolly Advisor

The Jolly Advisor was a senior project a group of my friends did in Spring 2015, which I made a pretty significant number of contributions to, despite my not being enrolled in the course (the professor was cool with it, don't worry).

The project was born out of a frustration with the Student Information System (SIS), and aimed to provide students a much better way for getting information about their courses and course requirements. Dealing with getting the information out of SIS and into our own database ended up being quite a bit of a pain, but we finished the project with having fully implemented search functionality, a course scheduler, and a course wish list.

The project is one giant heap of rails, which was my bread-and-butter at the time (and still is, in some respects).

See it live!


MQTT-Locust was a final project for a Connected Devices special topic course I took last fall. For the project, Matthew Bentley and I extended the locust load testing framework to support the MQTT protocol.



McCabe is a tool I wrote once upon a time for measuring the cyclomatic complexity of Ruby code. Honestly, I wrote it so long ago that I can't really remember what features it actually has. You can definitely give it an argument to give it a threshold for how high the complexity can get. I think there's also an option to silence the output and exit with success/failure for use in scripts. Oh, well. It has a star on GitHub, so there! Someone thought it was useful. Talk to them.



Hava is a toy project I wrote to give myself more experience writing "real" Haskell. That, plus I was really bored over that fall break. It's a lexer and parser for a Java-like language (Haskell + Java = hava, see how clever I am?). The code gets pretty nasty, and there's probably way better ways to implement this (and yes, I know there are entire parsing libraries you can just import), but I learned a lot from it. One of the cooler things, in my opinion, is that each part of the pipeline can consume the output of the previous part. So, you can either compile the whole pipeline and run that as a standalone binary, or, you can compile the lexer and parser separately and compose them with unix pipes.



Yams (Yams - the Awesome MIPS Server) was a final project for my computer architecture (EECS 314) course. For our project, we (Stephen Brennan, Jeff Copeland, Thomas Murphy, Katherine Cass, Aaron Neyer, and I) decided to implement an HTTP server in MIPS assembly language (the project required us to use MIPS for something, so we're not complete masochists). Wow, that was a lot of parentheses for just two sentences.

It turned out great! It could even do stuff like load 70MB images (very slowly) and gifs. We also ended up writing our presentation slides in an HTML/JS slideshow framework (reveal JS) and served our final presentation using yams. It was pretty rad. Disclaimer: it is definitely not production-ready.



PyWall was a final project for my computer security (EECS 444) course. For the project, we (Stephen Brennan, Jeff Copeland, and I) implemented a basic firewall in Python. It uses the netfilter-queue library, so if you're on Windows or a Mac, you won't be able to bask in its glory. It's also not practical at all, but it demonstrates many concepts found in firewalls today. Also, being implemented in a high-level language like Python, it's arguably much more easily understandable and extensible than it would have been had we written in C.