I began teaching myself programming in 1980, on a TI-99/4A. On that machine, I wrote a BASIC program called "Psychologizer", which immitated a therapy session by prompting you with questions, and depending on keywords in your response, produced new questions. (I had heard about ELIZA, but had never seen it.)

Around 1987, I was working on DEC VAX-11/780s with a text editing program called TPU (Text Processing Utility), a pretty comprehensive macro language on which I built a structured markup interpreter for preformatting text. The technical publications department at MITEL had been using unformatted text, fed into a Xerox Integrated Composition System (XICS) for the typesetting of all product documentation. The Formatter (as I called it) was a general markup language that could be preprocessed to convert the markup language text files into XICS files to drive the Xerox 9700 high-speed laser printer.

By 1989, R&D at MITEL had switched to SPARCStations running SunOS. Tech Pubs also switched, and invested in Interleaf Technical Publications Software, which made my Formatter and the XICS workgroup obsolete. I taught myself the rudiments of C, and so wrote text processors to convert my Formatter markup language into Interleaf TPS format.

After that, I wrote a variety of filters, PostScript code and SunOS-based scripts to automate many aspects of the Tech Pubs process. Around the same time, I worked with the R&D software support group to implement changes to the in-house software management system so that it could also act as a document management system. I also was given the task of maintaining a variety of FORTRAN programs, so taught myself FORTRAN (a smidgen, at least enough to be able to make bug-fixes to programs written by other people).

In 1990 and 1991, I wrote Bourne shell scripts  to act as front-end job handlers for the Kodak high-speed PostScript printer that was purchased to off-load the Xerox 9700, which continued to be used mostly for MIS applications that I had nothing to do with. Shortly after that, I was hired as a senior project manager by Interleaf in Ottawa.

I started at Interleaf in 1991, and was immediately put on a project for the Department of Justice, to build a looseleaf publishing system based on Interleaf technology. I worked with Mike McGahey and together we taught ourselves Interleaf Lisp. Mike also developed WordPerfect filters in C that were used in the application, and he also developed a C differencing program.

On the Interleaf side of things, we automated the import of WordPerfect files into Interleaf, in side-by-side bilingual (English and French) documents, which happened to be the looseleaf edition of the Statutes of Canada.

As that project was rolling out in the spring of 1992, the Senate of Canada also contracted with Interleaf for a side-by-side Interleaf-based system for the publication of Hansard. I completed that work myself, basing it largely on the DoJ application.

In 1993, Interleaf contracted with Hughes Canada Systems Division (HCSD) to provide publishing technology for the authoring, production and management of the specifications for the Canadian Civilian Automated Air Traffic System (CAATS).

During that period (between 1993 and 1995) I developed the Specification Assembly Tool, which automated the assembly of CAATS specifications from component pieces managed by Interleaf RDM (Relational Document Manager).

From 1995 to 1997, I worked with partners Robin Smith and Mike Wry in Mike's Ctl-X Information Consultants. Remaining at Hughes, Robin and I worked together on a document-based requirements tracking system. Robin did the Oracle SQL application work, while I did the Interleaf work.

The Interleaf work began with building LISP programs to parse the documents into individual statements, effectively adding sentence-level structure to unstructured text. Added to that was a transaction processor for loading changes to the documents from the Interleaf environment into the Oracle database. I built a transaction processor around the "lpr" print facitity in SunOS, effectively using the print driver interface to load records from a transaction file into Oracle.

The requirements tracking system was called HARTS (Hughes Aircraft Requirements Tracking System), and the document technologies were called IOTA (Interleaf Online Traceability Application).

In 1995, I also began working with PCs at HCSD, and built an OLE server to automate the fragmentation and retrieval of content from Word documents, storing and managing the fragments in RDM. This was Test Case Library. I don't believe this application went into production, because overall Oracle performance was quite poor due to database contention with HARTS.

In 1997, I left Ctl-X for Open Text. One of the first applications I worked on was an integrated tariff managment system for Bell Atlantic's Boston and New York City locations. That system was documented in Dr. Dobb's Journal in May, 2000. Part of the application involved the conversion of Interleaf documents to SGML. Another part of the application involved the typesetting of SGML documents for publication.

The underlying typesetting engine I chose was TopLeaf, which was, along with Xyvision's XPP and DataLogics, one of only a handful of looseleaf typesetting systems, which were also SGML-capable.

While that project was underway, I also started working with BC Transit (now TransLink) on their Automated Records and Document Management System (ARDMS). Based on Livelink, it was the first application that implemented true records management on Livelink technology.  Also around this time I taught myself web-based technologies, including Javascript and Java.

In 1999, I founded Metaformix Information Systems with my wife, Janice Ristow. Partnering with TopLeaf's manufacturer, Turn-Key Systems, we have worked to provide XML-based automated publishing systems since then. I developed XMLComposer based on experience I'd gained with Bell Atlantic, and also developed MetaForms, a web-based integrated document management and publishing system.