Career Overview

I have been a software engineer for over 25 years (nearly 10 of those as an independent consultant), with extensive experience in the telecom, financial, and defense industries. I have worked on a diverse set of projects ranging from "bare metal" embedded development (hardware interfacing, device drivers), to real-time systems, to SQL databases and end-user applications (financial risk management systems and trading support tools). I pride myself on being able to see the big picture on large complex projects, while also being able to focus on technical detail as needed.

Whether you are starting a new development effort from scratch, enhancing an existing system or product, or tracking down stubborn bugs in legacy code, the breadth and depth of my experience can be a valuable asset to your organization.

My resume (including contact information) is available in Adobe PDF format, here.

Additional Information

The following sections provide additional detail regarding some of the projects I've worked on over the years. This information is intended to complement and expand on the information provided in the resume linked above. I firmly believe that a traditional resume should be capable of fitting on a single double-sided sheet of paper; but when you've been in the industry for nearly 3 decades, that simply isn't enough space to cram everything in!

Gentex Visionix

For the past few years I have been developing head-mounted video displays. While my official job title is Software Engineer, my role has expanded to encompass other related areas. I joined the company in mid-2005, shortly after the formation of the Gentex Visionix group. As an early member of the team, I have had a significant role in getting the group's R&D effort off the ground.

In addition to developing embedded real-time code (using C and OpenGL) to run on VxWorks and Linux, I developed portability libraries which allowed much of the embedded code to be prototyped and tested on desktop workstations (Linux and Windows). I've also done customization work on various pieces of the Linux platform (e.g. the GRUB bootloader) to accomodate special requirements.

I was also responsible for the initial set-up of much of the infrastructure on which the software development group relies – source code management system, in-house engineering Wiki server, OpenSSH gateway, etc. – and still play an active role in maintaining and enhancing our computing and network infrastructure. I have been closely involved in all aspects of the software engineering process – from initial requirements, to design, coding, and testing, to personally supporting successful demonstrations and test flights of our systems at military bases around the US.

I have been involved in the hardware effort as well. When the need has arisen I have traded my keyboard for an oscilloscope probe, and worked on testing/debugging custom hardware. This has included working with the hardware engineers to identify and correct various issues, assuming a lead role in an effort to identify and correct LVDS (high speed serial) signal integrity issues, and learning VHDL as part of an effort to move some of our algorithms from software into field-programmable gate arrays.

Tellabs

As a consultant at Tellabs, I worked on the network management system for a commercial cable telephony platform. This involved working with a Microsoft SQL Server back end, and a Windows GUI based front end. One of the projects I tackled while there was a major rewrite of the "network discovery" subsystem, which automatically probes and maps out the topology of the network to be managed.

Westell

As a consultant at Westell, I developed a number of firmware modules for DSL modems and DSLAMs (Digital Subscriber Line Access Multiplexer). This included network bridging functionality, support for remote firmware upgrades, and SNMP network management interfaces. I was also involved in initial bringup and debugging of new hardware. Most of the development was done in C, for VxWorks and AMX embedded OSes.

Quantitative Analytics

As a consultant at Quantitative Analytics, I ported a large legacy database system from Pervasive SQL to Microsoft SQL Server, and worked on various custom databases and analysis tools used in the financial industry.

Fermilab

As a Computing Professional at Fermilab (a national laboratory operated by the US Department of Energy), I worked extensively on their ACPMAPS system, which was a groundbreaking (for its day) custom parallel processing supercomputer containing over 600 CPUs. I assumed responsibility for all of the hosting software (which ran on a UNIX-based front-end system, and allowed users to submit jobs to the system over the network), developed most of the hardware-level system diagnostics, maintained the library (Canopy) which supported the parallel algorithms being used by the physicists, assisted with hardware testing and debugging, optimized the high-speed communication routines which were used for inter-node communications in the processor array, and developed profiling tools to assist with code optimization. Development was done in a mix of C, i860 (an early RISC processor) assembly language, and UNIX shell scripting.

I also served as a liaison between the R&D group which built the ACPMAPS system, and the primary users of the system (Theoretical Physics group).

After my departure from Fermilab, I was hired on a part-time contract basis by one of the Fermilab scientists, to port some of the software I had worked on at Fermilab to a new platform.

David Bruce and Company

As the lead software developer at David Bruce, I was involved in all aspects of systems development, from initial requirements analysis through development, testing, and end-user support. I was also responsible for technical management of the entire software development team.

David Bruce's primary product was a portfolio risk analysis system, which allowed the user to perform "what if" analyses on mixed portfolios of equities, futures, and options. The system maintained historical databases of market data, augmented with option implied volatility, beta, and correlation data which was recalculated nightly; a real-time data feed was also available. The analysis part of the system allowed the user to vary any two independent variables (e.g. market volatility and interest rates), and view a "map" of how this affected various characteristics of the portfolio. A hedge optimization module was later added to the system as well.

While at David Bruce I was also involved in a number of other projects, including custom real-time database servers, touch screen market workstations, and data feeds.

Community Technology

