This is a directory of some small pieces of open-source software I’ve written over the years. All the big pieces of software I’ve worked on have been in the service of one company or another, and are without exception now discarded. However, these little morsels live on. There’s a lesson in that.
Bonnie · First written in 1989-1990, while I was working on the New Oxford English Dictionary Project at the University of Waterloo. The electronic text of the dictionary was 572M, and we were using 16M Sun workstations, so we really cared about I/O a lot.
Bonnie reads and writes files, character-at-a-time and block-at-a-time, and does a bunch of parallel random seeking. The best exegesis of what it all means is in the comments in the file Bonnie.c. Bonnie’s really OK, Linus Torvalds once called it a reasonable disk performance benchmark and I think that’s fair.
There is another version of Bonnie, Bonnie++, developed by Russell Coker, which appears both at his site and Sourceforge; it is in C++ and includes many tests that Bonnie doesn't. It works around the 32-bit limit by scattering the data across multiple files.
Recent versions of plain ol’ Bonnie add nicer reporting and the option of randomizing the on-disk data, to work around sneaky optimizations such as those ZFS does. The changes are described in Bonnie 64 and Filesystem Lessons.
The Bonnie source code now lives at Google Code.
The quaint old Original Bonnie Web Page survives at our family Textuality.com site.
There’s a version over at Sourceforge but I just hated the interface and performance and reliability there, so please ignore it.
Genx · This is a library in the C language for efficient generation of XML. The XML that’s generated is “canonical”. It’s been sitting at “Final Beta” status since the first half of 2004, even though it’s used in production here and there around the Net.
It’s described, with pointers to docs and a source tarball, in Genx Status.
Ustr is a Java library I wrote sometime in the 2001-2002 timeframe; it
deals efficiently with text encoded as UTF-8 strings and provides all the old
strcpy, and friends,
along with essentially all the
There’s a longer write-up in Yooster, v0.1.
At one point JRuby was thinking of using it, so there’s a Java-4-ized version somewhere over in the JRuby source. I now suspect they won’t use it, and if that becomes clear, will find a home for it in some public-facing source repository.
The Ape · The name stands for Atom Protocol Exerciser, and that’s what it does. It’s written in Ruby, and is designed to run on the Web, with a nice HTML interface describing its interactions with the APP server under test.
The Ape is now a Ruby Gem, and is hosted at RubyForge.
There is plenty of discussion here at ongoing.
mod_atom · This is a C-language Apache module, still under construction, which implements the server side of the Atom protocol. There’s lots of discussion here at ongoing, and the code is at Project Kenai.