My Contribution to Apache

In 2000, I was trying to learn about XML. For me, the way to learn something is by creating something appropriate. I came up with "XMidi". This is a poor choice of name, but an interesting idea.

XMidi is an XML application which allows MIDI data to be expressed in an XML format. By itself, this involves writing little more than a DTD and, perhaps, some examples, but I didn't stop there. I wrote Java programs to go from a MIDI file to XMidi (MX) and from XMidi to a MIDI file (XM).

After thouroughly testing, debugging, and documenting this stuff, I "published" them on my web site. They can be found at the XMidi portion of my site. This was greeted by immediate, overwhelming indifference. Time passes and things change.

In August, 2003 I was contacted by Mark Leicester, who was involved with the Apache "cocoon" project. According to the description at the cocoon web site:

The Apache Cocoon project is a framework for building web publications and applications, that raises the usage of serverside Java, XML and related technologies to a new level. Apache Cocoon, its main project, has been designed for performance and scalability around pipelined SAX processing. Cocoon offers a flexible environment based on a separation of concerns between content, logic, and style. Cocoon's centralized configuration system and sophisticated caching help you to create, deploy, and maintain rock-solid XML server applications.
I hope this clarifies things.

Somehow, Mark discovered XMidi and realized that with some modification, it would be usable as a cocoon application. He contacted me, asking for permission, which I promply granted, to use my code.

Shortly thereafter, it was accepted by the committee - my code is now part of an Apache project! The program,, and all its revisions can be found at If you scroll down a bit, past the imports, to the first "javadoc" comments, before the "class" statement, you will see where Mark has credited me with the "MIDI file parsing parts" of the program. My contribution begins with the parseMIDI method, and continues to the end of the file. In general, Mark's modifications were to change from DOM to SAX. My (unmodified) code can be found within the zip file at my web site. Also, a newer version is there. I am very proud of this accomplishment.