I started my trek into the world of computing as a junior at Kearsley High School in Flint, Michigan, when Kearsley began to offer a class in Computer Science. My junior year was the second year the course was offered and a friend of mine, Jeff Lawrence, who had taken it the first year recommended it to me. I took Jeff's advice and I have never regretted it.
My junior year, we worked on teletype machines connected to a Hewlett-Packard mini-computer at the Genesee Area Skill Center in Flint, Michigan. But, in my senior year, Kearsley put in four Apple II+ microcomputers (pictured at right). I was no longer in the computer science class at my school, but, the Apple computers were available to all students who were interested. I was interested.
Translating from the flavor of BASIC I had learned the previous year to AppleSoft BASIC was no problem and I was writing programs for the Apple II+ in no time. Unsatisfied, however, I bought a book at Radio Shack about programming the Motorola 6502 microchip (the heart of the Apple II+) in machine language. I wrote programs to scramble keyboard input, to display the light spectrum of a given atom graphically, and a number of other neat things. When I graduated from high school, I passed that book along to Chuck Nicolai, in the class behind mine. Just out of high school, there was no way I could afford my own computer.
Nor could I afford to pay to go to college. So, inspired by my uncle, Teddy Semidey, who served with distinction in the Korean War, I joined the Marine Corps, with the idea that I would serve my country, accumulate money for college and learn a skill I could profit from after I got out. The Marine Corps trained me as a Computer Operator (MOS 4034). At the Computer Sciences School at the Marine Corps Development and Education Center, Quantico, Virginia, I was instructed in the proper way to load tapes into tape drives, cards into card readers and punches and paper into printers. This was not what I had in mind when I joined the Corps.
But, in its infinite wisdom, the Marine Corps stationed me with Detachment "B", Second Force Service Support Group, Marine Corps Air Station, Beaufort, South Carolina, where there were no IBM mainframes, or associated printers, readers, punches or tape drives. There was only an IBM 4956 Series/1 minicomputer and its cousin, the IBM 4110 "Green Machine" (pictured on the left), which was specifically designed for use by the Marine Corps. Back then, IBM used to supply a complete set of manuals for all its computers and the manuals shipped with the Series/1 were the best I have ever seen!
With the help of another computer operator, Corporal Kevin Burgess, who had been ordered to MCAS, Beaufort, as well, the glorious manuals provided by IBM and the source code to most of the EDX (Event Driven Executive operating system) utilities also provided courtesy of IBM, I learned the Event Driven Language, or "EDL" and earned the secondary specialty of EDL Programmer (MOS 4066).
As an EDL Programmer, I wrote systems for our unit to manage confidential messages and determine when they should be destroyed, to recalculate the time lost by a Marine who went away without leave from the Marine Corps and a number of other applications and single programs. I wrote a program which would suspend the line feed on the printer, so that it could execute the carriage-return and reprint part of the printed line, which had the effect of highlighting the text. And, I wrote several other little utilities which did similar types of things. The Marine Corps awarded me the Navy Achievement Medal for the work I did as an EDL Programmer and meritoriously promoted me to Corporal.
In 1985, I went to the Naval Academy Preparatory School at the Naval Education and Training Center, Newport, Rhode Island. I spent a year at "NAPS" away from computers. Then, after graduating from NAPS, I was appointed to the U.S. Naval Academy in the class of 1990. I did not do all that well academically at Navy and I was dismissed from the Academy in May, 1989.
It had been nearly four years since I worked professionally as a computer programmer. But, I thought I knew everything there was to know about the IBM Series/1. In August, 1989, I started with the Handleman Company, in Troy, Michigan. At Handleman, I learned of Series/1 capabilities I had not even dreamed of in the Marine Corps. The Series/1 had an indexed file utility called $IAM which allowed storage and indexing of important company data. I also learned to use the $IMAGE utility, which allowed the programmer to format "protected" and "data" areas on the screen to control user input into programs. And, I learned how to use the true multitasking capabilities of the Series/1 to speed up processing of my programs. I also learned how to write in Series/1 Assembly Language, using the $S1ASM compiler. I wrote code in EDL to print data coded with QMS Magnum V, coded for the C.Itoh Ion Deposition printer and in Esselte Meto's Kodescript for its LIS 1120 tag and label printer.
I truly loved the Series/1, but, in 1988, IBM discontinued the Series/1 line and support of it. By the mid-1990's, Series/1 programmers and positions requiring them were becoming scarce. I had to find another specialty.
During my time at the Handleman Company, I also picked up the C programming language. I purchased and read The C Programming Language (see at right), which gave me a solid foundation in the C language. But, the requirements at Handleman for my Series/1 skills and the company's skepticism about the value of C limited my opportunity to enhance my skill in the language. I needed to find a position somewhere where I would be paid for the skill I had on the Series/1, but, which would allow me to enhance my newly-acquired skills in C.
That opportunity presented itself in the early Spring of 1994, when a former co-worker, John Farrell, called me up from his new position as a consultant at Ford Motor Company and asked whether I would be interested in joining his team at the Ford Parts Redistribution Center in Brownstown Township, Michigan. In March, I signed up with Comprehensive Data Processing, of Detroit, to become a consultant at Ford's PRC. The project was to rewrite a scanning system used in the warehouse at the PRC which was on the aging Series/1's into C on an IBM RS/6000 running AIX and an Oracle 7 database. We worked with Datatrend, from Minnetonka, Minnesota, who had a code translator which converted EDL code into C, and $IAM calls into Oracle SQL statements. Farrell and I were there to validate the code and make any changes which needed to be made to correct any deficiencies in the C code generated by Datatrend's code translator. I started at Ford in June, 1994. The project launched without a hitch on April Fools' Day, 1995.
By the end of the Summer, 1995, however, life at the PRC was becoming somewhat boring. While I had been at Ford, Kmart made headlines two weeks before Christmas, 1994, when they let go some 900 people from their World Headquarters in Troy. The following Spring, Kmart employees who had not been let go started finding new jobs, leaving Kmart shorthanded. I asked my recruiter, Ken Jarema, of KForce, to see what he could find for me at Kmart.
Ken came through and found a contract-to-hire position for me with Kmart Pharmacy at a substantially higher rate than I was getting at Ford. With the Ford experience under my belt, I took my newly mastered skills to the Kmart Corporation. I figured at the time that I would just stay with Kmart long enough to be decent, then find something better after a couple years. But, believe it, or not, Kmart turned out to be a really great place to work! At the Handleman Company, the pace was very fast and it was hard to catch one's breath. On the opposite end of the spectrum, change at Ford was very nearly impossible and very frustrating. At Kmart, things did not happen at break-neck speed, but, they did happen. And, there was a smorgasbord of platforms and applications to keep any programmer satisfied and interested for years. It kept me interested. I worked on five different projects during my ten years at Kmart and I gained experience in Informix, 4GL, Visual Basic 4, AIX, SunOS/Solaris, HPUX, DB2 (for AIX and the Mainframe), MQSeries, TIBCO, Tivoli Access Manager and much, much more. But, most importantly, I learned Java and HTML.
I started with Kmart on the Pharmacy system. My responsibility was, primarily, to keep the Pharmacy Host systems up and running for the Pharmacy department at the Kmart World Headquarters. These systems were IBM RS/6000's, there were three. They were used to run a packaged pharmacy system called PDX. But, as PDX lacked certain required functionality in its initial version, Kmart programmers wrote programs around PDX in C and in Korn shell script. There were several problems with the systems as they were set up when I arrived. For one, there were three systems and only one of them was being used, at all, the others sat idle most of the time, while the one being used was always overworked. Second, the custom system supporting PDX created tons of logfiles which were hidden in several different directories and which were constantly filling up all the filesystems. Third, and most dangerously, PDX had originally been installed as belonging to user "root". This meant that, in order for users to modify files used by PDX, they had to also be user "root". Every user on all of the PDX systems was "root".
In the Marine Corps, they taught us that the first step to save a life was to "stop the bleeding". I isolated all the locations where logfiles were being hidden on the Pharmacy systems and I wrote a program in C and a Korn shell script to invoke it which would eliminate files after a period of time specified on the command line. That solved the problem of disk space for the rest of the time I was on Pharmacy.
The second life saving step is "start the breathing". Using NFS, I spread the load of PDX across all three boxes with the third being a hot-backup of the other two and able to pop into service if either of the other two went offline. That took care of the performance issues.
Finally, "treat for shock". I created a new user, "pdx", and a group with the same name. All files used by the PDX application were changed so that they were owned by "pdx". Then, I revoked every user id on the systems and reissued everyone a new, unique user id. The oddball case here was a group of people who had to have the authority to "kill" each other's programs. I assigned them each unique id's, but, each with the same id number. To the system, while each user had his own directory and password, these users all looked like the same user and could kill each other's processes.
I also modified most of the Korn shell scripts in the custom system supporting PDX to send me emails periodically with important system status information. I monitored my email and kept myself apprised of all the events which occurred on my systems. Of course, again, my life started to get a little boring.
After two years on Pharmacy, I asked my boss, Dennis McMichael, whether he would mind if I moved to another project. He graciously agreed and helped me set up an interview with my prospective new boss, Tammy Hall, on Grocery. Grocery was to migrate their host system from an RPG system on an IBM AS/400 to a system written in C, using Informix on an IBM RS/6000. This project never took off, though. It was sidelined and I moved to another project.
In July, 1998, I moved to the Kmart Solutions project, which was an attempt to expand the product offering at Kmart stores without expanding the actual floor space. The hope was that Kmart could offer sheds, playscapes, appliances, a more comprehensive music catalog, furniture and other stuff, through an in-the-store web application, for which the customer could pay at a regular cash register. My job was to take the orders placed and forward them to the companies who would fulfill them. Some of those companies accepted orders in EDI format; some accepted their orders by email; some could only accept orders as facsimiles. I had just learned Java 1.1 and this was the first application I ever wrote in it. In the end, the application I wrote forwarded orders for Kmart Solutions and the Kmart.com website, both of which used IBM's Net.Commerce package.
Initially, the Kmart Solutions system would print out a sheet of paper upon which the "web" portion of the customer's order was printed and a specific cash register had to be used to cash the customer out. This meant that, if the customer purchased other merchandise, they had to check out twice. My first CGI (Common Gateway Interface) program was written in C and it automatically transferred the customer's web order to Kmart's retail pricing system so that it was available from any cash register and could be rung up along with the customer's other purchases.
I rode out the dreaded Y2K at Kmart. Kmart cruised through Y2K with no problems.
From Kmart Solutions, I moved to the Outbound Management System project, or "OMS". The purpose of OMS was to more effectively load trucks at Kmart distribution centers so that we could reduce the overall cost of shipping merchandise to our stores. This meant packing trucks with the maximum amount of material allowable by the physical capacity of the truck and the weight allowed by law. Also, OMS was designed to produce the most efficient route for a truck to take from the distribution center to each store for which it carried merchandise. My part of this very complex system was to allocate stock in the distribution center to particular orders based on the priority of the order and the amount of merchandise in stock. OMS was written in Java 1.2 with an Informix database.
While I was on OMS, I got to experience Kmart's bankruptcy from inside. I saw a lot of really good people escorted out the door. And, the shortage of money inside meant there was not a lot of programming to do. I wrote some small, but useful, web reports to help stores track shipments incoming from the distribution centers, and to help the pricing people monitor price performance at stores. But, aside from that, there was not much to do.
In the Summer of 2005, I received a call from a recruiter, Angela Miracle of The Judge Group, asking whether I would be interested in a Java Developer position at DaimlerChrysler. I figured, "Why not?" I interviewed and was offered the position. I left Kmart after nearly ten years, most of which had been pretty good, and accepted a consultant position through The Judge Group with DaimlerChrysler. My primary responsibilities at DaimlerChrysler were those of what DCX called a Departmental Information Administrator, or "DIA". This, basically, meant desktop support for the people in my department. I also got to write an application in Java for IBM's WebSphere, which accepted environmental chemical usage information in Microsoft Excel spreadsheets, loaded that data into DB2, then produced reports, including graphical flowcharts, which were stored as PDF's. The application was called "SARA", after the EPA's Superfund Amendments and Reauthorization Act which defined reporting for waste flow through DCX facilities. I used Apache's POI to read the spreadsheets, Apache's FOP to render the PDF's and the PJAToolkit to create the graphics on the mainframe. It was a fascinating project.
I left DaimlerChrysler and Judge on September 8, 2006, and started a new permanent position with Internet Security Systems on September 11, 2006. I can barely call myself an "ISS-er", because, on October 24, 2006, ISS was acquired by IBM, making me an IBM-er. At the time, I thought, "How lucky am I?" I had no degree. I could not have scored an interview with Big Blue had I submitted my resume to them. Yet, here I was, having been with ISS just over a month, being inducted into the legendary computer giant, IBM.
The first assignment I was given for IBM was to create a Java proxy to interface between the IBM/ISS Customer Portal and an IIS server running the SightMax chat server. I wrote a Java Servlet which acted as the conduit between ISS customers and ISS support personnel via SightMax. If you utilize the chat client on the ISS Customer Portal to this day, you are using my code.
My next major assignment was a Java batch application which ran twice daily and collected configuration and security policy information from ISS customer security devices, including ISS RealSecure and Proventia A, G and M devices, Cisco ASA, FWSM, PIX and other devices, Juniper, Fortigate, Websense and many other types of security devices. There were four basic methods of information retrieval from all devices. The first, the simplest, was simply to collect a precreated file from a device and store it locally. The second, was to execute a command remotely which produced a set of files and displays the list of those file names, collect the listed files and store them remotely in special directories based upon their file names and the device type. The third was to execute a set of commands remotely, return all the output from those commands, then compare that output to a predefined set of regular expressions and store only the output which matches.
During my time on the ISS team at IBM we decided to follow the Extreme Programming () paradigm, including Agile development, Test-Driven Development and monitoring the health of our codebase with Continuous Integration. I set up continuous integration servers using Hudson, Bamboo and JetBrains TeamCity. Ultimately, despite the fact that we developed using JetBrains IntelliJ IDEA, we found that Bamboo worked best for us.
I designed and we used a set of scripts which I wrote in Apache Ant to build and deploy our various projects to their various servers, in development, QA and production. I also put together the design for our Linux servers to ensure when they were built, they had the software necessary to have the application targeted to run on them in place before deployment.
Throughout my career, I always worked for companies whose core business was something other than writing software: retail, automotive, military. Software was always a "necessary evil" required to support the people the company really loved... those on the front lines in its core business. I always dreamed of the day I would work for a company whose core business was software. Then, suddenly, I was with IBM. It should have been a dream come true.
Unfortunately, in March, 2010, I was informed that my time with IBM was to end. IBM provided a generous severence and an entire month of notice, so that I could transition my responsibilities to my replacement and search for another job.
My time with IBM was not without benefit. I learned two new skills which were extremely helpful in my search for a new job: Agile (SCRUM) and Test-Driven Development. All the positions for which I interviewed were seeking J2EE programmers with experience in Agile and TDD. Also, I had lots of hands-on experience with Spring and MySQL (professionally).
I sat back and took a sigh of relief. I contemplated my coming vacation on unemployment with a sense of gratitude. IBM gave me a full month's notice that I was to be terminated. I used that time to get a jump on finding a new job... not an easy task in Michigan, circa 2010. But, I thought I would start with Monster.com.
I loaded my resume into Monster.com and, within a week, I had calls from a dozen companies. The first was Candace Debczak, of Arrow Strategies. Candace aggressively pushed to get me interviews with several companies. In the end, I was offered a contract position with Blue Cross Blue Shield of Michigan through Arrow. I started April 12, meaning I was only unemployed for seven work days. Of course, those days were no vacation.
At Blue Cross Blue Shield of Michigan, or, "BCBSM", I returned to the WebSphere platform and the Struts framework with which I had become familiar at Kmart and DCX. We also used LDAP and a mainframe DB2 database. The development tool was now called Rational Application Developer, or "RAD". BCBSM had changed prescription drug providers to Medco and had to have a way to provide prescription copay information to Medco so that Medco could accurately bill both BCBSM and the customer. With Shobana Vincent acting as the development lead and running interference for me with our management and our customers, I designed and wrote the entire customer interface. We were originally supposed to launch in September, 2010. We launched in July, 2010.
The application was called the Automated Group Load, or "AGL". It was euphemistically referred to as "AGLlite", because much of the desired ultimate functionality had to be pared away to meet the aggressive schedule. Additionally, the customers were not certain what functionality they would require, because they did not know, fully, what information Medco would require. The ultimate goal was to eventually create a "FullAGL". As time passed and the requirements became clear, FullAGL, as originally designed, was scrapped and a new project was started to implement the changes necessary, now that the customer understood the final requirements from Medco.
That project was called "HybridAGL". Starting with what began as AGLlite, we added all the required new functionality and refined the original functionality to better suit our customers' needs. We were ready to launch on schedule in July, 2011. But, due to circumstances in other parts of the HybridAGL project, the launch was postponed repeatedly until it actually went live in January, 2012. It was a success! I was not there to witness the success of HybridAGL. I left BCBSM and Arrow Strategies in October, 2011 and began working at Ford Motor Company, again, this time with Ciber.
With IBM's Rational Software Architect, or "RSA", and data analytics in Java 1.8 we wrote a system to estimate parts demand for vehicles still under development. The estimates generated are used to negotiate with third party parts suppliers to line them up for when the vehicle is ready for production and sale in the marketplace. This work included an implementation of Multi-Valued Decision Diagrams, or MDD's; weighted order technique, using IBM/Ilog CPlex; and, an implementation of convex hull theory. The majority of the processing was run on Ford's High-Performance Computing environment.