As a programmer I feel it's my duty to work on projects outside of work to keep up my skills and make life more fun. This is a collection of items I've worked on, outside of work, over the years.

  • sstorie.com server
    • The sstorie.com domain grew out of my need to have a place on the web. This server is a Pentium-III 1U box running Debian Sarge and provides email (qmail), DNS (djbdns), web sites (Apache), SPAM prevention (Spamassassin), and shell accounts to several sites and users. It is co-located in Honeycomb Internet Services, and has been a project of mine for several years now.
  • outlook2qconfirm
    • This is a small ruby script to convert the exported address book from Outlook Express into the collection of files needed to whitelist the addresses within qconfirm.
  • NPR RealAudio Podcast Converter
    • I love NPR, but so many of their shows are broadcast in the dreadful RealAudio format. To get around this problem I wrote a Ruby application to check for new shows, download them in RealAudio format, and then convert them to mp3 automatically. This is a pretty small application, but it's an example of designing objects to properly abstract functionality. For example, by creating a RealAudioPodcast abstract class I can simplify each implementation and make the multi-threaded consuming code very simple. Requires mplayer and lame to work.
  • Bloom Filter Implementation(s)
    • I was inspired by the CodeKata site some time ago and started doing some of the exercises. The first one I tried was implementing a bloom filter in a variety of languages. I opted for a ruby implementation because of its elegance and I was curious to learn more.
  • Ruby on Rails version of sstorie.com
    • With all the buzz around Ruby on Rails (ROR) it was my duty to at least check it out. I wrote a version of this site with the rails framework, and even got some nice AJAX features added. For example, if you were logged in, you could click on a blog post's text and it would turn into a text box for you to edit automatically. However, ROR is fairly new, and heavily based on using convention over configuration, so the base utilities I wanted (photo gallery mostly) just didn't exist. I liked the framework, but didn't want to take on quite so much customization at the time.
  • .NET Command Wrapper
    • This was a simple utility I wrote to allow a user to kick off a process, and display a simple form to provide any messages from stdout. My main use for this was to add a shell extension for .sln files (Visual Studio Solution) so that I could build them without firing up Visual Studio. By monitoring the output I could easily see if the solution built correctly or not, and reduces the time spent for quickly editing files and building solutions.
  • NICAN
    • NICAN is a C++ library I developed in grad school to facilitate the dynamic adaptation of applications, both distributed and non-distributed. It features a modular, object-oriented design and an XML scheme used for resource specification. I developed several general purpose modules, but my main goal was to create a module that uses packet probing to dynamically adapt an application using the pARMS library.
  • UDP Packet Probing
    • As part of my graduate work I implemented a small client-server program to send streams of packets and measure the round trip time. This was also a chance to use the excellent libowfat library developed by Felix von Leitner.
  • Base Converter in C
    • This was a simple app I developed for the CS 2521 course I was a teaching assistant for. It allows you to convert a number from any base to any other base.
  • Linux kernel module for cloaking directories
    • This was my first (and only) foray into hacking the Linux kernel. I wanted to write a kernel module that would let you hide the presence of a directory unless you possessed a specific UID. I don't kid myself into thinking this works 100%, but it was fun to dive into the kernel.
  • MNVibe.com
    • This is a hobby site I created (jan 2001) and co-administered for the MN electronic music scene. MNVibe has grown larger than I could have ever imagined and has had over 2 million visitors since its creation. The site uses a combination of PHP and MySQL to provide a system that let users add and edit their own events, music mixes, and forum posts. I am really proud of MNVibe and think it's a prime example of what's possible when you dedicate yourself to something. I sold the site code and the mnvibe.com domain to Vital Vinyl Dance Records in the fall of 2004 for a little $$. To my knowledge the site is still running on the 3rd-iteration code base I created back in 2003.