More Favorite BoingBoing links (Jan/Feb 2001)
Following on from my previous post, here are some more links from BoingBoing's early days that I particularly like. Their full first five year archives can be found here.
- Home Depot Misadventures. Never underestimate the stupidity of some people [link]
- ACME Klein Bottles [link]
- Deluxe Rocketships & Cypressionism by Jimmy Descant [link]
- Unique Timepieces designed by Roger Wood [link]
- Things to Say When You're Losing a Technical Argument [link]
- Cool watercolor paintings of simple Lego sculptures [link]
- ACME LICENSE MAKER [link]
( May 24 2005, 01:46:24 PM PDT ) [Listen] Permalink
Extensible Open Source Projects
|
[Original java.net posting]. This one generated quite a few comments the first time around to a purely Java audience. So I've slightly adjusted the text (with the new text in bold) to hopefully clarify what I was trying to say. |
Quite often an open source project is started because somebody wanted some functionality that didn't already exist (or that they weren't aware of). A small project is released and it will either flourish or languish depending upon whether others find it useful or not.
I've seen small one time hacks even become released products from commercial companies. Once such a one-off hack becomes a product, then it needs to be supported which can be quite painful if the initial hack wasn't pretty.
A better product release approach would have been to properly design the application, get potential user requirements, test prototypes with real users, create a functional specification, then work towards an implementation (making sure that everything is fully documented). A lot of work, that not everybody wants to do.
Successful projects have typically taken those steps and more.
More and more I'm seeing projects that provide some kind of extensible functionality. One such approach is with plugins. For example, vim provides this ability to allow you to automatically include scripts that get loaded when the editor starts. Gimp provides a plugin capability to allow you to have extra image manipulation functionality beyond what exists by default. There are lots of others.
With Java apps, a nice way to provide extensibility is to dynamically load certain classes depending upon what you want to do. I used this approach to dynamically load the transport layer code in JSDT, a toolkit for writing collaborative applications.
There are other approaches; graphical and audio codecs, web browser plugins, shared libraries etc.
There is a catch in that this kind of functionality isn't always the most straight forward approach to doing something if you are just focused on trying to achieve a simple task. Sometimes programmers adopt the "quick'n'dirty" approach rather than consider the greater good. As projects become popular, then functionality like this can be added. There is an old adage that says that a program isn't any good until it's been rewritten 2-3 times and that you should always throw the first one away. Perhaps a better approach would be to take more time and be a little more thorough in the way that that first version is created.
( May 24 2005, 06:10:42 AM PDT ) [Listen] Permalink Comments [1]












