Though computer programming has rather little to do with computer science on the whole, most computer scientists (including me) do a lot of programming. Here's a few things that may be of use to somebody else out there. All code is released under the 3-clause (a.k.a. "revised") a BSD License unless otherwise specified.

Larger Projects


One of my more ambitious software undertakings, convolupy aims to create a platform for using convolutional neural networks in Python, using NumPy as the numerical glue. Convolutional neural networks are specially architected neural networks designed for translational and distortion invariance in visual pattern recognition. The most famous instance of these networks is LeNet, which recognizes handwritten digits and is commercially deployed in cheque reading machines. Visit the convolupy project page on GitHub.


Related to convolupy, I wanted a clean (but flexible), fast (as possible), no-nonsense implementation of classical, fully-connected backpropagation networks using NumPy and the Python scientific toolstack. Monte, written by Roland, is a pretty good fit, but it has some different design goals and does a lot more things without doing some of the things I'd like. Hence backproppy, a flexible framework for backpropagation networks with NumPy, was born. Visit the backproppy project page on GitHub.


I wrote the prototype web frontend for GeneMANIA, and actually packed it with quite a few features. GeneMANIA is a fast gene function prediction algorithm based on linear regression and transductive kernel-based semi-supervised learning. The web frontend was partly inspired by Google Sets, which takes several words or phrases of a category and expands it based on evidence Google obtains from crawling the web. GeneMANIA does the same for gene designations from a given organism (such as yeast, mouse, or human), expanding an initial seed list based on relationships found in genomic and proteomic evidence from public datasets.

If you're serious about using GeneMANIA you might want to check out the most recent version of the GeneMANIA prediction server, rewritten from scratch using funding primarily provided by Genome Canada. This is the version that was presented at ISMB 2009 in Stockholm.

Misc. Machine Learning

  • uses matplotlib to draw Hinton diagrams, which are a method of visualizing weight matrices (the magnitude of the weight is proportional to the area of the corresponding inner square, white is positive, black is negative). Here's a picture.
  • implements a classic benchmark for nonlinear classifiers, the “four regions” task. Given x and y coordinates in the [-1,1] interval, the task is to learn to correctly predict the class, given this layout (where the colour of the point denotes its class).
  • My classification sandbox project on GitHub contains some neat Naive Bayes code that can take advantage of NumPy structured arrays. Features can be any discrete data type, be they strings, integers, or arbitrary Python objects. This lets you stay as close to your original data as possible and not have to go through the annoying step of, for example, converting all your discrete features to integers, and remembering/storing what the mapping between integers and ‘real world’ feature values was for each column.


  • A lexer/scanner to read in Portable Graymap (PGM) files, the most brain-dead simple image format in the world (compile with lex or flex to generate C source code).
  • A simple Python script to dump MSN logs to readable plain text from their wacky XML format.
  • grope is an experiment in using a curses-based interface to page through the output of grep. The idea is that you could select a line and jump directly to that line by invoking an editor command.
  • screen scrapes the markup on a triumvirate of popular web comics and spits out a valid RSS feed (to stdout). Kind of pointless nowadays that all of the Sharing Machine comics provide RSS feeds now.


  • A bunch of Scheme procedures I wrote while learning the language for a class. Starts extremely simple and builds up to matrix multiplication.
  • A k-nearest neighbours implementation in MATLAB with ridiculously detailed comments, that I wrote as a TA for CSC384. It is definitely not the most efficient implementation in the world, but the comments might prove instructive to a MATLAB beginner.


Inspired by the tremendous efforts of the authors and maintainers of this fabulous package, I've contributed a few patches here and there to NumPy:

And a little bit to matplotlib:

Other People's Software

This is a handful of open source or otherwise gratis software that, because the original website is unreliable or no longer operative, I am mirroring here. I provide absolutely no warranty or support for these packages, and any use of them is bound by their respective license terms; caveat emptor. It just pains me when useful things disappear off the Internet, and this is my small attempt to thwart link rot.

  • X-Deep 4.6.5, the last freeware version of a lightweight Win32 X11 server. Simpler to install than Cygwin/X with less disk storage footprint and, in my experience, faster on older, limited hardware systems. See also Readme.txt and license.txt that come with it.