CertCo 2001-current
senior software engineer

For CertCo, I integrated third-party financial payment services into their RMX system, using Java, JSP, Jrun, XML, EJB, and SQL Server 7.0. For users of MS IIS technology, I created ActiveX wrappers for the client-side Java API.

The development environment is Windows NT, VisualCafe, and ClearCase. Some maintenance and QA work is done with SQL scripts and perl. Development and unit test are under Junit.

GoldPocket 2000-2001
team lead

I joined GoldPocket Interactive, Inc., a startup located in Medford, MA, as team leader, focussing on architecture and development infrastructure.

I contributed a series of position papers to the design and architecture of the company's Event Matrix (tm) system. Then I designed and built the build system and its associated disciplines. I used perl and bash programming in the Cygnus environment on Windows 2000.  Source-control was accomplished with Microsoft's Visual Source Safe.

I evaluated several UML modelling tools, including Rational Rose, Visio, WithClass, and Together, and developed an introductory course in UML, for non-technical staff, as a means of improving communication with technical teams.


Michmerhuizen Consulting 1992 - 2000

Mystic River Software 1999-2000
consulting: apps for medical, advertising startups

With a colleague of long standing, I undertook web-based projects for commercial startups and nonprofit organizations.

Our most recently completed project was for the Bone Density Lab at Massachusetts General Hospital. This system accepts and stores patient/medical data generated by Hologic QDR4500 Bone Densitometers; provides for medical assessment of individual scans; prepares reports using automatic text selection governed by medical information in the scan, and administers user/operator IDs, passwords, and permissions.

To accomplish this, we built an NT4/SQLServer6.5/ColdFusion4.5 back end, with special-access and maintenance utilities in C++. I interfaced directly with the end-user client. I prepared the master specification document for the system. I analyzed the existing (QBase) database, and designed the new one (SQLServer). I designed and wrote (in VC++) a maintenance tool to create and load a text-selection database from formally defined, user-accessible, specification files.

During the summer of 1999 we created the prototype application for a startup company in the advertising industry. We used VC++ and Access for clientside operations (which were considerable), and Oracle8 for the back end. I participated in the database design, and wrote the server module (ODBC, MFC:CDatabase/CDaoDatabase, and derived classes).

Granitar Systems Inc. 1999
contract: Java-based HTML/XML parser

I designed and constructed an interactive Java-based HTML parsing tool, to assist in automating the conversion of HTML document collections to XML.

My work was the engine; a front end using java.swing was done by another contractor. The engine provided for both the construction of document templates (by a kind of reverse HTML engineering, automated) and the use of those templates in batch-processing multiple documents. I used Visual Cafe with Java 1.1; certain preprocessing operations were written in Perl.

The Beautiful Machine, Inc. 1998-1999
consulting: distributed-development project lead

This startup is the creation of Maggie Lettvin. During the 70's and 80's her program on WGBH television, "Maggie and the Beautiful Machine," helped thousands of viewers work towards healthier lifestyles. For her company, I guided a small team of programmers, distributed across the USA, in the construction of the website maggiesback.com which went on line in January of 1999.

I joined the project in midcourse. As technical group leader,

Implemented in HTML, C++, Java, javascript, and perl, using a "home-grown" DBMS, the site offers personalized guidance for the relief of back pain and related symptoms. Upon completing a questionnaire at the site, clients download a manual of specific procedures to relieve the symptoms they have described. Credit transactions are handled through CyberCash, and print-on-demand through Kinko's. The documents are assembled with Adobe's PDF SDK.

Vality Technology Inc. 1997-1998
consulting: logic-programming system components

Created a basic client/server communication subsystem, at the foundation of the company's "Integrity" data re-engineering software product.  The client side, a Visual Basic module, uses Winsock and FTP controls to communicate with a unix back-end server, in C, which runs on DEC Alpha, HP/ux, Solaris, and DGux platforms.  Also created detailed behavioral specifications, based on the existing product, as a framework for QA testing of the port.

Earlier, built the assembly-language system-call interfaces, on five different platforms, for the company's AXIOM language (an inhouse logic programming language based on Gödel, which was a descendant of PROLOG). The platforms were: DEC unix, HPUX, Solaris, AIX, and OS/2.

Physical Sciences Inc. 1996-1997
contract: VC++ project redesign

PSI, in North Andover, is contracted to provide components for an earth satellite. Their project to develop a software simulator for the components had run into trouble. During a three-month contract, I analysed the (VC++) code and remodelled the worst parts of it. I instituted source-code control (with MKS Source Integrity), and created the first coherent technical documentation the project had seen.

