Below are a few things I've worked on over the years.


A tool that generates a 3D-printable CAD model of a key blank from a single picture of the face of a lock.

BBB Blinken Bulbs

Hackable light display on the CSE staircase (more-permanent installation of XMasPi v2)


A fast Internet scanner.


A Linux Kernel Module that allows you to modify and inspect a TCP socket's state from userspace.

Fox OpenFlow Controller

A lightweight, event-driven OpenFlow Controller written in C.

XMasPi Light controller

Umich hack that allowed students to control a strand of 100 addressable RGB LEDs, strung up in the BBB Staircase.


Anticensorship research project that functions by placing proxies at large ISPs, in order to make them more difficult to block.

India EVM security analysis

Security analysis of India's Electronic Voting Machines.


Final project for EECS 573 (Microarchitecture), an attempt at securing memory against side-channel cache attacks or direct bus-sniffing attacks.

Laundry Laundering

Final project for EECS 588 (Computer Security). Jahan and I implemented a proof-of-concept laundry-stealing device, that gives an attacker free laundry.


Instant-message based BGP looking glass (send it a message at!)


A new approach to IPv4 address sharing.

Radio Aurora Explorer (RAX)

A satellite designed and built at the University of Michigan, for the purpose of studying plasma formations in the ionosphere.

Internet Interruptor

Final project for EECS 373, consisting of an embedded system plugged into an Ethernet network. It functioned as a packet sniffer in the most basic mode, and was capable of poisoning HTTP requests in real time, and functioning as a simple web server on an arbitrary IP address. Worked with a partner (Greg Ruhnow) to interface with an LCD display. I spent a large amount of time on this project digging through documentation, learning and implementing the TCP/IP stack, and overcomming general quirkiness with the MPC823.

Mandelbrot set

Inspired by the Mandelbrot set song, I wrote a simple python application to generate images of this interesting fractal. I experimented with various resolutions, culminating in the generation of a 20480x12800 image.

Lights Out

AJAX multi-player version of the 1995 Tiger Toys Lights Out; Changes made by any visitor are server-pushed to anyone else viewing the page. The frontend (HTML and Javascript) was developed by Thomas Bombach, and the backend (PHP and MySQL) by myself. We designed a simple protocol before writing any code for how to share game data. The challange of this project was to find a way to allow the server to give data to the client (browser) without the client making a request. This is backward from how HTTP was designed, and thus made such a transaction difficult.


(Login: demo/demo) This is a class website for a philosphy class at my high school. A large part of this class is that everyone has an opportunity to share their ideas and life stories with the rest of the class. By the end of the semester, everyone writes P-TIPs (Positive Truthful Insightful Paragraphs) about everyone else in the class. For a class of size 30, this equates to 30*29=870 paragraphs per class that the single teacher used to manage via email. After implementation, the teacher has estimated that he spends less than half of the time managing this project as he did before the website. In addition to saving time, it is a much more reliable system for receiving, cataloging, and grading each of the thousands of paragraphs each semester.

Reset Sign

Inspired by an xkcd comic, this site includes an AJAX chatbox I wrote, along with an AJAX updated sign. The challenge for this project was making lightweight enough code so that the large amount of AJAX requests do not make operation sluggish, while the back-end needed to be fast enough to support several users without slowing down.

While at first look, running a webserver out of a dorm room from scrap parts does not seem like a challenge (aside from heat-removal in a cardboard box), this project is constantly made interesting by having no access to a connected monitor or keyboard. That is, while I have physical access to the server, I do all the administration over SSH. This creates interesting challenges when the server does not have a public IP. This was overcome by installing a second NIC that has a statically assigned IP address on the private network, allowing me to log in even when the dhcp link is down.

JS Physics

A proof of concept attempting to do basic collision detection and physics with Javascript, something I haden't seen done at the time.


Arbitrary point-giving/receiving website. The idea is to give points to other people for cool things they do, and people give you points for things you do.