A few projects I worked on in 2013 and before. Mostly for fun, mostly when at the Recurse Center.
- Computers are fast (2016)
- Operating system in Rust (2013)
- Visualizing Git workflows (2013)
- Python TCP stack (2013)
- Gunzip in Julia (2013)
- Fun with kernel modules (2013)
- Visualizing Unix command usage (2013)
- Bike availability map (2011)
- Master’s thesis (2011)
Computers are fast (2015)
Operating system in Rust (2013)
A toy operating system in Rust for x86. It only has a basic keyboard driver.
I’ve also written a pretty popular series of blog posts about this process, like programming without malloc and struggling with getting keyboard interrupts to work. You can see all my OS-hacking related posts.
It was really fun to learn Rust – the community is really friendly, and I’ve been able to contribute back to the documentation.
Visualizing Git workflows (2013)
When Philip Guo was a resident at Hacker School, we had some interesting discussions about how to automatically learn people’s programming workflows and generate information for novices or tool-creators to use.
After that, I built a tool to visualize your Git workflow. As of Dec. 2013 about 2300 people have used it.
Python TCP stack (2013)
This was an exercise in learning how TCP works. It works exactly
well enough to implement a slow and finicky version of
is pretty exciting.
It is also a huge pain because it turns out writing a TCP stack when you already have a TCP stack in your kernel is hard. I needed to invent an IP address and send gratuitous ARPs to the router so that all my connections didn’t get reset.
One thing I found while writing this is that it’s important for a TCP stack to be fast – this implementation lags pretty badly because a pure Python implementation is just too slow to handle incoming packets as quickly as they come in. It sends an ACK for each packet and a backlog develops pretty quickly.
Gunzip in Julia (2013)
I wanted to understand how
gzip works, so I wrote
scratch in Julia.
It then turned out that unzipping the Raven and printing out the intermediate results made a really compelling visualization of how LZ77 compression works. The internet liked it a lot.
Fun with kernel modules (2013)
When I arrived at Hacker School I had no idea about what the Linux kernel did or how to make it do anything. So my first action was to find out. I wrote a couple of blog posts about what the Linux kernel does and processes vs threads before deciding to learn by writing a kernel module.
It turns out that writing silly kernel modules is not too hard! I wrote a module that writes to the log every time a packet arrives and a small rootkit (via a lot of copying and and pasting).
This is more of a “fun exploration” than a “serious project”.
A few months ago I got curious about which unix command line utilities were the most popular, so I ran a survey on Hacker News. I ended up getting 1,500 responses or so.
Once I had that, I wanted to know how commands are related to each
other: do people who use
python? What about
Useful for fun times and discovering new tools to use. It’s a bit computationally intensive, so best viewed in Chrome.
Bike availability map (2011)
This is certainly the project I’ve spent the longest on. I wrote my master’s thesis on the algebra of topological quantum computing.
The idea is that in order to understand the algebra behind topological quantum computing, one needs to understand
- quantum groups, in particular quantum groups at roots of unity
- how to get from the category of representations of those quantum groups to modular tensor categories,
- How topological quantum computing happens in these modular tensor categories
My advisor Prakash Panangaden and I found it hard to find a good reference which tied all these things together, so I wrote my thesis about it.