Projects

Here is a somewhat detailed list of various projects I have worked on in my spare time. Most of these do not have good names because I was mostly building them to scratch a personal itch or was just experimenting.

Message Board

Written in PHP, this was my first largish project on my own. The feature set was fairly similar to early releases of phpBB, in that it had private messaging, avatars, signatures, access controls on forum categories. In addition, I had a simple markup language that would allow users to add links or image tags to the board without having to actually use raw HTML. Later I provided the ability for users to upload images and have links to these images generated automatically. It was pretty fast and backed by a MySQL database. It was only ever used on my personal site by a handful of family and friends, so it’s not like it was ever really stressed.

Source Code Status: Existing, but I did not keep the database schema anywhere, so actually getting it running again would mean reverse engineering the source to figure out how to recreate the database. That would be fun, and pretty useless given how good phpBB is these days.

Movie Thing

Also found on my personal site of yore, I had a movie thing. The main purpose for this was I would always have random thoughts, “Oh! I need to see this movie!”, then, when I actually decided to go and rent something, I could never remember that list. PHP was my web language of choice at the time, I wrote an application that would let you take add movies and assign a score of how badly you wanted to see it. That number slowly grew, so the longer a movie was in the system, eventually it would hit the top of your list. You just hit the “I want to see a comedy tonight” button and the top comedy in your personal queue would be shown to you and you head off to the store to rent it.

At some point, I decided to enhance the thing by loading the application with the IMDB’s database. At the time, they provided a way to download text files which were pretty much text dumps of their various tables. I wrote a Perl script to parse that up and dump it into the database. This gave me my first real experience with a fairly large database as the resulting application had several tables with a few hundred thousand rows and a few tables, mostly join tables in my naive 3rd normal form database, that had several million rows.

Source Code Status: As with the message board, I still have a copy of the code for this, but it would involve reading a bunch of fairly poor (Ah, hindsight!) code trying to figure out how to rebuild the database. I have tinkered with the idea of doing this again, but it’s more likely I’ll just build a Rails application that does the same thing.

Desktop Encryption

One of my courses included an assignment to implement the Data Encryption Standard (DES) algorithm. I did that in C++. As that wasn’t terribly useful for anything, I wrote a little Windows application that would allow you to cut and paste some text in, punch in a passphrase, encrypt it and output the base64 encoding of the data. As DES is symmetric, using the same passphrase with the encrypted text would decrypt it.

That was fun and all, but I was also learning design patterns at the time. I decided to use the Strategy pattern and allowed the user to use DES, triple DES (3DES) or Blowfish in various modes such as electronic code book (ECB) or cipher block chaining (CBC). I also wrote an RSA implementation for a public key approach. You would cut and paste in a friend’s public key, add it to the keychain and when you wanted to encrypt something for them, check the box beside the name and write the text. A base64 encoded text blob was generated which you could email or whatever. They cut and pasted the blob into their application, punched in the passphrase and done, decrypted.
It was kind of fun for a while. Not user friendly at all but my first project that I felt was somewhat well built.

Source Code Status: Lost in the Great Hard Drive Crash of 2004. RIP

Distributed Load Testing

I had a short unpaid internship with Espial for a few months. The general gist was that they wanted a distributed load testing application and I wanted to do an honours project. One of the developers there was sort of the key guy who I was to work with. Unfortunately he was fired the second day I was there.

Regardless, I soldiered on and built the largest project I had done to date. It was written in Java and allowed for two major things. Distribution of tests that extend the JUnit test case to clients from a central server and collection of the results of those tests back at the central server. The server application also had a simple user interface to display how many clients were connected, how many threads each was running, status and if results were back. Results were collected and some simple statistics were run on them.

It worked, it was big and I learned quite a bit from it. I would absolutely not build it the same way again.

Source Code Status: Hanging around in one of my backups, the sheer amount of time I spent on it made me rather careful about making sure it wouldn’t be lost. It’s been a long while since I’ve tried to compile it or run it though. I may attempt at some point just on principle, but it’s hardly good stuff.

Wishlist

Another itch that needed scratching. Basically the idea was a place where a user could put up a wishlist online and friends and family of that user could see the list and check things off as they bought them. The idea was to slowly build the list over time and when Christmas or a birthday rolled aorund, the family would have some ideas and be able to co-ordinate. I had wanted to try out Ruby on Rails for some time and used that for this project. It worked, though not terribly pretty. This is where I learned that learning Ruby on Rails is very hard when you don’t know Ruby. Afterwards, I decided to learn Ruby by itself before attemping another Rails project.

Source Code Status: Deleted. It wasn’t overly large (Yay Rails!) and I knew that I was going to write one of these again in the future, so I didn’t really feel any need to keep it around.

Edit: Back in business. Gift list version two is now technically live @ http://gifti.ca.

BF Interpreter

This is my usual first project with a new language. Though depending on my laziness, I generally do not implement the ability to get text from the console. Well, not the first project. I generally write something that you input some text and the program outputs valid code that displays that text back. Once I am satisfied that I can generate somewhat sizable programs, I get to work on an actual interpreter.

So far, I have written interpreters in Java, PHP, Ruby and Javascript. C is next on my list, likely once I’m done the project that is currently taking up my spare time.

Source Code Status: I generally delete these once they are working find as they tend to be fairly small. I think my Ruby implementation was the smallest at about 50 lines including comments.

Gifti.ca

The wishlist 2.0.  This is a Ruby on Rails application that I am taking a progressive enhancement approach to. I think it’s fairly straightforward thus far and will be actively developing it until it gets to a point where I think it can exist on it’s own.

Source Code Status: Alive, kicking and being actively developed. Currently living in a git repository and being edited with NetBeans.

Leave a comment