Stephen D. Williams Unix, C/C++, Database Experience (Aug. 2001)
Senior Consultant / System Architect, Designer, and Developer, (For full resume/skills) 703-724-0118, 703-995-0407 Fax, 800-SDW-UNIX,  43392 Wayside Circle, Ashburn, VA 20147

Summary: This document highlights Unix, C/C++, and Database experience. For chronological discussion of clients and projects, please see the full resume.

Unix: I have extensive Unix experience dating back to 1984 and including nearly all Unix varieties, many in great depth at administration, programming, customization, and sometimes at the kernel level. I am very comfortable with all aspects of Unix and can quickly map needed operations to new variants. I am most familiar with Linux, Solaris, HPUX, with slightly dated experience on Irix, AIX, SCO, and DecUnix, along with many historical variants.

Areas that I have extensive knowledge include: networking, routing, security, email (sendmail/postfix/imap/procmail, mailing lists, custom development), usenet(nn development), printing, special devices like tape, cdr, jukeboxes, threaded development, optimization (profiling, real-time priorities), compiler porting and management (gcc/gdb), clustering (MPI, custom, single system image, pipelining), GUI development (Interviews, QT, Java, Tcl/TK), shell/perl programming, custom boot disks, virtual environments (VMWare, User Mode Linux, etc.) and more. rates me a Certified Master System Administrator with a score of 4.71.

C++: My C/C++ experience is very strong. I have used C for about 17 years and C++ for 15 years. This experience has always extended to detailed, highly technical uses like code that tests alignment of structure types at runtime, code generators and meta-data interpreters, languages, advanced programming methods like rule engines, etc. I have been a proponent of OO analysis and design after living through the 'structured programming' revolution, following a number of experts to the Unified method and now to UML and it's emerging methodology. I favor Peter Coad over Booch and Grady.

Database: My database experience has been varied and usually very detailed. I have experience with complex schemas, queries, and concepts like outer left joins to handle 'or' efficiently or my own methods to provide range selection of query results (n-m) even on servers with no direct support for such operations (MS SQL Server). I also have extensive experience and great success with 3GL (C/C++) to SQL integration for both ease of programming and highly efficient systems. Administration experience covers complete life cycle, but is spotty with respect to individual vendor solutions; requiring only a short learning curve when needed. (It does however include Oracle installation on Solaris and Linux, a worst case situation by any measurement.)

Unix/C++/Database experience: (Note: this is far from complete, but hits relevant highlights.)
My unix experience started in 1984 at GE Lighting when I worked with a Perkin-Elmer minicomputer running first Unix Seventh Edition and then Unix System V Rel. 2. Our other systems were VMS minicomputers and early DOS and MPM 8/16 personal computers and Z80 embedded boards. I immediately liked Unix and I was already a C proponent in a Pascal MT+ and Assembly research engineering group.

I left GE to do independant consulting after helping a factory obtain and install an NCR System 32 Unix V.2 system for back office applications. I bought an NCR System 32 for my company's development use. Shortly thereafter I became a consultant to NCR Retail in Dayton, programming very early C++ running on NCR System 32 servers for department store transaction processing. The systems were stock System V.2 plus Wollongong TCP/IP. The software was extensively object oriented, used a well designed message passing system, although the infrastructure broke a number of modern design rules. The C++ was Cfront .9 and later. At NCR I was exposed to Usenet, uucp, Oracle development, message passing architecture, and true object oriented design. I developed a C++ interface library for Oracle that allowed a class definition to create metadata that defined an equivalent SQL table. An instantiated object of that class would then log into the database, create the table if it didn't exist, and allow easy access to all data in the table using operator overloading and generated SQL queries. Dynamic management of indexes was employed to support a user interface with dynamic sorting on multiple fields.

Another project for NCR involved creating, on a very tight schedule, a PC program to compute flex benefits. This was built using C++ and involved interpretive meta data that defined fields to be printed on each page.

