First Unix development job (1992)
I started working with the old commercial Unixes around 1992 or so, in a small aviation consultancy in Palm Harbor, FL. I was hired as a Junior C Programmer, even though I had only used Turbo C on DOS up to that point. Under the tutelage of Bill Davis, I learned about C/Unix programming, memory management, the hazards of C pointers, basic libraries like libc and curses, relational databases (Unify and Informix at first), build engineering/packaging, system administration (included nntp/news/uucp, and bang-path addresses (which is what email looked like before domain names). Our work terminals were 9600-baud serial terminals in the beginning (green or yellow 80x24 grids of text!), and later were replaced by Windows 3.1 PCs that we used solely to login to the Unix systems over telnet.
I got to learn on the venerable beasts like Solaris 4, Sequent (a minicomputer using Intel 386s but otherwise, NOT resembling a PC in any way), the SCO Xenix/Unix family, and AHT&T System V (running on an NCR 486 system).
X11/Motif: Automating robots in a big microchip factory (1995)
Hungry to learn GUI programming (XWindows) I found some work in Orlando, FL at AT&T Microelectronics as a contractor in their microchip fabrication facility. They spun off Lucent Technologies while I was there in 1996. At Lucent, I got training in C++ and in X11/Xlib/Motif, and I got the opportunity to immediately use those new skills writing an X11 GUI to monitor and automate interactions between the Process Control Systems and the factory robots actually handling the chips.
I was briefly lured back to the aviation consultancy with promises of retrofitting the 80x24 green screen apps to XWindows, and maybe, just maybe, this new thing called a web browser. After a while, it became obvious that this wasn’t going to happen, so I set off again.
Boring 6-month Contract (2H 1997)
In the second half of 1997, I did six months of C++/Solaris backend bug-stomping for a report server used widely in the TV advertising industry. I learned a deep appreciation for byte-by-byte regression testing there, but I simply didn’t care for the topic material (which was television ratings).
High-finance consulting / Y2K contract (1998-1999)
Then in 1998, I got picked up by a major consulting company as an Informix database administrator, and I led a Y2K remediation project for a securities firm in St. Petersburg, FL. We identified hundreds of locally-written report and administration scripts, threw out the ones we could prove never got written, and ported them from the Sequent Dynix system running Informix 5 to a six-node Solaris cluster running Informix 7.2. I had to implement a new pricing feed from the Bloomberg data service, and that was my first exposure to the Java and Tandem platforms. I learned a lot about the financial industry: things like historical reporting, daily transaction matching, sharding data across physical disks for performance. I created a set of set of parallel-mode Makefiles (something normally used to build software) that drove the entire migration (including significant schema changes) in under 72 hours. On Easter Weekend 1999, we ran that migration one final time, and so ended my Y2K project successfully!
Side work turns into Self-employment (1999-2001)
Near the end of 1999, I had taken on some side work at night, and these clients were clamoring for more time, and there just wasn’t enough to go around after my daytime work. So, I asked if they’d be prepared to pay me my consulting rate all week long, and the answer was YES! I turned in my resignation in early 2000, and began working from home full-time under LinuxTampa.comio (yes, THIS site!) During this time, I built a modest webhosting business on a few Redhat 6.x systems. ioI learned the workhorse protocols (ssh, telnet, http, pop3/imap, ftp, DNS, etc) and the internet servers that speak them (openssh, telnetd, Apache2, sendmail/qpopper/postfix, vsftp, bind9, etc).
This period of blissful self-employment brought me lots of interesting people and projects.
I got to work on a multicast routing project used in an in-flight airplane networking system called Boeing Connexions. This was pre-wifi, so the seats were wired with 10BASE-T jacks instead.
I did the client software for the world first ATM cash dispenser (Red Hat 6 & KDE2-era libraries in C++). I hadn’t yet heard the phrase ‘embedded Linux’, but really that’s what it was. The unusual devices were almost all RS-232C serial port devices. I wrote C++ classes to:
- read from credit card readers and touch screens
- write to a thermal printer that had the ability to cut the paper receipt off after printing
performed a 2400-baud dialup sequence to VISA to determine if the ATM customer has the cash in his account. This included double-DES encryption of all the key identifiers, plus the user’s 4 digit PIN code.
- interacted with a DeLaRue cash dispenser to tell it how many bills to dispense (the machine doesn’t know or care about the bill denominations, so it’s important the system KNOW that it’s depensing $10 or $20 bills. And of course, things can go dreadfully wrong during such a mechanised operation, so the system had to verify that the DeLaRue’s response indicated the correct dispensation. Otherwise, it had to call VISA again to refund the users’ money back!
Then the dot-com boom ended in a whimper at beginning of 2001, and all these interesting projects suddenly dried up, and no more came to replace them. I had been so busy actually executing projects, that I didn’t bother to learn how to FIND them. After a few dreadfully quiet months, I had to return to normal Corporate America work, and wasn’t at all happy about it. (Something about keeping the boy home on the farm after they’ve seen Paris).
An interesting side project following self-employment
I once did some neat enhancements for a video browser for a police car-camera archival system. The enhancements were mostly in two areas:
I added a moving map widget next to the video, and synchronized the map to track the position of the police car at every moment during the video. I did a Google Maps implementation in Java/SWT Desktop application on Linux first, then discovered that Google’s Terms of Service didn’t permit me to access their API in a private application. They shut off my API key, and I did another implementation in OpenStreetMaps, where such usage is perfectly okay (and they permit caching of the map tiles, which led to far better performance too!
Video Classification & tagging (i.e. badge #, infraction type, related license plates, etc)
Fifteen years in Dilbert-esque telecom shop (2001-2016)
I did 15 years at a large player in the cellular/wireless space. They liked me enough to roll me over from contractor to employee in November 2001, and I ended up working 15 years. I’ve worked on about 7 projects, learning a lot about the cellular/wireless/landline industries. I wasn’t thrilled about any of these projects, save for one called VisProactive (abbreviated to VPA), which kept me quite happy and challenged from 2010 to 2013.
The company had been processing hundreds of millions of daily telephonic roaming records for many years, but didn’t have a way to visualize trends at the macro level. This is where VPA came in. It ingested all of these records, summarizing them into historical stats every 15, 60 and 1440 minutes, and displaying them in a web browser via a Flash/Flex GUI. We ended up making 7 or 8 times editions of this product, each time for a different wireless protocol (SS7 vs. CDMA vs. GTP/Diameter vs. MDR), each with large traffic volumes than the last. Rather quickly, we discovered the limitations of Oracle 11, and switched to HP/Vertica for all the real heavy lifting. Now over a billion rows a day flow through each of these systems.
I have never been a fan of Adobe Flash, because of Adobe’s dismal Linux support over the years. But the team was told to use Adobe Flex (now an Apache project) before I joined, and it was too late to do anything about it. Before the project was canceled, we did get an opportunity to prototype the GUI in real web development technologies like jQuery and AngularJS.
After VisProactive was essentially “finished” in terms of feature set, I was moved around, given a few productive things to do, but essentially was boring Java busy-work. Starting in 2014, wave after wave of coworkers were gett laid off, while the same jobs magically reappeared in Costa Rica and India. A distribingly anti-agile flavor of something called “Scaled Agile Framework” started consuming some of the newer projects, and DevOps was similarly perverted into policies that essentially halted ALL progress in developments. After a terrifying 3-week illness brought on by the new stresses I was enduring, I realized I had to GET OUT. And get out, I did. My health was at stake.
Small company, niche market (2016-2017)
I am with a small development shop in Tampa that produces a Linux network-access-controller server appliance deployed to over 200 educational and corporate campus. It integrates with RADIUS, Active Directory, a bunch of routers and switches (Juniper, CISCO, Aruba, Exinda, etc), and even IDS (Intruder Detection Systems). There is still a little too much Java in the current stack for my taste. But fortunately, they are open-minded to changing a lot of that as the product evolved to “da cloud”, and there are lots of low-level details to master in all the things it integrates with.