I started my programming career as a co-op student at AT&T Bell Laboratories in Murray Hill, New Jersey, in the early 1980s. There I learned the C language and the Unix operating system. I spent the first decade and a half of my career developing C programs and applications on a variety of Unix system variants and ultimately on the nascent Linux operating system.

For the next decade or so of my programming career I transitioned to the C++ language. I stuck mostly to Linux systems, but did spend significant time developing a research application (with a graphical user interface) that ran on both Windows and Linux (and Mac OS X).

For the past decade or so I have been doing most of my work with Python, and primarily for web-based applications.

Along the way, I have spent varying amounts of time working with a variety of other programming and scripting languages. These include, but are not limited to: Emacs Lisp, Tcl/Tk, PHP, JavaScript and REALBasic/Xojo. And as a sole-proprietor I have spent considerable time over the past couple decades maintaining Linux systems, including this one, both for myself and for others.

Here are a few more details about some of the work I have done over the years.

Web Applications

I have written multiple web applications of varying size using PHP. In the past few years I have discovered the Django Python framework and have embraced it enthusiastically.

I am currently working on my third big Django project. It is a data-intensive application for which my client needs both a simple customer interface that integrates with their existing website and complete adminstrator access to and control over the data. Django excels at both of these things.

As well has having built my own PHP-based web application, I have also built some modules (and themes) for the Concrete5 content management system which is built using PHP.


A few years ago a client came to me with a software product that was sagging under the weight of ad hoc development and maintenance practices and asked for my help. The product was written in REALBasic, which has since become Xojo. After diving into the code I found REALBasic/Xojo to be well suited to the task and quite cabable.

The product serves a customer base that is split roughly equally between Mac OS systems and Windows systems. I still work on this application periodically as new features are requested.

C++ Applications

I have not worked with C++ recently, but I spent many years working on a research application that started out as a MS Visual C++ project. Initially I refactored the code to reduce redundancy and waste. What was initially over one hundred thousand lines of code become around thirty thousand. In the process I was able to identify inefficiencies in some of the algorithms and their implementations and increase performance, in some areas by as much as a factor of one hundred.

I separated out key data structures and algorithms and put them into a C++ library. I used SWIG to generate Python bindings for the library so that it could be used interactively in a Python shell. I also re-implemented the graphical user interface using the wxWidgets cross-platform GUI library. I also worked with the client to develop new algorithms for the application.

Objective-C Development

As a grad student my research group (Center for Complex Systems Research) was a beta site for the NeXT computer. It was on that system that I first learned Objective-C and developed my first GUI application, a tool for visualizing three-dimensional plots.

Years later I developed a Mac OS X GUI application for my own needs, also written in Objective-C.

Linux Systems

I maintain my own Linux server (now a VPS), which includes maintaining email and web services. I also have developed dynamic websites on Linux for a small number of clients using content management systems such as Drupal and Concrete5.

I have also helped clients set up and maintain their own Linux systems. In one case I configured a small network of Linux machines for a client that had a compute-heavy project that used the network as a parallel virtual machine (PVM).

The above is just some of what I have done over the years. If you have a software problem I may be able to help. Contact me and we can talk.