I’m nearly half way through my senior year here at Oregon State University (if all goes well I should graduate in June), but for the next few months it appears that my life will be dominated by a few major projects and a whole lot of minor ones. Since I haven’t been very successful in my efforts to think of a good topic to write about recently, hopefully a brief synopsis of my various projects will work instead.
Fuzzing Linux’s USB Subsystem
Among my various projects, this is the one I’ve spent the least time on so far, but one I’m definitely pretty excited about. One of the major requirements of students in the Honors College here is that each student complete a “Thesis” project. In short, pick a topic, spend a bunch of time on it (doing research, making something, etc) then write a paper about what you did and defend it in front of a panel of experts.
While struggling to decide on a topic (having good ideas is the easy part, you also have to find a faculty member willing to mentor you on the project) I found myself in a guest lecture by Brandon Philips who was speaking about Linux Kernel development. Since I’ve always thought Kernel hacking would be sort of fun, I sent him an email asking for Kernel-related project ideas. One of his suggestions that caught my interest was creating a hardware device to fuzz Linux’s USB implementation and drivers. I’m hoping I can get away with doing this in software against a virtual machine, but I have yet to really pursue it too much.
Mobile Accessibility Project
The other major project I have going for school at the moment is my “Senior Project”. I’m working with fellow student Kiel Friedt and our mentor Carlos Jensen to create an Android application, designed for the deaf, that runs in the background and causes then phone to vibrate and display a visual notification when it detects sounds such as sirens or alarms.
Obviously this is pretty ambitious given the limitations of the hardware, but as of last night we have basic real-time signal processing working and can generate notifications upon detection of pre-programmed tones. Obviously we’re still a long way from being able to detect and identify alarms or sirens, but it does make for a neat demo of what we’re working on.
Of my major projects this is definitely my favorite, and the only one not directly related to school. Since the latter portion of the summer I’ve been working with a few other developers at Cloudkick on an open source deployment tool we’re calling cast.
Basically, we’re creating a service in Node.js that provides a RESTful API for deploying, monitoring and managing applications, regardless of their language or purpose. In future versions we intend to add support for clustering, with peer-to-peer distribution across the cluster and a variety of other neat features to help with large deployments in the cloud or the datacenter.
Minor Projects / Courses
This term I’m taking a “translators” course in which, over the course of the term, we are constructing a compiler for a contrived language that Dr. Budd came up with. The compiler itself is written in Java, with various stages due over the course of the term (the lexer was due last week, the parser is due this week, and so on). Combined with the written assignments, it seems like this will probably account for somewhat over half of my time spent on non-major projects this term.
I’m also taking a scientific visualization course in which it seems that we will be creating a number of visualizations over the course of the term. We use OpenGL, which I have some experience with both from the computer graphics course I took last term and from some playing around I did with it back in highschool (I was going to make the next great first person shooter, or something like that).