I've been programming in Python
since late 1995, and so far haven't found a more beautiful
language to draw me away from it. I've been an Open Source
developer since 1996, and spent 2 years from 2001 through 2003 focusing
various Open Source projects. I am a member of the Python
Software Foundation. I was a partner in VexTech Corporation for three years
where I did
closed-source development based on Open Source
packages. I started programming as a hobby in 1981 when my father
bought an Apple II plus.
run my own small consultancy in Toronto, VRPlumber Consulting Inc.
since 2006. I do mostly high-level system architecture work, some
early-stage business/feasibility consulting, a stint as developer
relations contact (for the OLPC) and I occasionally do pinch-hitting
"save-the-project" type programming contracts. I've had a few
other people on the payroll over the years, but not recently.
Documentation and Presentations
I love public speaking and commonly speak at PyCon. I also have presented
the OLPC project to quite a few
groups as part of my work for that organization. I often wind up
presenting at PyGTA because I
didn't get enough time to schedule someone else for the monthly
meetings (I'm working on that).
OpenSource Software (BSD-style
There are various modules I've created floating around the web that
I haven't bothered to link here, I've contributed to a number of
projects including wxPython, win32all and Stackless Python, and
generally de-list a module when I no longer see the need to be a
distribution point for it (such as when it is incorporated into another
- I'm the administrator and author of the most common Python
bindings to the
- This project provides a learning environment for new Python
OpenGL programmers. It includes fairly extensive VRML97 loading
- GUI utility for viewing cProfile (performance) and Meliae
(memory) profiles of Python programs.
- "Oscilloscope" using PyOpenGL to visualize ALSA (Linux Audio)
- Implementation of Asterisk PBX FastAGI and AMI interfaces for use
with Twisted. This is
now primarily maintained by Digium Inc. who use it to test Asterisk.
- Implementation of SNMP protocol handler for the Twisted networking
framework. Uses PySNMP
for the SNMP encoding/decoding, though the version used is a fork of
the previous release of PySNMP (because of speed requirements in the
original project (Cinemon) which was using the library). This
code was originally based on
demo/sample by Patrick K. O'Brien, though it doesn't have much of a
resemblance to the original code any more. This library was
originally used by the Zenoss package for its scanning, but was
replaced with a C library eventually for speed.
- A parser generator for the Python mxTextTools extension.
SimpleParse lets you write EBNF grammars for this fast text-scanning
Python extension. IBM's Developer Works has posted an article
by David Mertz on using SimpleParse
- Mechanism for automatically embedding resources in Python
packages particularly for use with wxPython or end-user-targeted
projects which need reliable cross-platform resource embedding.
- Package using FontTools to
TTF fonts for their font style and family information (as well as glyph
metrics and outlines).
Also has a minimal framework for creating a font-registry. This
module is also used by OpenGLContext to extract polygonal text outlines
for creating 3D OpenGL text.
- Provides "Fake Localization" to Python (mainly Django) projects
to allow users to check for internationalization coverage before they
are actually translated.
- Allows for globally replacing Python objects with other objects
in order to stub out functionality during tests
- Allows you to sub out executable scripts (on Linux) during tests.
- Provides an "observer pattern" for Python objects. This
project is the source of the "signals" package in Django (though Django
rewrote much of it since forking).
- A few sample templates which demonstrate how to set up a basic
Django + JQuery Mobile site.
Python 2.2 property classes
- This package creates Python 2.2+ descriptors which automate much
of the work of creating property-based classes. Provides a framework
supporting such things as type and range checking for property objects.
Provides automatic storage in the client's dictionary, default values
and default functions. Base property classes for a number of common
data types are included.
Obsolete Open Source Software
Over the years a lot of my packages have become (largely)
obsolete. Although a few projects may still use these, they are
not particularly software you should start using today.
- PyTable RDBMS Middleware
- Originally part of the wxPython Properties Distribution, PyTable
is a relational database wrapper based on BasicProperty's rich
property-based modelling system. PyTable provides a "thick"
wrapper for PostgreSQL (and MySQL) database adaptors which fills in
missing functionality in the adaptor layer to provide a uniform rich
external API. You likely want to use SQLAlchemy today.
- wxOO (formerly
- Provides object-oriented controls and events for
wxPython. A set of controls and classes that allow wxPython
interact with Python objects, rather than primitive data types (such
as strings). Included are object-based drag-and-drop (drops reported
as events), object-holding list controls and object-holding wxChoice
controls. Also includes the configui sub-project which is trying to
create a user-configurable UI similar to what you see in many larger
- MS Win32 extension for wxPython which allows you to create "App
Bars" (the Windows Task Bar is an "App Bar" in Windows' GUI
model). Used for a small company's product which allowed
call-center operators to have persistent notices/information presented
while working with incoming calls.
Spelling Construction Set
- This is a project to provide a toolkit for constructing
spell-check and suggestion engines for (multiple) natural languages
using Python. The toolkit allows for plugging in different storages,
different phonetic compressors and different normalisers. It is based
algorithmically on ASpell (with a few changes to optimise speed with
Python). The project is still early in its life-cycle, but it has the
basic functionality available.
- An Open-Source small-office/institutional room scheduling system,
ConflictSolver was developed for a local charity that wanted software
which would let them see graphically what rooms were booked and when
conflicts were created. The users seem to like it quite a lot.
The primary user shut down for a few years during renovations.
- Simple metakit db structure display for Python 2.2.x, gives you a
formatted structural tree for a storage/view and all of its
(including sub-views). Note that this script will add records to
0-length views in order to get access to sub-views. It deletes those
records when it's done with the sub-view.
- Rough calculation of sun rise/set times for given dates and
latitude/longitude coordinates. Currently doesn't auto-calculate your
timezone, but does most of the other things you'd want. Based on code
from the SRRB
which, in turn, is based on code from Astronomical Algorithms,
by Jean Meeus. You should likely use PyEphem
- When I was working with VRML code in the 90s this was my primary
toolbox. PyVRML97 has replaced mcf.vrml for me, though it does
not have the "processing" focus (PyVRML97 is a model of VRML as a tree
for rendering, mcf.vrml was a VRML file rewriting engine).
- Acrostic puzzle finder, searches dictionary for X*X word-sets
that spell out across and down as the same set of words. The blog post has an example and
a link to downloading the 7x7 solutions from my system's dictionary.
- A Python Fibonacci number generator and a printout of fibonacci( 1000000 ) (this takes ~
30 minutes to calculate with the script). This was just an
optimization challenge gone horribly awry.
- Two implementations of topological sort algorithms in Python
(one based on Tim Peter's code). These allow you to do dependency
resolution by supplying a collection of nodes and the arcs between
them. Both report results as lists of generations which can be
Commercial (Closed Source) Projects
I worked for a year on the initial "zinger" product. I was one
of the architects of their new "Jazinga Cloud" product. This is a
small-office phone system that can be "embedded" on other hardware
platforms (N.A.S. Devices, Routers, Plug Computers, Multimedia devices,
etceteras) and is driven by a "Cloud" configuration and update service,
but does not depend on the Cloud for day-to-day operation.
Sweet Caesar (Whitebox)
I wrote the back-end for the Sweet Caesar mobile application
system. This is, in essence, a content management system written
on top of TurboGears and SQLAlchemy which feeds data to the mobile
applications in both custom and standard formats.
Panoramic Feedback Inc. (360 Degree Survey)
I provided "heavy lifting" in order to get a rewrite of the
company's core product finished. This was a very large system
written in C++ over more than 10 years that was being rewritten to have
all of the modern web-service features customers expect. Most of
my work was around eliminating memory leaks, correcting and/or
modernizing C++ usage and helping integrate the older code-base with
the new TurboGears + Dojo front-end.
Cinemon Inc. (Cinemon)
I was the CTO of Cinemon Inc. Our product, Cinemon was a Cable System
that is, a server which sits in a Cable ISP/Cable Television operator's
head-end and monitors the health of the equipment both in the head-end
and out in the field. The system used TwistedSNMP, PySNMP,
PostgreSQL and a few other tools to monitor networks of a few thousand
or tens of thousands of cable modems to provide early-warning
of network failures and/or degradation. The product was effective
and useful, and had been packaged ready for sale, but the company was
never able to officially form due to legal/financial issues. The
result was a still-born product.
VexTech Inc. (VIBES and VIBES VoIP)
I wrote the VIBES VoIP billing/provisioning module while working at
VexTech. I largely took over maintenance and decommissioning of
the Aurora Cable VIBES installation after I formed VRPlumber
Consulting. The VIBES installation, including the VoIP module,
was decommissioned when Aurora Cable was purchased by Rogers Cable.
Commercial Software (for Tpresence Inc.)
I worked for Tpresence Inc. (a.k.a. VRTelecom) for three years
under contract as a designer (one year) and a researcher (two years).
The company created a Virtual Reality system for use on Windows
desktops using standard hardware. The primary product, Holodesk
Communicator, was released in 1999, and included
person-to-person voice chat, three different avatar formats,
approximately six background environments, with the ability to use any
standard VRML 97 world as a background, and a set of collaborative
mechanisms including a shared in-world whiteboard, slide show, file
sharing, and avatar-based gesturing (all produced by "in-game"
scripting of core functionality provided by the underlying
system). I wrote most of the in-world objects, helped architect
the system, developed a replacement MuTech, and wrote the
content-conversion tools for the system.