BBN Systems & Technologies 1996
contract: telephone-app MIB

BBN Systems and Technologies, in a joint project with Nippon Electric Company, was developing a Multimedia Access Device for routing realtime voice and video through the Internet. A member of the Cambridge team, I supplied the SNMP support (in C) for proprietary BBN protocols embedded in the product. I also assisted in technical information transfer to the Japanese team, primarily in Frame Relay.

AT/Comm 1995-96
contract: communication protocols

For this startup, contracted to construct an automatic toll-collection system for the Maine Turnpike Authority, I designed and implemented (in C) a frame-based protocol, and its supporting API, to provide reliable serial data transfer between vehicle transponders and in-lane data collection and control computers.

Novalink USA 1995
consulting: weblog analysis, java evaluation

For this startup in Westborough, I developed (in perl) a webhits log analyser for the NCSA web server, and later expanded it to the multi-server platform “Spinner”. This was originally written in awk, and ported to perl. I developed a software-installation program in MVC++ and MFC for the company’s Internet access package “Supernova”, and adapted it for both diskette and downloadable distribution.

I familiarized myself, over several months, with the first public release of Java, writing several pieces of exploratory code including telnet and IRC applets.

AllMedia Solutions, Inc. 1994 - 1995
consulting: web cache server

I defined, designed, and constructed a gopher/http cache server for a nationally known internet services vendor. Written in ANSI C, the server runs under unix (SYSV or BSD) using BSD sockets and TCP/IP; it caches up to a million variable-length records using a hashing and hash-resolution scheme (of my own design) based on the RSA MD5 message-digest algorithm; it features programmable expiration periods, defaults, and an independent free-running expired-records garbage collector; configuration file; regex-based cache reject and expiration-period override. The target system is a DEC ALPHA machine, secondarily a SPARC-station. Development was by telecommute from AllMedia to the client facilities.

I designed and implemented a Motif Widget-based object library for a major Massachusetts graphics and GUI-builder vendor. Abstracting from details, the library defines a uniform API across both Motif and WindowsNT environments. The design is rigorously object-oriented for future porting to C++; the present implementation is in ANSI C. The target environment is SunOS 4.1.3, X11R5/Motif-1.2. To meet client requirements, I installed the gnu compiler and utilities on our development system.

For a Cambridge-based BBS with an international subscriber base, I installed a gopher server to support their expansion of internet services.

For a manufacturer of network support hardware in the greater Boston area, I created the formal requirements and design for a Motif-based GUI to replace the character-oriented front end of their existing network management software product.

contract: printer firmware

I analysed the printer state control subsystem in this company's PhoenixPage product, and decoupled it from its surrounding subsystems - improving the product architecture. To support this work, I constructed my own tools in awk, perl, and bash, using many other standard unix utilities, working in C under OpenWindows on Sun SPARC stations. The foremost technical concern was to express the printer state as a rigorous FSA in order to rationalize the code itself, which was by turns over- and under-designed.

HEWLETT- PACKARD/ParametricTechnology 1992-1993
contract: graphics drivers

The HP graphics driver for PTC's Pro/Engineer CAD/CAM product is an interface between PTC's own Xlib driver and HP's Starbase Library. Using Xlib and Starbase functions, and new code, I extended this driver to perform Z-axis clipping in model space; dithered transparency, shaded perspective rendering, and dynamically resizable rendering windows. The environment was UNIX, X11/Motif, and ANSI C, on 700-series workstations and a wide range of HP graphics hardware. I also extended the standard PTC Xlib driver to support multiple colormaps, and tested this work on SGI, Sun, and DEC machines as well as on HP. My foremost technical concern was to impose a coherent and consistent logic on a heterogeneous collection of code that been pawed over by far too many hands and had lost its direction. Maintenance work, over a period of five years, had completely destroyed any evidence of the original design.

COLORGEN 1992-1993
consulting: project evaluation

For top management at this manufacturer of spectrophotometers and color-matching systems, I evaluated an inhouse MSWindows development project involving 24-bit color solid-modelling. To do this work, I analysed about 35K lines of MSW 3.0 code, using both purchased and constructed tools. I evaluated the management and direction of the project, and the competence of the technical staff. My recommendations were adopted with positive results.

The CEO then asked me to evaluate the architecture and design of the company's flagship product, to help map their future development plans. And so, with the cooperation of their staff engineers, I performed an exhaustive architectural analysis of Colorgen's existing product software, and redesigned it in C++ on a rigorous object-oriented foundation.


