A Brief History of the Paperboy WDM Project

Many years ago, sometime around 1996, I decided that my quote website could not be maintained as static pages but needed to be entered into a database. Thus began my initiation into the world of good design and separation of components. At the time, I was half unaware of what tools were freely available and half unable to use them because of my limited computer knowledge and the fact that I was running the Macintosh (Classic) operating system. So I did what any budding developer would, I started making my own.

Fast forward to October 2004 when the Paperboy RSS project began. Paperboy RSS provides a simple way to apply XSLT to XML files and uses the libxml2/libxslt libraries to do so. The then current version of my website generating code was written in Perl and used the XML::LibXML and XML::LibXSLT modules to interact with those same libraries. In developing Paperboy RSS we realized that the project could be used for far more than simply a news feed reader/aggregator; it could be used for, say, translating content into presentation for websites. And I needed to work on overhauling/refactoring to version 6.0 of my current code anyways... Thus the idea for Paperboy WDM was born.

A History of Names

As projects grow and change, their names too must evolve. It's also becoming common to have umbrella projects which oversee a number of smaller related projects.

Paperboy RSS (also known as simply Paperboy, big P) began as an RSS feed reader and over time evolved to become the name of the umbrella project for handling all the components that go into the feed reader like the main utility program paperboy (small P) and the daemon/batch program paperboyd used for automating calls to paperboy. (For more Paperboy subprojects see their website.) The big-P/little-P distinction parallels Perl's convention for distinguishing the larger project/language from the binary program that's a part of it.

The idea for a "web development manager" spawned from the Paperboy RSS project, but was swiftly identified as being large enough and different enough in scope from Paperboy RSS to warrant its own project: Paperboy WDM ("Paperboy Web Dee Em"), also known as pbwdm for short (which I've been pronouncing "pibwim", with vowels like in "pit" not "Pete"). Also an umbrella project, pbwdm is in control of a number of subprojects, including:

Some other subprojects which will be started on once the above are a bit closer to completion are:

Other names fitting the theme that may be used for new subprojects: puck, ariel, umbriel, psammead, mab. It should be noted that Paperboy RSS and Paperboy WDM are seperate umbrella projects with seperate developer/maintainer groups.

[ aperboy and pbwdm project organization ]

So what do I call it?

Well that depends on what you're referring to. "Paperboy WDM" or "pbwdm" describe the project and community as a whole. "Titania" refers to the main program that pbwdm is designed around.

Versioning

The complete version syntax for pbwdm is Major.Minor.Patch+cvsYYYYMMDD. Where major versions constitute radical changes that most likely break backwards compatibility. Minor version indicates a significant change, but one that doesn't affect compatibility (things like adding new functions or features). The patch version (also potentially referred to as the sub-version) indicates trivial but notable changes like bug fixes, minor refactoring that doesn't affect the UI, and the like. The "+cvs" and so forth is called the extra versioning. It refers to the last year (YYYY), month (MM), and day (DD) that the CVS repository was modified. If the repository moves to SVN the extra versioning will be "+svn" and so forth, similarly if any other versioning system is used.

Each file has its own version number. The major and minor versions for all files will be in sync for files that are of the same version and designed to work together. The patch and extra versions are permitted to change freely.

Note that the major, minor, and patch versions aren't necessarily lexicographically sortable. The minor version before 1.10 is 1.9, not 1.09. You can add the zeros in if you really like I suppose, but they won't be there for version information returned by the project. (For those who really care about the nitty gritty, each of those three ranges from 0 to 255 and the internal format of the version number is stored in hexadecimal with two "digits" per version. So v1.2.3 is 0x010203, and 0x010a10 is v1.10.16.) The extra versioning, on the other hand, is always lexicographically sortable and each component always has the indicated number of digits.