I offer consulting, training, and software development related to the following areas:

  • C/C++ software development.
  • Assembly language programming.
  • Python programming
  • Software engineering.
  • Reverse engineering.
  • Systems programming (operating systems, networks, distributed systems).
  • Scientific computing.
  • Performance tuning and analysis.
  • Technical writing.
  • Debugging and troubleshooting.
  • Software forensics.
As a general rule, I only take on projects that are unusual or of a highly specialized nature.

Here are a few highlights from my career as a software developer and researcher.

  • C++ Extension Building for Dynamic Languages
    In 1996, I created a popular open source programming tool called SWIG (Simplified Wrapper and Interface Generator) that automatically binds existing C/C++ software to a wide variety of other programming languages including Perl, Python, Tcl, Ruby, Java, C#, PHP, Scheme, Ocaml, and many others. SWIG works by reading C++ header files and automatically generating language bindings. To handle the complexities of C++, SWIG implements the C++ type system and supports most language features including templates, namespaces, and operator overloading. SWIG has been downloaded by tens of thousands of programmers and is in widespread use. For instance, SWIG is one of the core technologies used to develop software at Google, it's found in most Linux distributions, and it's even included on every new Apple Macintosh system running OS-X Leopard. SWIG is currently maintained by a team of developers from around the world. More information is available at www.swig.org.

  • Debugging Tools
    In 2000, I created a mixed-language debugging system called WAD (Wrapped Application Debugger), that allows programmers to easily debug applications written in a mix of different programming languages (e.g., C++ mixed with Python). WAD is unique in its approach to this problem and a paper on the topic was awarded "Best Paper" at the 9th International Python Conference.

  • Programming Tools and Libraries
    In 2001, I created a Python implementation of the popular lex/yacc parsing tools called PLY (Python Lex-Yacc). PLY is used by programmers to implement parsers, interpreters, and compilers. In 2002, I released an embedded webserver library that allows programmers to add web-based remote monitoring and diagonistic features to C/C++ software. A paper on this library, co-authored with Sotiria Lampoudi, won "Best Student Paper" at the 2002 USENIX Freenix conference.

  • Supercomputing
    At Los Alamos National Laboratory, I developed applications software, algorithms, and programming techniques for massively parallel supercomputing systems including the Connection Machine 5 and Cray T3D. In 1992, I was the primary developer and architect of SPaSM (Scalable Parallel Short-range Molecular dynamics), a software package for performing experiments in materials science (crack propagation, fracture, dislocations, etc.). In 1993, SPaSM was one of the winners of the IEEE Gordon Bell Prize competition in high performance computing. In 1995, I helped pioneer the use of scripting languages with parallel supercomputers and in 1996, I was the first developer to port the Python programming language to such machines. The use of scripting languages were an instrumental part of a massively parallel data-analysis and data visualization system I built for remote exploration of multi-gigabyte datasets. I presented this work at a variety of international conferences including IEEE Supercomputing, the International Parallel Processing Symposium (IPPS), and the SIAM conference on parallel processing.

  • Computer Graphics and Data Visualization
    I have written three separate graphics libraries. In 1986, I developed a 3D mathematical plotting library (written in 6502 assembler) for the Apple 2. In 1990, I wrote a high-performance graphics and animation library for the IBM PC. This library, implemented entirely in 8086 assembly language, allowed programmers to access SVGA graphics cards from programs written in the Modula-2 programming language. In 1995, I implemented a three-dimensional graphics library and visualization system for massively parallel supercomputers. This system allowed scientists to remotely analyze large-scale data sets consisting of hundreds of gigabytes of data.

  • Computational Physics
    At Los Alamos, I worked as a computer scientist in the Theoretical Physics division and Center for Nonlinear Studies (CNLS). In this position, I worked with physicists to develop software for solving a variety of scientific problems. In 1991, I worked on software for solving stochastic ordinary differential equations. This software was used to study structural phase transitions in materials. In 1992, I started working on molecular dynamics simulation software. This software was used to study problems in materials science including fracture, crack propagation, and dislocation dynamics. Although my primary focus was software, I was actively involved in all aspects of collaborative research that led to publications in Science and Physical Review Letters.

  • Book Author
    In 1999, I wrote "The Python Essential Reference", a comprehensive reference for the Python programming language. The Essential Reference is one of the most highly regarded books on this topic and is available in Japanese, Chinese, Russian, Polish, and German translation. In 2001, I contributed three chapters on XML to the book "Python Web Programming" by Steve Holden. A 3rd Edition of the "Python Essential Reference" was published in the first quarter of 2006.

  • Software Analysis
    Since 2003, I have occassionally worked as an independent technical expert on legal cases involving copyrights and patents. This work has involved a considerable amount of software analysis, including the analysis of two large C++ systems each involving more than 500,000 lines of source code. I have also analyzed more than a dozen smaller systems involving source code for embedded devices and controllers. In the course of my analysis work, I have been called upon to examine software written over a 35-year time span. This software has been written in a variety of programming languages including assembly language, Pascal, PL/M86, C, C++, Visual Basic, and Java. In addition the software has involved the use of custom-written operating systems as well as many commercial systems including Windows-NT, Windows-CE, Linux, OS/2, pSOS, QNX, iRMX, and AMX. In the course of analysis, I often must deal with all aspects of the software from high-level distributed systems (e.g., CORBA, COM) to direct control of specialized hardware devices.