Over twenty years of software development experience in a variety of roles including analysis, design, programming, testing, project leadership, management, documentation, and just about anything else that needed to be done to complete a project.
Most recent few years focused on web application development using various tools, but finally settling on Ruby on Rails (RoR) as my primary tool.
Previous decade focused on Unix-based software development; full text information retrieval; back-end internationalization (I18N) and localization (L10N); componentization; API design; definition and implementation of least-intrusive, light-weight, software development processes.
Currently quasi-retired. I have begun and abandoned quite a few projects. For the past two years have been working on ContinuousTraveler.com (below).
Jun-2006 through Jan-2008: half time work. Jan-2008 to Present: full time.
ContinuousTraveler.com is a RV'er travel planning site. It assists recreational vehicle travelers in finding RV parks and in planning trips.
I began creating it while 'fulltiming' in our fifth-wheel RV rig. The site evolved from a collection of spreadsheets and hand built web pages to a PHP/MySQL application running in our RV. On discovering Ruby on Rails (RoR), I converted it to RoR, got the domain name, and created the site.
ContinuousTraveler.com operates in two modes to accomodate the vagaries of Internet access on the road: 'Text' and 'Maps'. Maps mode provides the most functionality, but requires a moderately fast Internet connection. It displays RV parks and routes on Google Maps, and uses quite a bit of JavaScript. Text mode is 'classic' Web 1.0, provided as a fall-back for slow Internet connections; no maps; little or no JavaScript.
One unique feature is quality ratings for GPS coordinates for each RV park. The ratings give users an indication of how much trust to put in a set of coordinates. This is an outgrowth of some unhappy experiences with GPS coordinates gleaned from RV park sites; provided by a GPS navigation system; and with geocoded addresses from various services online. As part of adding an RV park to the database, an editor can set the park's position on the Google map and indicate whether the position was validated, and how. If no validation was performed, the geocoded location is rated as a 'guess'.
ContinuousTraveler.com is currently a Ruby on Rails (RoR) application with a MySQL database backend running on a virtual private server (VPS). The configuration includes nginx (in place of Apache); Mongrel Cluster; Rails; MySQL; HAProxy; Monit; Munin; Webalizer; Postfix; Dovecot; Centos (Red Hat) Linux.
Development is done on a collection of Apple Mac's, one of which runs MS Windows for testing purposes. Editors of choice: TextMate and the venerable Emacs (my fingers love Emacs, and yes I am a "grey beard"). Deployment tool: Capistrano. Code management: Subversion.
As of Friday, 1 February, 2002 I was quasi-retired. We moved from Falls Church, VA, to Brookings, OR, in May 2002.
In a very leisurely fashion I explored a large number of software tools and read a lot of books. I played with Java, Struts, PHP, MySQL, AppleScript, etc. That is, I enjoyed all the toys that I never got to play with while in the corporate world.
From March 2004 through October 2007 Kay (my wife) and I lived and traveled full time in an RV. I generally found that the RV travel planning tools available at the time did not meet my needs. I had collected spreadsheets of information on our travels including scheduling. I created a PHP/MySQL application and copied our scheduling information to it, and started building a database of RV parks that we had visited or considered visiting.
This RV travel planner was only available on the LAN within our RV, but after discovering RoR, it became ContinuousTraveler.com.
At my request, returned to the technical career path; by nature I'm a geek, not a manager. In October, 2001, decided on a more radical life-change, and informed AOL of my intent to leave at the end of January, 2002.
Largely because I was the last senior CPL developer left from PLS, I spent October through January documenting and and doing presentations to supplement existing documentation. Major focus was on the internationalization (I18N) and localization (L10N) facilities of the CPL full text search engine (see "Personal Library Software (PLS)", below).
Hardware & Software: Mac G4 PowerBook with MS Office. Occasional use of Sun Ultra-60.
Managed the group responsible for development and maintenance of the lower-level facilities for full text search at AOL, within the Host Development Division. I had been performing most of the managerial tasks of one of the teams within Core Search Technology. Core Search was reorganized to remove higher level application groups, and my manager asked me to take on managerial responsibility for the more tightly focused Core Search Technology group. I opted to do it formally, rather than as "acting manager." What the heck, if you're gonna do something, go all the way or don't go at all?
Continued acting as Search Divlet's consultant on search internationalization and localization. Worked with groups within the Search Divlet, as well as with other groups within AOL involved in search applications and services. Presented overview of internationalization functionality to AOL's international partners at the Search Divlet's "Search Summit."
As manager, I made noticeable progress "bringing out" developers who had been reluctant to take the lead in all aspects of their projects or their segments of projects. One developer in particular began writing, and presenting for review, complete and comprehensible requirements and design documents, after years of declining to do so. Another very excellent developer volunteered that he was ready to take on more task leader responsibilities after years of declining to do so. He was subsequently promoted a level and was progressing very well as leader of a two to three person team.
Made some progress in getting developers to more fully take part in development practices intended to reduce requirements changes, redesigns, bugs, and schedule slippage. The phrase "like herding cats" comes to mind. Developers were finding and correcting problems in requirements and in design, which ultimately would have saved significant time and other resources down the road.
I got very positive feedback and reviews on my performance, but dealing full time with personalities versus dealing with technologies is NOT my forte. I found this role to be very stressful as a full time occupation, and was beginning to have difficulty maintaining my composure. I requested to be allowed to move back to the technical track. Whew!
Hardware & Software: Mac G4 PowerBook with MS Project and MS Office. Occasional use of Sun Ultra-60, emacs, and maybe even a C++ compiler in stolen moments trying to remember what it was like to be a developer.
Continued work on the PLS/CPL based version of AOLSearch (which has since been replaced twice: once by Inktomi, now by Google). Tech lead for the Infrastructure team within the Core Search Technology group. Infrastructure team was responsible for basic client/server search and indexing framework for fulltext-style databases. Involved in internationalization, componentization, integration of search and update architectures, evaluation of new technologies, and my favorite part of every job description I have ever seen, "other duties as required."
Was the Search Divlet's consultant on search internationalization and localization. Worked with groups within the Search Divlet, as well as with other groups within AOL involved in search applications and services.
Along with a system architect from another part of the Search Divlet, and with feedback from most senior members of the Search Divlet, defined an idealized client/server search architecture. This architecture attempted apply lessons learned during development of the general purpose OTTR product as well as a specialized application oriented internal product. The result was an architecture with most of the simplicity of the specialized internal product, but most of the flexibility of the OTTR product.
Lead the Core Infrastructure Team in design and beginning of implementation of a new internal search product based on the idealized architecture. Gave up major "hands on" involvement when I became manager of the Core Search Technology Group, of which the Infrastructure Team was a subgroup.
Hardware & Software: Most work done on Sun SPARC Ultra-60 with Solaris 2.6 in C++ using Sun's development tools. Supervised and assisted with work on other platforms such as HP/UX and IRIX boxes. Also: Mac G3 PowerBook with MS Project and MS Office as I sank more deeply into administrative tasks.
Continued work on OTTR started at PLS. Technical leader in the development of a PLS/CPL based full text search to replace the Excite based search on AOL.com at the time. Work on OTTR was never fully resumed, as it was deemed too general purpose and complex for the AOL client/server-only search environment.
Hardware & Software: Most work done on Sun SPARC Ultra-60 with Solaris 2.6 in C++ using Sun's development tools. Supervised and assisted with work on other platforms such as HP/UX and IRIX boxes.
Lead Software Developer. Member of the Core Technology group which was responsible for the PLS full text retrieval engine product, Callable Personal Librarian (CPL). CPL was a cross-platform API, interoperable across all supported platforms (various Unix, Macintosh, VAX/VMS, Windows, etc.). CPL was the search engine at the heart of all other PLS products, as well as products such as Grolier's and Compton's CD-ROM products, various America Online search facilities, WebCrawler, the Dow Jones News service, Congressional Quarterly's Washington Alert, the McKinley Internet Directory, the short-lived AppleSearch, and more (see the 1996 "Seybold Report on Desktop Publishing, Vol 10, no 8").
Technical lead for the development of a new product, Object-oriented Toolkit for Text Retrieval (OTTR). OTTR was a C++ interface to the PLS search technology. OTTR provided features that customers have often requested: multithreading, client/server database operations, distributed database operations, extensibility, and more. It was intended to be general purpose enough, and scalable enough, for small CD-ROM based applications, traditional connection-oriented online systems, stateless Web style databases, and so on (the "uber engine").
Work also included development of the development process for the Core Technology Group, all major technical analysis, research, and design for the OTTR product, supervision of the team of developers working on OTTR (varied from 3-5 developers), design and code reviews, implementation of the more difficult portions of the product. Assisted with performance reviews of team members.
Senior Software Developer. Work included analysis, design, and implementation of a new Language Support System (LSS) to permit internationalization of CPL (first available in CPL v5.0). The LSS provided CPL with a protocol for replaceable language systems which support character-set specific and language specific functionality in CPL. Implemented a Macintosh-specific language system to support indexing and searching Japanese text using Macintosh Worldscript functionality.
Developed a "framework" language system into which support components are "plugged." Support components include tokenizers, canonizers, collators, word stemmers, stopword filtering, and character set specific string operations. Implemented an initial suite of highly customizable components. The components support a variety of languages across a variety of character sets, including Latin-1, various other versions of extended ASCII, and Unicode (Unicode support was first available in CPL 6.1).
Developed framework to allow users to create their own language system components, which may either be dynamically loaded or statically linked into applications using CPL.
Additional duties included: supervision of junior programmers; redesign and implementation of database internal schema support; development of new API; development work on a Web-based product; memory and performance optimizations; multithreading support; and of course the usual porting and debugging work, as required, on all parts of CPL (query system, indexing, etc.).
Hardware & Software. Most development was done on Unix platforms. Most work was done on single or dual CPU Sun Sparc workstations with Solaris 2.3 through Solaris 2.5. Other platforms included HP PA-RISC with HP/UX, NCR Intel-based boxes with Interactive's Unix.
Contract work at a large benefits record-keeping company, placed through The Registry. Part of a four person team developing the server portion of a "defined contributions" application. The application was driven by a MS Windows client, which communicated with the server via Netwise RPC. All major processing done by a server running on a Sun SPARC with Solaris 2.3. The server encoded business logic in C++ and Sybase stored procedures.
Led a team of five programmers in developing a legal services application in C++ using the XVT portable GUI library, under MS Windows 3.0 and 3.1. Responsible for code-design, documentation, implementation, technical supervision of other programmers, and code management.
This was the last project on which I developed software for MS Windows platform. My experiences with MS Windows on this project convinced me that I would rather be unemployed than develop software for MS Windows ever again. I have been working on Unix systems ever since.
Research, development, and maintenance for CQ's customer oriented systems. Managed the Client Systems software team. Scheduled, supervised, and evaluated work of software team. Hired staff; did performance and pay reviews of staff.
Designed and implemented the code for Congressional Quarterly's Washington Alert Service II (WAS-II) on-line full text retrieval system, based on editorial-staff interface and user level functionality specifications. System was written in C on DEC VAX under VMS, and used the Personal Library Software CPL text retrieval engine.
The WAS-II application was the first one in which PLS' CPL text retrieval product was ever used commercially. Another company was the first to license CPL, but never released a product. CPL is now owned by AOL. WAS-II was maintained and extended until the late 1990's, I believe, when it was replaced by a Web-based application.
I started out as a Senior Software Engineer, or some such, and was later promoted to Manager of Client Systems. I have lost all records of the dates, however. In any case, it made little difference in my job, as I was already performing most of the managerial duties and handing documents over to my manager for his signature.
This project was the first time I tried to do Object Oriented programming, albeit in C. Was inspired by the object-orientedness of the Amiga OS, which was written in BCPL and C. Do not really HAVE to use an OO language to do OO, but it does require "programmer discipline", which many say is an oxymoron.
InterLisp-D programming, instructional design, documentation. Billing Adjustment Simulation project: programming of job process simulation for training of customer support staff. Work was done on Xerox D-Machines (1186), which could also be booted up as Xerox Viewpoint (successor to Star) document workstations.
XICTMD (Xerox Center for Training and Management Development) has grown and changed its name since I was there.
This one was fun. Introduced me to a REAL Lisp environment. Discovered that Lisp could be great fun in the proper environment. If Xerox InterLisp-D environments had been the norm in universities (versus TTY interfaces), maybe most computer science graduates would not hate Lisp. I'm still looking for a development environment even half as good..
Walked away from this job with some strange ideas about object oriented programming, probably from folks at Xerox who had been exposed to the folks at PARC. The strangest and most interesting idea was that each object should have its own thread of control and interact with other objects via messaging. Each object should be a server. Imaging my horror and confusion on encountering C++.
Alan Kay, the person who coined the term "object oriented programming" was still saying that each object should be its own thread of control in the late 1990's. He also felt that each object should have its own IP address. It is worth the time and expense of attending a convention at which he speaks just to hear his talk, "The Computer Revolution Hasn't Happened Yet". The best versions are at computer conventions; the EduCom'98 version does not address the same software engineering concepts, and is not as interestingly inflammatory.
Designed and coded interactive event-driven videodisc-based medical simulation programs for a computer based training (CBT) system in Basic on DEC Pro-350 Ivis systems.
This is the job that brought me to the Metro-DC area just months before the project folded. It was later revived (without the original team) and appeared in a Microsoft PC version on the final episode of the "St. Elsewhere" television series.
It appears that my old office at HumRRO has been demolished as part of the Woodrow Wilson Bridge project. The old HumRRO headquarters building was at the intersection of US 1 and I-495, on the southern side of I-495 at the end of the old Woodrow Wilson bridge. My office looked over I-495 north toward Old Town Alexandria. My view was of a rather nice looking cemetery. One day I was gazing out my window pondering a problem when a rather large plane came roaring over with one of the space shuttles on its back. Rather startling!
Grant from New Century Education Corporation. Developed a computer assisted instruction (CAI) presentation system; supervised part time programmers. Programming was in Pascal under CP/M-86 on IBM PC's and compatibles.
While working for Julie Vargas on this job I finally got around to defending my masters thesis (with vigorous encouragement from Julie).
This project took many twists and turns. Some exploratory work was done using an Apple II, and a BBC Acorn computer. Both systems were based on the 6502 processor. I got to do a bit of 6502 assembler work, such as: multiplication and division routines (the 6502 did not have built in multiplication and division); random number generation; and qsort.
Designed and coded upgrade of MIS in COBOL-74 under Burroughs MCP-II, which included a built-in CODASYL database. Supervised part time programmers.
This job started out as a Behavioral Systems practicum placement to fulfill degree requirements for my masters in psychology, and became a job. I probably would have gone back to Behavior Analysis at the end of the summer, if not for the death of my mentor, Don Hake.
M.A., Psychology, West Virginia University,
Specialty in Behavior Analysis, Minor in Computer Science, 1978-1984
Spent four years taking classes, doing research, helping others with their research, doing practicum placements, etc., before bailing out to play with computers full time in the summer of 1982, which semi-coincidentally is the same time my mentor, Don Hake, died.
The one and only publication with my name on it (as second author) was a paper about a project that I was supposed to have done as a master's thesis, but which I never got around to proposing (typical of my behavior at the time). Don insisted that I be first author; I insisted that I not. It was accepted for publication days before Don died, and published several months later:
Hake, D. F., Donaldson, T., and Hyten, C. (1983). Analysis of discriminative control by social behavioral stimuli. Journal of the Experimental Analysis of Behavior, 39, 7-23.
My master's thesis was a follow-on project that I did not get around to defending until two years after I left the Behavior Analysis program:
Donaldson, T. (1984). Sharing and Cooperation in Pigeons. WVU Master's Thesis.
B.A., Psychology, West Virginia University, Magna Cum Laude, 1973-1978
Was initially in pre-engineering. I was going to be an Electrical Engineer (EE). Somewhere along the way I decided I needed to understand a bit more about humans ...
Fairmont Senior High School, Fairmont, WV, 1968.
Completely unremarkable except for some great Vocational Technical (VoTech) training in electronics back when vacuum tubes were the norm, transistor radios were just becoming popular, and IC's (integrated circuits) were just becoming somewhat common. Lots of hands-on circuit building and testing; live circuit troubleshooting. The equipment was out-dated Army electronics training gear, and the instructor, Vance Cox, was an ex-Army electronics technician. Most of the folks who took the course ended up going to college (I think) in one engineering field or another after a few years of working.
Member of Vocational and Industrial Clubs of America (VICA) (as of 1 Sept 2004 name is now SkillsUSA).
This was back in the days when there actually was high school level vocational technical training in the USA. These days it seems to be simply a place to send problem kids. It is pretty much a bust for kids who really want to learn anything, with little or no hands on training: too hard for the school, and too much liability.
The current light of my life is Ruby on Rails (RoR), supported by JavaScript, CSS, and other such web technology. I had been looking around for a free version of Lisp that "plays well with others" as a scripting language and general purpose language. I ran across an article titled "Why Ruby is an acceptable LISP" which lead me to trying Ruby which led me to RoR. Oh happy day!
Various Macintoshes: I have been using them since 1984, so I there have been quite a few. Besides some minor development on a Mac during my stint at PLS, most development work I have done on Macs has been on Mac OS X. Little of that was Mac specific, but rather, general Unix stuff (love that Unix!).
Sun Ultra's (Solaris 2.x) with multiple CPU's and what was considered lots of RAM at the time. Most development work was done using SparcWorks C++, along with the usual tools such as Emacs, Quantify, Purify, and so on.
At PLS I also used HP workstations (around a year to a year and a half), a Macintosh (to implement indexing of Japanese), and various other lesser known Unix boxes.
Have played with the Java Native Interface (JNI) under Sun's Java Development Kit (JDK 1.2). Not a bad FFI (Foreign Function Interface).
I have done some work with Python (a freebie OO language), and have played around with Scheme (a lightweight LISP variant).
I spent a year or so developing under Xerox Interlisp-D (which is apparently now defunct). The Xerox Interlisp-D environment changed my life. I have spent the years since then trying to find an equally powerful environment, but the search has been in vain so far.
I would have loved to use CLOS on something like a SparcStation. Maybe Franz Lisp. Franz Lisp appears to have a source level debugger (lacking in MCL), and is available across a wide variety of platforms.
Various Intel-based systems using CP/M, MSDOS, MSWindows, SCO Unix, and a couple other flavors of Unix.
DEC: clustered VAX 8700, 6330 & 8200; PRO 350 IVIS; PDP-8/A
Xerox: 1186 & 1108 AI Workstations, with Interlisp-D and Viewpoint.
One of the cooler C++ environments I used was Centerline's ObjectCenter , which included a C++ interpreter.
In my wasted youth I did a bit of COBOL. I have also used punch cards, paper tape, Selectric terminals, and even a real TTY (but no stone tablets).
My first "home computer" was a single-board KIM-I with a whole 1K of RAM, a hex keypad, and a cassette player. Naturally, my first assembly language was 6502, which I hand assembled and punched in as hex. Once upon a time, I knew the 6502 assembler by heart. Now, all I remember is that instruction A9 is "LDA", "load accumulator immediate."
"This ain't no shit, but ..." I was once in the U.S. Navy (3 years, 10 months, 1 week, 1 day, and 1 hour, but who's counting?). Spent most of that time training for, or on, the U.S.S. Green Bay (PG-101).
What's the difference between a "sea story" and a "fairy tale"? The fairy tale starts out "Once upon a time ...". The sea story starts out, "This ain't no shit, but ..."