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.
OpenSource Software (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.
-
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.
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.
Commercial (Closed Source) Projects
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.