Open Source Ramblings

By that, I don’t mean my ramblings are open source, but I guess they might as well be if I publish them here! I’m talking about open source software. For years, I enjoyed using many projects, and even was able to submit patches on a couple of them. It wasn’t until 2004 that I started my own project. My first one was a Java based MP3 player, to replace winamp. I wanted to try out my own smart song shuffling ideas. That project did attract some attention, but never really took off. To be fair, I ended up getting an iPod and using iTunes, so my interest in the project also waned.

Then, 2 years ago, I started a project that I thought would be useful to a lot of developers. Now, with over 1000 downloads of the last release, I’m happy to say I’m really part of the open source community now. Since this project got off the ground, I started several others that contain things I built and thought were useful. Check here for a complete list. The project range from a LEGO Mindstorms NXT java client lib, to ant tasks for uploading data to Amazon S3.

My philosophy has always been about sharing an openness, but in recent years, I’ve begun to be more of a participant than watching from the sidelines. I really wish more programmers would participate in open source projects. Unless you can get paid for it, it will take up some of your spare time. Finding time for open source has to be a decision and commitment you make. Some of my motivation are financially driven. I think my AWS related projects could help me professionally since I’m a consultant for a living. Recently, I was offered a chance to co-author a book, based on my open source work. (I said “yes”, so there goes some more of my precious time!)

Sometimes, you can start a project and have it be sponsored by your employer, or client. One of my projects started by asking if it was OK to take a small piece of code I had written and start an open source project. Some companies look favorably on contributing to open source, as long as it doesn’t take much time. I think enough of us have used something developed by the open source community, so payback is nice.

I’ll close by discussing some of the things that a successful open source project requires of a developer. First, you must be diligent in a number of things.

  • keep your project up to date
  • answer users questions promptly
  • test, test and then test some more
  • follow a written release procedure

The first thing might be obvious, but unless you keep at it (especially when you are implement a client to an evolving API), people will forget about your project and/or get irritated. If you have a mailing list or forum for your project, people will use it. Don’t forget to check regularly. I’ve been using google code and their forums for my projects in the past few years and like the setup a lot. When talking to users, be polite. The old saying about attracting more bees with honey vs. shit is true. Everyone gets grumpy from time to time, but run the project like a business and try to make people happy. You will be rewarded!

Testing. If there is one thing I’ve found from writing software over the years, it is that testing is under rated. Automated unit tests will help you ensure your old code doesn’t break as you add new things. It also gives you a predictable way to test that ad-hoc testing just can’t do. Before I do a release, I often announce that I think the code is ready (in the project forum), then wait a few days. That gives people time to kick the tires. Some people love to beta test. They want the project to work also, especially if they rely on it. 

Finally, documented (and scripted where possible) procedures for doing your releases will save you from embarrassing mistakes! I have parts of my release procedure as ant tasks. The major steps are written in a human readable script that is checked in to subversion. Not having to remember every little thing is a huge help. I simply look at my “howto-release” file, and do everything in there.

Thanks for listening… 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s