Not long after being hired, I took responsibility for many aspects of the custom OS which was being developed in-house. Subsystems for which I was primarily or solely responsible included a dynamic linker to allow run-time library code to be shared between applications, filesystem driver (compatible with the UNIX System V file system), command shell, bootstrapping code to load the OS from a cold start, and drivers for various devices (asynchronous and synchronous serial ports, disk controllers, etc.).

Years later, I've come to realize that the custom OS we built way back in 1984-86 was in many ways similar to the modern-day VxWorks RTOS (albeit in stripped-down form).

Other Projects

Side projects I have pursued over the years have included:

  • I occasionally post on my Bits and Bytes blog at the PC hardware review site The Tech Report. I also designed and built their custom power supply load box, which is used for their PC power supply reviews.
  • For Bally/Williams Electronics – assisted in the design and implementation of a video game prototype.
  • For Powercore/CE Software – played a significant role in the design, implementation, and debugging of a commercial Windows application (PC interface software for an early PDA, the Sharp Wizard).
  • For Ortron – assisted in interfacing a PC to a laser videodisk player and touch-sensitive screen. Implemented a graphics editor, which allowed interactive layout of screens and definition of touch zones.
  • Custom Windows screen savers.

Those Were The Days...

I was also one of the "early adopters" of PCs back in the late 1970s. I built my own IMSAI 8-bit computer from kits and scrounged parts; I also wrote my own CP/M device drivers (video, floppy, keyboard, etc.) for it in 8080 assembler language. One of the first commercial software products I developed (while still in college) was a ground up rewrite of most of the runtime library for the 8-bit Digital Research Pascal compiler. My version was much smaller (memory was at a premium on a system which could only address 64K of RAM!), faster, and more stable than the stock runtime library; for a couple of years (until the world moved on to IBM PCs and x86) it was sold as a third-party add-on.

Odds and Ends

I'm always looking for ways to expand my knowledge and skills, and new avenues to pursue in the ever-evolving world of computer technology. The only way for an engineer to stay sharp is to stay on top of things! Here are a few examples of the areas I've been playing around with:

Linux and Open Source

Over the past few years, I have been using Open Source software to an ever-increasing extent. Both of my primary desktop PCs (work and home) now run Ubuntu Linux. I also help manage several Linux-based systems – the production file server and several of the development systems where I currently work run Linux; we're also using Linux as an embedded platform, and have conducted successful test flights of Linux-based embedded systems (for which I wrote much of the application code) with the Air National Guard.

The page you're viewing is being served via my home DSL line, from a home-built server running Ubuntu Linux and Oracle VirtualBox. My wife's web site is also hosted on my home server. A while back I started maintaining my own local mirror of the entire Ubuntu software repository, to facilitate experimentation with alternate system configurations; I experiment both in VirtualBox virtual machines, and on separate PCs I've set up specifically for this purpose. Getting up to speed on Linux has been a blast; I don't think I've had this much fun with computers since the early PC days.

I am currently working on ideas for a new web site which will provide practical "How To" guides for using Linux and Open Source. I would like to eventually cover the gamut from introductory topics and basic desktop use, to business infrastructure, to software development (server, desktop, and embedded). I hope to launch the site (with an initial focus on the most common desktop and business usage scenarios) sometime in the first half of 2011, with additional topics to follow.

Virtualization

Virtualization is an increasingly important technology these days. The concept was originally pioneered by VMware, but there are now several players in this field, including the Open Source virtualization platforms Xen and VirtualBox. Virtualization has proven to be valuable both as an infrastructure management tool, and a development/testing tool. I have been a heavy user of VirtualBox for a few years now, both at work and home. In fact, the server which served you the page you are reading right now is running in a VirtualBox VM!

I have even been thinking about getting myself up to speed on VirtualBox internals, so that I can participate in the VirtualBox development effort (e.g. contribute patches).

Python and Qt

I use Python at my current day job (for test scripts and utilities). Over the past few years I've become convinced that it is a superior language for a wide range of software development tasks. I also believe that it will continue to improve, especially now that it has corporate backing from Google (the inventor of Python works there now, and Google uses Python for a lot of their own infrastructure). One of my personal "to do" items is to get up to speed on Python-based web development frameworks like Pylons. Pylons has positioned itself as an alternative to the popular Ruby on Rails web middleware platform; I believe it has a lot of promise.

I am also planning to teach myself how to develop for the Qt framework. It seems to be our best bet for a true cross-platform GUI toolkit; and it even has Python bindings!

Microcontrollers

In an effort to catch up on what's going on in the microcontroller field, I've recently acquired a USB-based debugger/programmer for Microchip's line of microcontroller chips, and an assortment of their 8-bit and 16-bit PIC microcontrollers. I've set up their development tools in a VirtualBox environment (their tools are Windows-based) on my home PC, and have been teaching myself the ins and outs of working with PIC micros from both a hardware and software standpoint.

So far, I've prototyped some simple PIC-based circuits on solderless breadboards (including switching regulators to supply them with power), and interfaced them to my desktop PC over RS-232 serial ports. I am currently working on bringing up PIC-based Ethernet TCP/IP and wireless (Mi-Wi) interfaces. The near-term goal is to build a microcontroller-based web server running on a PIC which is capable of wirelessly controlling other devices via Mi-Wi. Not sure what I'll do with it yet, but it seems like a fun way to learn the technology!