VRPlumber Programming

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 on 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.

I've 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 wound up presenting at PyGTA when I organized that group.

PyCon.ca 2012 Introduction to Profiling
PyCon 2010 Debating 'Til Dawn
PyCon 2009 Introduction to Profiling

OpenSource Software

(mostly BSD-style Licenses)

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 project).

PyOpenGL
I'm the administrator and author of the most common Python bindings to the OpenGL library.
OpenGLContext
This project provides a learning environment for new Python OpenGL programmers. It includes fairly extensive VRML97 loading capabilities.
RunSnakeRun
GUI utility for viewing cProfile (performance) and Meliae (memory) profiles of Python programs.
Coldshot Python Profiler
A tracing profiler that attempts to store all call information at run-time to allow more interesting analysis in RunSnakeRun. Works, but doesn't have any more interesting information in RunSnakeRun yet.
Sill-E-Scope
"Oscilloscope" using PyOpenGL to visualize ALSA (Linux Audio) samples.
StarPy
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.
TwistedSNMP
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 a 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.
SimpleParse
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 1.0.
ResourcePackage
Mechanism for automatically embedding resources in Python packages particularly for use with wxPython or end-user-targeted Python projects which need reliable cross-platform resource embedding.
TTFQuery
Package using FontTools to query (system) 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.
FakeLion
Provides "Fake Localization" to Python (mainly Django) projects to allow users to check for internationalization coverage before they are actually translated.
GlobalSub
Allows for globally replacing Python objects with other objects in order to stub out functionality during tests
MockProc
Allows you to sub out executable scripts (on Linux) during tests.
PyDispatcher
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).
Django-jqm
A few sample templates which demonstrate how to set up a basic Django + JQuery Mobile site.
BasicProperty 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.

Commercial (Closed Source) Projects

ATX Networks

I develop the Digistream, and IP2QAM devices in the Digital Video product portfolio, as well as web services that support the Digistream, IP2A, and Ucrypt devices.

Jazinga Inc.

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 Monitor, 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, PyTable, PostgreSQL and a few other tools to monitor networks of a few thousand or tens of thousands of cable modems to provide early-warning notification 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.

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 wxPython Properties Distribution)
Provides object-oriented controls and events for wxPython.  A set of controls and classes that allow wxPython controls to 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 modern application.
wxAppBar
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.
Python 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.
ConflictSolver
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.
metakitstructure.py
Simple metakit db structure display for Python 2.2.x, gives you a formatted structural tree for a storage/view and all of its sub-elements (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.
sunriseset.py
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 instead.
mcf.vrml
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.py
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.
fibonacci.py
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.
toposort.py
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 simultaneously executed.