After a few years, I worked on two projects at CSC that employed C++, this time Glockenspiel C++ as a front end to early Microsoft C. The first project involved C++ and an integrated M1 expert system to manage warehouse operations. The second consisted of a language I created, modeled after Postscript, that provided a web page/form like ability to specify templates for very complicated, dynamic pages. I built the tokenizing, recursively interpreted language using a port of Flex and Bison, with modifications, and a custom memory management library to aid in debugging. This system ran in a 4 process multitasking kernel that I adapted and ran on top of DOS on a 286 with 512K ram and 2 360K floppies. It provided highly formatted communication via the early Internet: 1200 baud DDN TAC dialup modems to a MVS mainframe running primitive SMTP software. The system allowed editing, printing, and communication of messages simultaneously and was used by the 80+ Air Force depots for several years (at least).

For three years thereafter, I worked at GE Aircraft in workstation systems software and support. We built a custom distributed backup system using just released HP Magneto-Optical Jukeboxes in a complex distributed system to support thousands of technical workstations, mostly HPUX. I built a C++ based expert system where rules were specified in C++ and the knowledge system was an extensible class based design. This was used to analyze realtime problems with the backup system using active network tests and recovery. Extensive work was also performed to port GCC to HPUX 4, along with nearly all of the Project Athena and other Internet software. I performed probably the first port of Kerberos to a System V based system. I also setup the domain for 25,000 systems, created a custom X.500 style directory for the Unix workstations while integrating with X.400 and SMTP/Internet email. I installed and configured the HPUX X.400 system we used to talk to VMS and CCMail

At Lexis-Nexis, for three years I was a C++ developer using DCE, Rogue Wave, and other libraries under SunOS, then Solaris, along with some AIX. I used C++ to build GUI apps (using both Interviews and Motif with a layered library), database applications (Sybase, Oracle, custom index queries). Systems were message passing, DCE rpc, and other advanced architectures. Extensive experience with C++, integration of multiple C++ libraries in a multithreaded environment, OO Analysis and Design, including conferences with David Taylor and others. Extensive SunOS and Solaris development, including tape conversion and satellite reception programming. Ported and rewrote an extensive transaction processing system for stock historical quotes that used X.25 and Sybase.

At Bank of America near San Francisco, for six months, I installed their first firewall running on a Dec Unix server, setup their web server and email on a Solaris server, and managed security, updates, and development.

At Chemical Bank in Manhattan I created a Solaris based intranet publishing system that integrated image, text, html, postscript, and other data into composite web pages for Wall Street traders.

In 1995 at AOL, I programmed mostly in C and C++ for HPUX building libraries and applications for 'host' servers. My first project was BuddyList. To meet the extreme performance needs, I created a Perl code generator and C library that managed many parallel connections to a Sybase server using CT-Lib in a fully asynchronous manner in a highly optimized server. A single application server process was able to handled sustained throughput of 1700 transactions per second. I also consulted on 6 other projects on both the use of Sybase and my library/code generator. I also created a C++/STL based video conferencing server with crypto-checksums and full session handling. Additionally, I assisted in the design and implementation of the client video component.

Netword involved porting a transaction processing system from a Dec Unix system to several Linux boxes and moving the database to MySQL at great cost savings and better performance and reliability. involved architecting and designing an online auction database and processing system, using Oracle. Additionally, MySQL was used to handle high transaction back office processing for special purpose applications.

At Alexus, extensive C++ and SQL Server (a derivative of Sybase's Server, still very close) development was performed on a very complex SQL database involving meta-data defined tuples, relationships, permissions, and enumerated values. Built a complex dynamic search system using full-text and field capabilities in a dynamically generated query to return stable ranges of results for web view paging. Optimized numerous SQL query situations in the face of rapid growth and performance problems. Debugged optimizer choices, language usage options, and schema migration. This was C++ in an NT4, ASP environment.

At DiamondBack Vision, I worked with MS C++ plus standard STL to build components for a cutting edge MPEG4 video/audio multiplexing, streaming, and playback system. Extensive use of modern STL was used to create very concise and efficient code. The system was architected and designed using my own copy of Together Control Center for UML diagramming and bi-directional code documentation.

Additionally, I have been very active in using, installing, porting, and enhancing Linux at the systems and kernel level. In the past two years, I have fixed bugs related to arp replies with multiple NIC cards and ported the /dev/poll driver to the 2.4.1 kernel for performance/scaling related development and testing. I run my laptop with a recent kernel, ReiserFS (which I've been using for 2 years), VMWare with Windows200Pro, a UserModeLinux VM, CDPD modem, and routinely use compact flash, tape drives, CDRs, RAID units, and other advanced Unix/Linux features.