Summary of Experience
Senior software engineer with a track record of successfully starting and finishing complex software projects.
19 years experience as a professional programmer.
17 years developing commercial applications for Microsoft Windows primarily using C, C++ and MFC.
3 years developing commercial applications using C#.NET.
5 articles published on CodeProject.com.
Experience in the following languages and technologies: C++, MFC, Win32, ATL, WTL, Multithreading & Synchronization, Client/Server, C#, .NET, C++/CLI, VistaDB, DevPartner Studio, RoboHelp, Windows Help, 80x86 & MPC860 & 6502 Assembly, TCP/IP, XML, SQL, SNMP, HTML, pSOS, VxWorks, PharLap ETS, Q.931, GDI , Video for Windows, DirectShow, Visual Source Safe, CodeBase, OS/2, DOS, NetBios.
Click here to download a PDF version of my resume.
My Professional Biography
I was born in Schenectady, New York and raised across the Mohawk River in the bedroom/farm community of Glenville. My father had earned his PhD in nuclear physics at Caltech and was a researcher at General Electric. My mother received her BA in Art from BYU and was a full-time homemaker. I mention this not only as a point of pride, but as partial explanation for my varied career.
I first learned to program computers in the spring of 1980 while a senior at Scotia-Glenville High School. Our school had purchased two Apple II computers. One of the math teachers was taking BASIC programming classes at the local community college and then teaching us what he had just learned. A few of us got bored and asked the head of the math department for the manuals, which we immediately read cover to cover. (In a perfect display of educational incompetence, the computer teacher found out and threw a fit, demanding that we stop our self-learning. His superior not only openly disagreed, he gave us a key to the computer room and said we could use it as often as we wanted as long as we gave students with homework assignments priority.)
I took more programming classes in college which were so boring I gave up all thoughts of computer programming as a career. Instead, I took a combination of design engineering, photography and theater classes. In the end, I followed my dreams and transfered to Columbia College Hollywood, where I completed a BA in Cinema.
Making a living in the movie industry proved impractical and in 1988, a week before my oldest was born, I started my first job as a professional computer programmer, writing games for Apple II computers using 6502 assembly language (two were Card Sharks and Concentration.) For practical reasons the data sets for these games were edited and maintained on PCs. I taught myself C in three days using Turbo C. I also taught myself 8086 assembly language, which proved fortuitous. In 1989, my experience in 8086 assembly language helped me get a job at Artisoft where I designed and wrote the key DOS utilities for LANtastic 3.0.
In spring 1990, Artisoft became a beta site for Windows 3.0. I had experimented with previous incarnations of Windows and was unimpressed. I'd also used the Apple Macintosh and hadn't liked it either (to this day, I haven't gotten accustomed to its non-persisent menus.) Windows 3.0 was different and I immediately knew it was the future of computing. I bought Charles Petzold's indispensible Programming Windows book and taught myself Windows programming. My first real program was the user interface to Artisoft's first attempt at telephony.
Starting in 1991 I spent two years at Novell, working on NWCalls, the key client side library. This library was compiled for DOS, Windows and OS/2. Most of the library was written in C, but had some assembly to access the netware client drivers.
I learned C++ in 1993, but didn't have a chance to use it until 1994 when I first tried my hand at consulting. For a while I used both Microsoft Visual C++/MFC, and Borland C++/OWL before settling down with Microsoft's offering which was more stable (in a pure C++ sense, OWL was arguably better designed than MFC, but it was poorly supported by Borland's class wizards and the Borland IDE was extremely buggy and unstable.)
In late 1994 I was hired to "port" Quick English, an interactive English language primer for foreign language speakers, from the Apple Macintosh to Microsoft Windows. The product had originally been written in ToolBook, though the source code had been lost. In the end the user interface of the Window's product looked almost identical to that of the Macintosh (with some changes requested by the client), but the underlying software was my design and implementation.
In 1995, the Japanese distributor wanted to add more titles to the product line. While analyzing the bids for the video content from various video production companies, I realized I could do the same job for significantly less money. A part time employee and I submitted our own proposal and it was accepted. As a result, I started Cine-Bit Productions, Inc. which combined my film training and software development experience. Our first job was to produce and digitize the video content for Quick English Junior.
While working on these projects, we had some ideas on how to make them better. Our client wasn't interested, but gave us permission to create our own line of English learning tools for the European and South American Markets (Quick English was exclusive to Japan.) The result was First English Hawaiian Vacation. This product was intended to be the first in a line of similar products, but we did not have sufficient funds to produce them all.
I designed and wrote the software for First English Hawaiian Vacation, including the utilities to catalog the audio and video and build the data files. I produced the video and wrote, directed and edited five of the ten lessons. The software came in both 16 and 32-bit versions (I wrote a very light-weight C++ class library to handle both seemlessly.) The data set creation tools were originally written for Windows 3.11 using MFC and OWL but were quickly migrated to Windows 95 when the latter was released, at which point I stopped using OWL.
First English Hawaiian Vacation was released in France in 1997 and did poorly, largely due to the collapse of the entire edutainment market in the late 90s. To make a living, I did consulting work, the highlights of which were:
- Version 3.0 of Ancestral Quest, a genealogy program. In addtion to fixing bugs and adding features, I migrated the program from 16 to 32-bit.
- I designed and wrote a Windows NT SNMP agent that monitors applications events and broadcasts alerts based on user defined criteria.
- I wrote a program that controlled DVD playback using an edit list.
- I designed and wrote the core architecture for a ticket vending machine. I also wrote the audio subsystem for ADA support which allows a blind person to operate the machine. (The San Diego trolley system uses these machines.)
In 2000, I returned to work full-time, working on VoIP software for I-Link, a now defunct company. I worked on the E1/T1 gateways, which provided the interface from the VoIP network to the plain old phone system (POTS). My proudest achievement was to design and write a call routing engine that was significantly faster and more capable than the previous Oracle based engine. It could do partial lookups, highly customizable least cost routing and number translation. In combination with an SS7 project, my routing engine reportedly saved I-Link over $650,000 a month.
In 2003, I went to work for MyFamily.com, owners of Ancestry.com, to work on Family Tree Maker, the best selling genealogy software on the market. My first major task was to migrate it from Visual Studio 6.0 to Visual Studio 2003. I worked with other members of the team to eliminate the thousands of warnings from the build. I helped fix bugs and design and implement new features for two major releases of the product. Starting in the fall of 2005, MyFamily.com started work on a redesign and rewrite of Family Tree Maker. I was responsible for designing and implementing the framework, database layer and the file importer for the proof of concept and prototype. This project is being done in C#.NET 2.0 and used VistaDB for the database (I did some experimenting with C++/CLI but no such modules were present when I was downsized.)
In late 2006, I started my current job as a Senior Software Engineer with DriverTech. DriverTech makes a truck fleet management solution the core of which is a TruckPC. I work on the software running on the TruckPC. My work has including writing a reduced, secured web browser using IE, an RP1210a driver for hardware which communicates information to and from the truck engine and evaluating and implementing a software configuration management solution for the company and a .NET assembly to allow third parties access to low level information and to communicate externally.