Linux Experience

Here’s a link to my resumé.

I am pretty fanatical about Linux.

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 AT&T System V (running on an NCR 486 system).
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.
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).

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!

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 (yes, THIS site!) During this time, I built a modest webhosting business on a few Redhat 6.x systems. I 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. 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). I found work at my current employer. They liked me enough to roll me over from contractor to employee in November 2001, and I’ve been there ever since (13+ years now). I’ve worked on 5 or 6 projects there, learning a lot about the cellular/wireless/landline industries.

	My current project is really ambitious: over four years ago, we started collecting hundreds of millions of daily telephonic roaming records, summarizing them every 15, 60 and 1440 minutes, and displaying them in a web browser via a Flash/Flex GUI. Since late 2010, we have repeated this process 7 or 8 times now, each time for a different wireless protocol, 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. We're now over a billion rows a day for a few of these data streams.

	I have never been a fan of Adobe Flash, because of Adobe's dismal Linux support over the yeras. 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. Now, lo-and-behold, the users don't like Flash because Apple won't distribute it on the iPads. This year (Q2 2014), we evaluated several ways to support desktop and mobile browsers, had some competing proof-of-concepts. The effort that showed the most promise is HTML5 and Javascript via the AngularJS framework.

	I continue to do extra projects. I still do a bit of webhosting, but this time on small VMs instead of dedicated hardware boxes. I 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)

	In summary, I am always reading, listening, toying, and working with software technologies. I do this to keep my skills sharp, my options open, and to make sure I never get bored, stale or complacent.