Open Source Projects

Here is a catalog of open source projects I’ve started. Feel free to contact me with any questions.

BuBOL logoBuBOL stands for Bulletin Board Object Library. It is a framework of PHP classes to simply and speed up the development of custom web-based forum/bulletin board software. Currently BuBOL is undergoing (yet another) major overhaul, mainly to make use of Zorm for its persistence needs, so its API may change considerably in the coming months.

Zorm is an Hibernate inspired object relational mapping service for PHP. It is still in the early stages of development is not actually available for public release yet.

GrayMocks logoGrayMocks is a dynamic mock object framework for PHP, inspired by Rhino.Mocks; it’s basically Rhino.Mocks for PHP (at least it tries to be). It is used as an easy way to create mock implementations of custom objects (for unit tests) while providing better refactoring support.

PHP Collections logoPHP Collections is a collection of interfaces (and reference implementations) to provide a common API for collection objects in PHP.

PHPeas logoPHPeas is a specification and a helper class that work to provide a common software component model for PHP so that standard APIs can be developed.


In case anyone cares, basically all of the projects were ultimately derived from a project I started back in late 2001/early 2002. I was about to graduate university, and I had been maintaining an ASP 2/3 (classic) bulletin board system I had written for about 3 years. The more I learned about software development, the more I hated my ASP bulletin board’s code base, so I decided it was time for a re-write. Also I figured it’d be a good opportunity for me to pick up PHP, as PHP web hosting was a lot cheaper and easier to come by, plus I could setup a server with a classic LAMP setup for basically nothing in terms of software costs.

So I initially set out to port my bulletin board from ASP classic to PHP (4.x at the time) line-by-line. That wasn’t working out so well (and plus the overall architecture kind of sucked anyway), so I started from scratch with a re-write, creating what I called “XBB”. At one point XBB was going to stand for “eXtendible Bulletin Board”, but over time the acronym has lost all meaning to me and it’s just “XBB”.

The more I worked on XBB, the more I started seeing a common abstraction layer shake out. Thus, BuBOL was born. BuBOL went through several re-writes, including one to PHP5, and then was finally released to SourceForge.

As I continued adding features to BuBOL, I was also learning about Object-relational mapping (ORM) in my day job. I decided to gut out BuBOL’s fairly brittle mapping code and begin working on a PHP based ORM framework that resembled Hibernate, the ORM framework I was using at my day job at the time.

Thus, Zorm was born. But before I could do too much work on Zorm, I needed to solidify some of the assumptions that are fundamental to an ORM framework like Zorm.

Enter PHPeas. PHPeas was my way of giving PHP a JavaBeans-like standard. This would allow me to publish and codify certain assumptions that were required by Zorm.

Zorm was progressing nicely and I got it to work for some very simple cases (creating/updating an individual fairly simple object, selecting 1 or more simple objects, etc.). Then I started working on more complex cases involving collections of objects. Here I hit another assumption wall.

And so PHP Collections came about. This was once again a way for me to publish and codify the assumptions I required in Zorm. Plus I couldn’t find a decent (to me) set of collection interfaces in PHP anyway.

By now I was getting a little bored with working on Zorm as I had gone pretty deep into the original XBB software stack, and there’s not exactly a user interface/experience for an ORM framework. So I climbed back out of my infrastructure library hole and starting working on XBB again. This time, however, I started completely re-shaping the BuBOL APIs to reflect what I had learned about software design and development since the last time I worked on BuBOL.

By now, I was a fan of Test-driven development and what was frustrating (to me) with working on the new BuBOL API was the lack of a good (to me) mock object framework for PHP. I had been spoiled by Rhino.Mocks at my day job, and I wanted the same sort of tool set for PHP.

So I wrote GrayMocks to fill my PHP-dynamic-mock-object void.

And that brings us to the present day. Basically everything’s on hold indefinitely.