Will's Projects

CafeSpot is a social guide to independent cafes, coffee shops, restaurants, and more. It allows people to add and rate their favorite places, and to find new places that they may not know about. CafeSpot is a typical Web 2.0 application that features tagging, maps and geolocation, and a REST API.

CafeSpot is written in Common Lisp and uses PostgreSQL and PostGIS to store location information and perform searches.


trendalicious is an experiment in tracking website popularity trends by monitoring the links that users post to del.icio.us, digg, and reddit. It is very effective in identifying what websites people are most interested in "right now".

Trendalicious was originally written in Common Lisp, and only monitored del.icio.us. Today it is an Erlang application and is capable of monitoring many sites concurrently.


darcs is my favorite version control tool, it solves many of the problems with CVS while being much simpler. darcs tracks patchsets instead of file revisions and every copy of a repository is a fully functional branch, which makes it much easier to maintain multiple lines of development.

darcs.cgi is a web based viewer for darcs repositories; it transforms darcs' XML output into XHTML using XSLT. The templates are easily customized, and darcs.cgi provides a great way for remote users to browse a repository without having to get a local copy.


pw is a simple command-line password management application written in C and tested on MacOS X and Linux. It attempts to be secure by doing all operations in memory locked into physical memory via mlock(). Rijndael(AES)-256, in CBC mode, is used to encrypt each record with a 256 bit key generated by SHA-256 on a random salt and passphrase. pw can also generate random alphanumeric passwords from the random device.


Embedded computers from Soekris Engineering running OpenBSD make an excellent choice for custom network devices. One silent, small, low-power box can provide a high quality firewall, routing, traffic encryption using IPSec, local DNS and NTP services, QoS bandwidth management, etc.

The router project describes how to build one of these devices from scratch, including setting up a read-only flash installation, netbooting, firewall and ipsec configuration, etc.


J2EE application servers provide a lot of useful functionality that most web applications need: resource pooling, a request handler framework, HTML templates, access controls, session management, etc. Unfortunately J2EE is hampered by excessive complexity, and Java which leaves a lot to be desired in a language.

cerise is a J2EE-style web application server written in the ruby programming language. It provides most of the features of J2EE to ruby programs, but is much more lightweight and flexible.