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