Manager of Software Development

AAI performs spectral analysis of satellite imagery. One of only a small number of companies worldwide engaged in subpixel analysis, AAI has successfully established itself in a unique field with commercial, military, and intelligence applications.

As a consultant, I ported existing software from BASIC to UNIX and C, on HP9000 series workstations. Then, as AAI's second employee and Director of Software Development, I set the foundations of the company's present success:

We used Hewlett-Packard workstations, networked, in clusters. Until I hired an assistant, I acted as the system administrator, responsible for network maintenance, upgrades, etc. Our early windows- based development was in HP's proprietary HP9000 Windows; in 1989 we discarded this in favor of XWindows, and added Motif in 1990 when it first became part of HP's standard hp-ux distribution.


EDSUN LABS 1988-90
consulting: antialiasing algorithms

For Edsun Laboratories, I created the kernel graphics antialiasing primitive algorithms required to bring its CEG chip to market. I worked in MSC 5.1, optimizing a few critical-path functions into MASM 5.1. I returned in 1990 to provide expanded support for three-dimensional modelling. The CEG chip got a lot of attention from the industry. Edsun Labs, and the CEG product, were acquired by Analog Devices in 1992.


ZIFF-DAVIS 1986-1988
consulting: image acquisition & processing

For Ziff Davis' Technical Information Services I specified, designed, and developed the display server for a high-volume document storage-and-retrieval client/server system at a military personnel center in Indiana. The system as a whole, and the display server in particular, achieved unparallelled performance speed.

The platform was MSDOS/C, MASM 5.1, Vectrix graphics boards, and proprietary CCITT-G4 compression/decompression hardware designed to my specifications.

I initiated, and provided seminar training in, rigorous code-management practices.


INTERGRAPH/Optronix 1987
consulting: 8051 firmware

Optronix wanted to increase the throughput of the large-document scanner product line they had recently acquired from IVS. I accomplished this for them by arranging, in the scanner firmware, to pipeline the scan/transmit cycles in the firmware. I worked in 8051 assembler on a DOS-hosted cross-platform development system.


consulting: image analysis

For this short-lived speculative followup to IVS, I built several MSWindows-based programs, the general purpose of which was to analyse images scanned with an adaptation of the IVS scanner. The edge-detection algorithms I took from the published literature; the topological analysis was of my own design. I attended an early MSWindows development seminar in January 1987.


Manager of Software Development

I joined this startup as Software Development Manager. I built its software group from scratch, and laid all the foundations for its development disciplines.

I specified, designed, and developed the firmware for what, at the time, was a state-of-the-art, large-format document scanner. The design was a rigorous FSM. The firmware was 8051 assembler, built and debugged with Intel PDS and ICE equipment.

I designed and led the development of critical support products: ESCAN, to acquire, compress and store large (8800x6800) bitmaps, and EDITOR, to edit them. I invented ways to process (scale, rotate, clip) the images in their compressed form; these were so fast that our products could run in real time on 8086 machines without special graphics hardware. I also conceived, defined, and developed a realtime magnifying glass graphic algorithm, which we used in the editor.

The host software development platform was MSDOS 2.1, Lattice C, and MASM.

Configuration control was done with SCCS on a 68000-based unix (bsd 4.2) machine to which our DOS machines were tied via terminal emulator programs.

The scanner product line was sold to Intergraph/Optronix in the spring of 1986.

The company also invested substantial development effort in a CCD-based visual inspection system, for which I did all the architecture and algorithm design. We achieved a functional prototype but not marketability, owing to opto-mechanical difficulties. The system components included a UI, database manager, motion control, CCD control and data acquisition, and image analysis.

To assist in training IVS's first OEM customer, I spent a week in Norway near the end of 1983. Other IVS technical affairs, during the life of the company, took me to Huntsville and to Baltimore.


ADT/NERL 1982 - 1983
Principal Software Engineer

I managed a critical new product development project intended to make ADT a market leader in card-access security systems. I formed and led the team that defined, designed and developed the product over a 14-month period. At my initiative, this was the first development project in ADT history to utilize structured project management techniques. These yielded an on-time, under budget project delivery, as well as a smooth transition from development to support.

My architecture defined five independent communicating processes, whose operation was rigorously governed by message protocols I had defined. This was an early exercise, for me, in design by data abstraction, since (again at my initiative) we defined the component subsystems entirely by the message traffic they supported. The platform was RMX, PASCAL, and PLM86, supported by 8086 and (for the card-readers) 8051 assembler.

