Ulia Ea


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.

Source, Try it out, Blog post

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 curl, which 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.

Source, Blog posts [1] [2] [3] [4]

Gunzip in Julia (2013)

I wanted to understand how gzip works, so I wrote gunzip from 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.

Source, Video, Blog post, HN discussion

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


Visualizing Unix command usage (2013)

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 gcc use python? What about scala and clojure?

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 was my first Javascript project. I wrote it a few years ago when I got frustrated with Bixi’s map. It’s a realtime app and they take the bikes out in the winter, so it’s only useful from April to mid-November.


Master’s thesis (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.