home » projects

I'm always working on something at home; sometimes I'm working on more than one thing. Here're are a few of the projects I've done.


This is code that parses a formal specification to produce a design document. The specification describes a system largely in terms of the interactions of that system. Design-O-Matic derives the design of the system from those interactions. Also, while a design document contains lots of redundant information, the specification contains none. This is currently written in Perl


I've spent some time working on a home automation project named MonkeyHouse. It started in Perl but I'm writing version 2 in Python in order to get better acquainted with the language. MonkeyHouse is based loosely on the MisterHouse project (hence, the name -- MonkeyHouse is like MisterHouse for Code Monkeys). MonkeyHouse is a system that manipulates a home full of z-wave, X10, or home automation devices of, really, any controllable type. The design is extensible and sub-classes can be implemented to support INSTEON or other centrally-controlled systems.

I an early prototype of v1.0 but I have new requirements and the start of a design (and some proof-of-concept work done in Python) for v2.0. I have purchased an extremely low-power (~5 watts) appliance computer to use as a development station and a MonkeyHouse appliance machine. Eventually, I plan to port it to OpenWRT. I am nearly ready to release portions of it to open-source running at Sourceforge.

David Beers and I established an open-source community to maintain and improve OnBoard C, a wonderful C-language development environment (which includes a C compiler, assembler, editor, porting tool), originally written by Roger Lawrence of Individeo. It runs on, and builds code for, the Palm handheld platform.

As for my contribution, management/ infrastructure, documentation, some coding.

This dormant project is an open-content travel guide. Users can extract hotel, site, and restaurant recommendations for a list of travel destinations. Travelpub would provide location, pricing, and (most importantly) ratings for each entry. The user would then update information for the places he or she visited and enter that back into Travelpub to update and expand the database. Ideally, the user would extracted Travelpub information to a PDA with a connected GPS and software would be supplied to support that. Even so, Travelpub would also support the paper-only user.

At this point, I've got a requirements specification and I started a design but, unfortunately, real life got in the way of continuing this development. Originally, it was designed as a website serviced by Perl/cgi over a mySQL database. The largest issue with this approach was acquiring a mapping database so, if the project gets resurrected, it will probably be run using Google maps for the mapping function.

Travelpub differs from other open source travel guides in several ways. Travelpub does the following.

  • Works hard to find different records for the same site and to combine those records.
  • Differentiates between different types of travel (e.g., resort vs. backpacking).
  • GPS support.
Game Mastering Secrets

I self-published this book a while back but it was, really, the culmination of the Franken-project from Hell. It started out as game mastering software on the PC. I had designed and written the code using the curses library (this was back when a character-based application could still be kind-of neat) and had gotten it into a usable state. In the process of trying to market it, I learned that game stores feared software since they had lost a lot of money on their existing stock of computer games when wholesalers shifted their focus by giving deep discounts to bookstores. It was suggested that I could overcome this fear by bundling the software with a book on game mastering; I agreed and started writing the book. During this process, I decided that the program should really use a proper GUI and proceeded to rewrite the application. Finally, I realized that the book would sell equally well whether or not it included the accompanying software. The result of this process was "Game Mastering Secrets", ISBN 0-9668106-0-0. It turns out that, after all this work, it really wasn't a very good book. Luckily, I ported the code once again -- this time to my Palm. I have one more port in mind but that's a project for a different day.

Karyotype Software

For several years, my after-hours project was consulting for a local engineer and his cytogeneticist wife. I wrote an image capture and manipulation product that allowed technicians to extract digital pictures of chromosome from cells. This helped doctors diagnose genetic dieseases and certain cancers.

The first phase of the project was completed on a Windows machine. This effort included software design as well as implementation of a GUI, application core, and lower-evel code (including developing a custom, highly-optimized image rotation algorithm to replace the slower one in the frame grabber's library and a histogram stretching algorithm).

At the customer's request, I ported the software to XENIX running an entirely different frame grabber. This porcess involved implementing a compatability layer between the application software and new drivers that a friend of mine wrote.

Last I heard, the customer was looking for a printer with enough color resolution be he has probably overcome that hurdle since then.