I commuted biweekly to ADT's New York headquarters to interact with engineering and marketing management.


Senior Software Engineer

IMLAC, at this time, was making the transition from discrete-logic to microprocessor-based hardware designs. I hired and managed the team that developed the firmware for the IMLAC Series II Vector Graphics System. We also created one of the first commercially available implementations of the SIGGRAPH CORE '79 3D graphics library standard. The firmware was in PLM86 and assembler; the CORE implementation was in FORTRAN. During most of this time IMLAC was owned by Hazeltine; as acting head of the software department, I regularly participated in high-level discussions at Hazeltine's Long Island headquarters to plan software engineering disciplines and development methods.

The central technical issue was that the '79 CORE standard had not addressed the distribution of graphics processing between a host and an intelligent terminal. We had always the delicate problem of apportioning operations between the FORTRAN host library and the product firmware, which were on opposite ends of a 19.2kbaud serial line.


Development Platforms

IBM PC family:

X11R6/Motif 1.2/HPVue, Xlib, HP Starbase and PEX graphics libraries


Intel 80x86 family; Motorola 680x0 family; Intel 8051, Zilog Z80; assembly language, debuggers, and hardware ICE methods for all these.


Languages and related interests

My native language is C, since 1981. About 1988 I began moving toward object-oriented paradigms; over the past seven years I've worked with C++, and java, and my current design and coding practice is strongly object-oriented. I use shell programming, awk, and perl regularly for utility programming. I'm learning python, hoping it may be able to do all of my utility programming.

Besides these, I'm closely acquainted with several functional/applicative languages: LISP and SCHEME, and with logic progamming: PROLOG, Gödel, and AXION. From 1983 to 1985 I taught language courses for Northeastern University's "State of the Art" continuing education program. Among these languages were C, LISP, and PROLOG. The PROLOG course was the first offered by the division; I initiated it and created the syllabus. I also conducted a course in the principles of modern interactive computer graphics.

As recently as 1997, my work at Vality Technology Inc. drew on this experience, when I contributed to, and worked in, Vality's proprietary logic-programming language AXION.

An important foundation for my work is the study and reference library I've collected over the years. Currently containing 250 volumes on computer science and related topics, it grows by ten or so each year.

Relational Databases

Many of the systems I've designed - almost all of them - have had a significant database component. Until the 90's, the management of this database was usually designed and implemented directly, as part of the development effort, rather than performed by a commercial DBMS.

More recently I've worked with commercial DBMS products such as Oracle, SQL Server, and analogous open-source products such as MySQL and PostGres.

From a theoretical standpoint, I'm familiar with the fundamental propositions of relational database theory; with normalization requirements, and algorithms for automatically normalizing a database schema.

Interprocess Communication

In various projects at ADT, IVS, and AAI, and in my more recent contracting activity, I've designed with, and used, shared-memory communications, mailboxes, semaphores, and message-passing.

Much of this is also directly relevant to the Internet.  The best single text I know on the whole subject is C.A.R. Hoare's "Communicating Sequential Processes."  The advantage of a rigorous theoretical treatment such as this is that it's independent of the platform context.  Problems can arise, for example, even in the design of web-based systems, where two servers or two communicating nodes must operate concurrently and periodically synchronize with each other.

Clients and Servers

In 1995, for TyLink, I generated the formal requirements and design for the GUI front end of a network management product. Early in 1994 I designed and implemented a caching http server for a nationally known internet service provider.

Ten years earlier, my architecture for the ADT card-access system called for five concurrent processes communicating within a single server. One of these was the database for the other four processes; I designed to accommodate a possible port into a multiple-cpu networked platform.

The Ziff-Davis MilPerCen document management system was a client/server architecture, to which my contribution was the display nodes. These operated as clients of the document-image database server; the display nodes did not - as in X - "serve" client processes on other nodes.

At AAI, the second-generation program suite was implemented in XWindows and Motif, and incorporated a true image server. (A single LANDSAT image file occupies 216Kb uncompressed. Our server dished out random-access slices or spectra from up to five such images at a time.)

Algorithm Development

Every client I've had has benefited substantially from my training in formal logic and my disciplined imagination. This section identifies only a few of the most significant achievements.


Copyright © 2001 by Jim Michmerhuizen. All rights reserved. Last modified on 2001/02/18.
email remarks to jamzen@michmer.net