These are things I’m actively playing around with (maybe once a week or once every 6 months).
What started as a fun challenge has turned into a more feature-complete chatbot than I ever expected. CBot, while implemented in C, supports a lot of cool features:
This is my own custom operating system, targeting 32-bit ARM. Its feature set is slim and constantly evolving. Last I checked, it supports processes with isolated address spaces, preemptive multitasking, and the beginnings of a very primitive implementation of the FAT filesystem. SOS is also slowly, painfully, growing support for the Raspberry Pi as a real-world target, in addition to the Qemu virtual machine.
A minesweeper game written entirely in C, with both a command line and graphical interface. This was a fun and short project to apply my C knowledge, as opposed to my more ambitious, long running projects above.
Recently, I’ve added a new, ncurses-based interface (in addition to the command line and GTK ones), along with an interactive solver. I think this is really fun to play with!
An implementation of a small but mighty lisp in standard C89, portable to any POSIX compliant operating system.
The results of my brief stint in academia, studying for my Master’s degree.
Stephen Brennan & Michael Rabinovich, IEEE International Conference on Distributed Computing Systems, July 2018.
This paper describes “Detour Collectives” or DCol, a system which allows gigabit users to use Multipath TCP to add detour routes to normal TCP connections. This can enable you to achieve better throughput by circumventing bottlenecks in the Internet’s default routes. This paper builds on the previous work in my Master’s Thesis.
My master’s thesis! You can find my page about it here.
A selection of projects I did in school that I’m pretty proud of. Most of these come with papers along with implementations!
A tool written in Go that allows you to query your filesystem using XPath. This was a project for my EECS 433 Database Systems course in the fall of 2016.
My EECS 314 project group (Jeff Copeland, Andrew Mason, Thomas Murphy, Katherine Cass, Aaron Neyer, and myself) created a HTTP 1.0 web server, written entirely in MIPS assembly. In addition to serving static pages, it also comes with “dynamic content” courtesy of a Brainf*** interpreter also written in assembly.
My EECS 444 project group (Jeff Copeland, Andrew Mason, Yigit Kucuk) implemented a firewall in Python. While obviously not practical for normal use, this firewall illustrates the basics of packet filtering (including TCP connection tracking) in a high-level lanugage, which is much easier to understand and extend than C.
These are projects that I knew and loved, but alas have gone stale. Maybe they reached feature completion, maybe the cloud hosting expired, or perhaps I just lost interest. Nonetheless, the source will always be available for these guys, and they can be a fun read through!
I launched a version of the open-source Yelp Love for students, faculty, staff, and alumni of my school. This web application let users send short notes of appreciation (aka “love”) to each other. In addition to setting up our version of the web service on Google Appengine, I also had the opportunity to contribute features and bugfixes back to Yelp’s open source project. At this point, the web service has been decomissioned (it got some press but not very much adoption), but you can still see the repositories and articles.
A kernel module that implements a special device file that allows everyone with a file open to send each other messages in real time, like a chat server. If you think about it, it is acutally an IPC mechanism. Whatever you call it, it’s a lot of fun.
Hacker’s Society hosted an event called “Python and Pie” for incoming freshmen during Fall 2015 orientation. I gave an intermediate Python tutorial, which was all about writing a Twitter bot using Python. As a result, this bot and the accompanying tutorial are now on GitHub for others to learn from. The bot responds to any @mention with a randomly chosen Taylor Swift lyric.
(This bot is almost certainly not running anymore, but could be resurrected quite easily by an interested person!)
I wrote this to illustrate the different system calls and mechanics that underlie one of a programmer’s fundamental tools: the shell. I also wrote a tutorial about it.
A 24 hour Tetris implementation written in C, using the
ncurses library. I
wrote an accompanying blog post about it, which also touched on how important I
find my personal projects, even if some are reimplementations.
Libstephen was my proving ground for learning C; an opportunity to implement in C the data structures I learned in my Java data structures class. It also contains conveniences such as argument parsing, string utilities, regex, logging, and testing utilities. Essentially, it’s a kitchen sink of “standard library” tools.
Unfortunately, this library was also where I learned that API design is hard, and that libraries should do one thing well. It’s also where I learned that you shouldn’t try to write C code like you do Java code! All that to say that I don’t recommend using it anymore :)
NOSJ is a simple JSON parser written in C. It focuses on simplicity, especially with respect to memory allocation.
Get your Taylor Swift lyric fix with this quick’n’dirty tool for downloading song lyrics from MetroLyrics. Or, you know, any other artist’s lyrics.