Wayne Conrad

17802 North 50th Avenue
Glendale, AZ 85308
602-938-1173
wconrad@yagni.com

I believe that Extreme Programming makes life better, both for me and for my employer. I enjoy showing people how XP can work for them, too.

Buzzwords

Years

Here are some very approximate measures of years spent doing things.

Certifications and Classes

Employment History

Opnix (2001-present)

I am an XP Coach and developer. Our team is working on advanced internet routing using Ruby, Python, C++, and Linux. I helped the team learn better test-first programming skills and focus on developing automated functional tests. Then I went to work on getting the team to communicate better with the rest of the organization. The development team achieved that critical milestone when they moved into the same office space as its manager, and later when the QA department also moved into the same space.

Since much of the code uses C++ and pthreads, I've gotten more practice in tracking down segfaults and figuring out which library forgot to use Mutexes. This is not work I recommend doing for fun, but it's a good skill to practice. I introduced the team to reference-counted pointers to keep memory management problems under control. I've also had my head buried in the Linux kernel, figuring out what was causing our product to lose incoming packets. Hard work, but fun too.

I'm who everyone points to when someone asks for "the database guy." I worked on all of the code that stores data into the database, and most of the code that retrieves it. I also created the project's thread-safe shared-pointer class.

Ablest (2001)
Maxim Group (1999-2001)

As a consultant to American Express, used IBM Visual Age for Java to create libraries to interface Java Enterprise Beans to mainframes via SNA, to databases using JDBC and Websphere connection pooling, and to distributed systems using Message Queue. To increase quality, introduced the group to Test First programming using JUnit, creating a suite of over 1300 tests. To make the code more maintainable, taught OO and XP principles including pair programming, design patterns, and how to Say What You Mean in code. To foster communication, installed a development web server for documentation and communication. To increase productivity, used Python and Java programs to automatically generate web pages with production statistics, freeing up programmer time for programming. Write an enterprise-wide security tool that allowed CRON jobs to do DCE authentication.

Diversified Consulting Resources (1998-1999)

As a consultant to HBOC/NHES, used Microsoft Visual C++/ATL to create COM components for sending asynchronous broadcasts to network computers. Designed and implemented a real-time priority queue with background reordering. Created solid, reusable components for use by the rest of the team, including C++ templates such as smart pointers and lists. Created Visual Basic programs for testing and demonstrating my COM components.

As a consultant to Motorola SATCOM, created a simulation of the Teledesic satellite communication system using the BONeS simulation tool. Modeled the protocol between the spacecraft and ground equipment to determine the effects of different algorithms upon system timing, including packet delay, delay variation, and throughput.

GE Team Controls (formerly PCSI) (1987-1998)

Using 8086 assembly language and Borland's Turbo Assembler created an embedded program for distributed process control to run on an ETI/TI/Siemens micro-controller. About 2.3 MB of heavily commented source assembled to about 120k of code, which I tested using a ROM emulator before burning it onto EPROM. The program performed soft real-time monitoring and control. Implemented the remote side of a distributed database. Co-designed and implemented a radio and modem communication protocol to synchronize the database between computers. Wrote high precision math routines (log10, loge, power, etc.) using the 8087 math coprocessor. Wrote primitives for synchronizing multi-threaded code, including "multiple-read, single-write." Created a C-style memory heap that could be recovered after the micro-controller was reset, allowing it to have a persistent database. Implemented the p-code interpreter for a Pascal-like control language that I designed. Created a command-line terminal interface for performing diagnostics and debugging. Created assembler macros to implement OOP techniques (including inheritance and virtual methods). Wrote drivers for off-the-shelf and custom I/O hardware.

Rewrote the above program in C++ to run on single-board DOS micro-controllers (both STD and ISA bus). Used OOP patterns throughout. Created drivers for analog and digital I/O boards and MODBUS devices. Created a non-preemptive multi-threading. Designed, simulated, and then implemented a peer-to-peer communication protocol that allowed the micro-controllers to communicate with each other when the host computer was down. Implemented IPX network communication.

Wrote a similar (but not compatible) embedded program for a MODCOMP Classic IV minicomputer using Fortran and MAX IV assembly language.

Modified and expanded a MODCOMP mini-computer process control system. Engineered and oversaw a "hot swap" to the new system without disrupting the customer's mission-critical system.

Administered the company's OS/2 file server, which I migrated to Windows NT. Built and administered the replacement Windows NT domain controller and RAID file server.

As an architect and programmer for the OS/2 host that managed remote micro-controllers, wrote a recursive-descent compiler for a Pascal-like control language. Designed and implemented a custom communication protocol for remote OS/2 workstations. Created shared modules and templates for memory management, data sharing, C++ portability, and basic data structures such as lists. Wrote listing and cross-referencing programs for managing the database. Created a host program that executed the same P-code control language as the remote processors, allowing control tasks to be performed by the host. Wrote a program that interfaced with a voice/telephone board to allow remote monitoring of the system.

Wrote a Windows NT program to communicate with remote micro-controllers and interface them to a third-party process control system. Designed and implemented a "hot standby" capability so that a backup driver on another computer can take over if the on-line driver fails. Used TCP/IP sockets to synchronize the on-line and backup drivers.

Wrote a Java application to synchronize files between network computers.

Wrote a Windows NT SNMP Network Agent and Network Monitor to allow a third-party program to both access and expose SNMP data.

SKL Industries, Inc. (1986-1987)

Using Turbo Pascal and an 8086 assembler I wrote, created a dial-in DOS BBS system for real-estate listings. I used the assembler to write the serial interrupt driver.

At home

I'm always doing something with computers at home. I built all 6 of the network's computers from parts. All of the computers run Debian linux, but the two workstations also dual-boot into Windows 98 (I'm a game junky). I host my own email and web server. The web server is apache with an interesting mix of static html, php, python, and ruby (I like playing with languages). The diskless firewall lets all of the computers share my DSL connection. None of the servers have monitors or even video cards, so the terminal server lets me take care of boot or network problems via serial console. Each server is hooked to its own X10 module so I can reboot it remotely.

Lately I've been learning OpenGL and 3D modeling. It's a fun departure from the invisible back-end programming I usually do.

Content of this site is © Wayne Conrad. All rights reserved.