- Unix systems programming in C/C++
I have built and maintained very large, complex projects on both Unix/Linux and Windows. I'm very familiar with Unix system capabilities (general programming interfaces, network programming using TCP/IP, shared memory, multiple processes, signals, etc.). I am fluent in the customary Unix programming tools, such as make, Subversion, shell scripting and other "little languages", such as python, awk, etc. I prefer emacs or language-specific IDEs (such as IntelliJ and Visual Studio) for editing but can manage with vi when necessary.
I have been programming in C++ for over 20 years and have
an excellent grasp of object oriented programming. At
Torrent I learned how to build
flexible, extensible and efficient programming
frameworks. Orchestrate, Torrent's core technology, is itself
a framework, and it contains within its implementation many
smaller, performance-critical frameworks.
I have a programming style that stresses correctness,
maintainability, early detection of errors, assertions and testability.
- z/OS systems programming
I have strong z/OS (IBM mainframe) skills, originally from 10 years of administrative systems programming experience and recently updated with my work at Rocket. I am fluent in z/OS assembly language and familiar with most aspects of z/OS system services, including functions available only to authorized code.
- Unix system administration
For several years I was the Unix system administrator for the servers at BCDSP; I also managed the email/web/DNS/Samba server in my basement for
my own personal domain (though I've since moved it all to Google...). I am particularly comfortable with FreeBSD,
Linux and Apple OSX, but have worked some with Solaris, AIX and HPUX. I'm
very good at basic hardware maintenance and repairs,
including network cabling (I have a very complete toolbox).
- Windows programming and network administration
While Unix is my primary and preferred programming environment, I have developed and maintained cross-platform products using both native Windows APIs and Unix emulation libraries (Cygwin, MKS Toolkit). I've also done Windows administration for small, mixed Windows/Unix networks.
- Writing, training and mentoring
I did an exceptional amount of writing (primarily for our group's wiki) and mentoring in my previous position at IBM. I've made four extended (3-week to 6-month) trips to IBM's development lab
in Hyderabad, India for training and mentoring. These trips have been
highly praised, by both the local engineering and management and by my
management in the U.S., for the effects they've had on productivity and
I also enjoy working directly with customers. I've been the solo, on-site representative in many proof-of-concept, benchmarking and prototyping engagements. I've conducted multi-day training classes, adapting material to suit the customer on short notice, and handled many challenging customer support situations.
- Databases, data warehousing and related skills
My work at Torrent gave me broad exposure to
relational database systems, especially as they are used in data
warehousing and data mining applications. I have extensive
experience in the issues of ETL, including data conversions
(especially between mainframe formats, such as COBOL records,
and more typical Unix formats), handling of missing values,
flattening of hierarchical data, etc. I have a strong working
knowledge of SAS, and I have a good conceptual understanding of
modeling techniques and data preparation issues. I know enough
SQL to be able to construct simple queries, define tables, etc.
- 7,752,299 Segmentation and processing of continuous data streams using transactional semantics
- 7,565,349 Method for computing frequency distribution for many fields in one pass in parallel
- 7,392,320 Segmentation and processing of continuous data streams using transactional semantics
- 6,801,938 Segmentation and processing of continuous data streams using transactional semantics
- 6,311,265 Apparatuses and methods for programming parallel computers
- 8,407,404 Record Sorting
- 8,954,375 Method and system for developing data integration applications with reusable semantic types to represent and process application data
I work on special projects at Rocket, most of which I can't disclose. I can say that the work is a return to my mainframe roots, with a strong focus on z/OS and Linux integration. I write a lot of z/OS assembly language, as well as C and C++.
I worked on Hadapt's administrative tools (written in Python) and data catalog (written in Java). Zookeeper is used for cross-node synchronization, and Spring is used for dependency injection and transactionality. I also made modifications to the open-source Postgres database system (written in C), which is used by the Hadapt system for data and metadata storage.
Hadapt uses Jira and Confluence for issue tracking and internal documentation, and git for source control.
I was a software architect and implementor, working primarily on the Qlikview Expressor processor parallel data processing engine. This is a natively cross-platform (Windows/Unix) product written mostly in C++. I also worked on the Qlikview Direct Discovery feature, which enables big data to be integrated into Qlikview.
I was originally hired into expressor software, which was acquired by Qliktech in June 2012.
International Business Machines Corporation
550 King Street
Littleton, MA 01460
I joined IBM via Ascential Software in July 2004, as an advisory software
engineer. In May 2005 Ascential was acquired by IBM and became part
of the Data Management division of the IBM Software Group.
As at Torrent Systems (below), I did
primarily Unix/C++ development, with a focus on flow based, parallel
infrastructure. IBM holds U.S. patent #7,565,349 for a project I conceived of and implemented regarding data analysis. In addition to my direct technical responsibilities I did
a lot of writing and training, and was the main technical liaison with IBM's development group in Hyderabad, India.
Boston University School of Medicine
11 Muzzey Street
Lexington, MA 02421
BCDSP is a small research group that specializes in post-marketing
drug safety studies. Most of their studies use data from the
General Practice Research Database,
which contains comprehensive medical histories on about four million patients.
I provided all manner of computer support to the 5 principal
investigators and other support staff, primarily in these categories:
- Network support. I had sole responsibility for maintaining the
in-house network, consisting of about a dozen PCs (Windows 2000 and
XP), a handful of servers (Linux and FreeBSD), several networked
printers and a DSL internet connection. I did all hardware and
operating system selection, installation and troubleshooting.
Samba was used for Windows file sharing, and I installed and maintained
all network services, such as DHCP, DNS, NTP, ssh, Apache, MySQL and
Database programming. The GPRD as used at BCDSP is stored as a
collection of hierarchically structured files accessed via custom
programs written in C++. A number of ancillary files (such as drug and diagnosis
dictionaries) are stored relationally, using a combination of flat
files and MySQL tables. The total database size is about 10GB.
I was one of three programmers who handled data requests from the
research staff. Most requests entail writing one or more C++
programs and some SAS. I devised a comprehensive system of
application-specific classes that made most programs very compact
and easy to write.
I also wrote a number of tools to enable the research staff
to perform limited queries against the data using web-based tools,
implemented via Apache, Python scripts and C++ programs.
- PC support. I was the in-house expert in all things Windows and
fielded questions about email, Microsoft Office applications,
SAS, printing problems and anything else that came up.
November 1998 to March 2000
My clients during this period included:
Torrent Systems, Inc.
See Torrent Systems, below
My contracts for Torrent were of two types: customer training and
software development. I was responsible for a major revision of the
customer training course for Torrent's Orchestrate product, and
presented this course at a number of Torrent customers' sites. A
copy of the training course materials is available for inspection.
I had sole responsibility for porting Orchestrate to the HP-UX
operating system, the first 64-bit port of an originally 32-bit
product. Orchestrate is written in C++ and makes extensive use of
templates and dynamic loading; these are notoriously non-portable
aspects of C++ and Unix programming.
I also performed a feasibility study prior to Torrent's decision to
port Orchestrate to (then) DEC's Tru64 Unix for Alpha processors.
I was hired by Data Miners to install a small network at their
Boston Collaborative Drug Surveillance Program
See BCDSP, above
Before being hired by BCDSP as a permanent employee I was engaged
for a three month consulting stint, with the goal of modernizing
their in-house network. I selected hardware, planned the topology
and did much of the physical wiring to replace their coax-based
(and problem-prone) network with a Cat5E switch-based network.
I also became involved with the GPRD at this time and developed
prototypes of some of the web-based query tools described above. It
was the success of these tools that led to BCDSP offering me a
January 1995 to November 1998
I was one of the founding engineers (employee number 5) of Torrent
Systems. Together we designed and built Orchestrate, a scalable flow-based programming system. We were issued
for the design of Orchestrate; I am one of the 8 co-inventors on each patent.
I was completely responsible for the design and implementation the
Orchestrate process manager, the portion of the system that creates,
connects and monitors the collection of processes that execute an
Orchestrate program. This process manager must work on any type of
parallel computing system, including loosely-connected networks of
workstations, large SMP systems like Sun's SunFire systems, tightly
coupled MIMD systems like the IBM SP-2, and hybrids consisting of all
of the above.
I also designed and implemented many Orchestrate operators, the
small, specialized components that are linked together to form a
complete Orchestrate program. I was particularly involved in
construction of the statistics, data transformation and grouping
operators. I was responsible for a key technical breakthrough that led
to Orchestrate's high-performance and type-extensible sorting
In addition to serving as a system architect and implementer, I was
often the lead field support engineer for customer pilot projects and
competitive evaluations. My combination of technical and communication
skills made me particularly well suited for these situations.
Ascential Software acquired Torrent in late 2001; Orchestrate
is now the primary data movement engine for Information Server (the ETL system formerly known as DataStage).
I left Torrent to primarily to spend more time with my family and
to pursue other programming interests.
January 1992 to December 1994
Thinking Machines Corporation (TMC)
At Thinking Machines I wrote software for the company's CM-5
massively parallel supercomputer. My particular specialty was the
low-level library code that performed parallel data movement and
transformation; this code effectively provided a data parallel machine
abstraction that was used by the company's other software, such as
the parallel Fortran and C* compilers and scientific subroutine
library. The programming was done in a mixture of C, Sparc assembly
language, and very low-level microcode for the CM-5's custom vector
Thinking Machines declared bankruptcy in 1994. Sun Microsystems, which had been in negotiations to purchase Thinking Machines, offered many TMC employees, positions at their Chelmsford, MA facility. I declined Sun's offer because of the commute and remained at TMC for another six months, until it became clear that the software-only company that would emerge from bankruptcy was not a place I wanted to be. Thinking Machines was eventually absorbed by Oracle.
October 1989 to November 1991
I was solely responsible for porting the Verdix Ada runtime system
from Encore's Multimax computer systems to its newer Series 91
systems. The Series 91 systems were SMP machines based on Motorola's
88000 processor chip (now extinct). The programming was done in C, Ada
and 88K assembly language.
I worked at Encore's Marlborough, MA facility, which was closed in late 1990. I declined the offer of a transfer to their Ft. Lauderdale office.
September 1985 to October 1989
Intermetrics provided me with a career change. I was hired
for my knowledge of IBM mainframe computers (System 370)
and operating systems (MVS, VM). Intermetrics was about to
receive an IBM system as part of a contract to develop an Ada
compiler, and I was to be the system administrator. Over time
I moved into the compiler group and worked on the Ada runtime system.
Thus began my introduction into system software development on Unix
systems (since Intermetrics did all of its development on
Unix) and parallel programming (since Ada has parallel processing built
into the language, which requires extensive runtime system support).
I programmed in Ada, C and 370 assembly language.
After I left the company, Intermetrics merged with Pacer InfoTec to form Averstar; Averstar was bought by the Titan Corporation, which was acquired by L-3 Communications in 2005.
April 1975 to August 1985
System Programmer / Administrator for IBM Mainframe Computers
I left college in 1975 and began a ten-year career working with IBM
mainframe computers (System 370) in commercial data processing
environments. During this time I acquired a profound understanding
of IBM's MVS and VS1 operating systems at all levels, from application
programming in PL/1, COBOL and assembly language through
mission-critical system programming, including writing operating
system modifications, installation and maintenance of system software
using SMP, and all aspects of performance tuning. I also became very
familiar with the world of commercial data processing, which was
particularly useful in my later work at Torrent as a field engineer.
The obligatory alphabet soup of program products (IBM and otherwise) that I worked
with follows. I have only listed products with which I did significant work.
VS1, MVS, VTAM (including 3270 datastream programming in large SNA
networks), IMS/DC and DB, DL/I, CICS, JCL and utilities, TSO,
ISPF/PDF, PL/I, COBOL, MARK IV, SPSS, SAS, VSAM, SMP/E,
PUTs/PTFs/APARs, and a partridge in a pear tree.
The organizations I worked for during this period were:
- September 1982 to August 1985
The University of Chicago, Chicago, IL
- December 1981 to June 1982
Morgan Stanley & Company, New York, NY (consultant, not an employee)
- September 1979 to November 1981
The New York City Board of Education, Brooklyn, NY
- September 1978 to July 1979
Hunter College of the City University of New York, New York, NY
- April 1975 to August 1978
Orange County Public Schools, Orlando, FL
September 1972 to April 1975
I attended Florida Technological University
(now University of Central Florida
) as a computer science major. I did not graduate.
- Folk dance (Morris, New England contra, longsword)
I dance with the
Pinewoods Morris Men (PMM) and attend local contra dances
whenever my schedule permits. PMM performs annually in the
Christmas Revels at
Sanders Theater in Cambridge; I have had the privilege of
performing with them since 2003.
I also play concertina.
- Backcountry and telemark skiing, hiking, sailing