One of my first projects using the C programming language was writing a program that would calculate the speeds in each gear for a Porsche, given the tire size and the gear ratios. If the torque curve was entered (Porsches of that era — mid–1980's — would have this in the owners manual), then the best shift points were also calculated. Finally, if the coefficient of drag and the cross-sectional area are known (also could be found in the owner's manual), then the theoretical top speed of the car is calculated.
This code was later rewritten as a Java applet. The illustration above is the Java applet user interface.
Latest Update: This code was again rewritten as a web application in HTML, CSS, JavaScript and PHP. You can see the new version here.
A good friend of mine owned a foreign car repair shop specializing in Porsche and Ferrari. When the PC became a viable small business computer, he asked me if I could write a program that would help him manage his repair tickets. This was probably the most lucrative of my projects, because we traded programming hours for labor hours. It's really the only thing that allowed me to have, at one time, 3 Porsches, two of which were extensively modifed for racing.
Although written for the old DOS operating system, the program was fairly sophisticated. It used a database management system, Btrieve, that was not only relational, but had a transaction function that allowed for program and hardware failures, ensuring that a failure did not result in a database corruption problem. Other features made it simple to use for those less familiar with computers, such as phonetic name lookup using soundex encoding as an index (to allow misspellings to still find a name), inventory control and reporting, ability to look up tickets by customer name or car VIN (so the work done on a car by a previous owner could be retrieved), etc.
A second version added networking capability (Btrieve already supported network database access and control). My friend was able to have three computers at his shop, one for writing and closing tickets, one for managing the parts inventory, and one for accounting. Although I included the ability to configure the shop name in anticipation of perhaps trying to offer this commercially, it was a gray area for me since I was working for IBM at the time, and wasn't sure of the how they would view one of their employees selling software on the side.
My most ambitious coding was developing an integrated car event timing program. Prior to this, a separate timing clock was used to record the lap times of cars, with a maximum of two cars on the course at a time. The operator not only had to make sure the timer was set to the correct clock as the car crossed the finish line, but then had to read the clock display (in less than ideal outdoor lighting) and write down the score or read it out loud to a second person who would write it down. This human intervention had a lot of potential for mistakes, from misreading the clock to writing down the wrong time.
I stumbled across a program written by another IBMer that utilized a timing chip in the PC to provide accuracy up to 840 nanoseconds. The normal PC clock was only accurate to about 1/18 of a second, which was insufficient for timing events to the nearest millisecond. Using the actual timing chip allowed us the accuracy we needed, because the chip counted down from 65,535 in that 1/18 of a second, so by reading the computer clock and the number in the chip at the moment the car crossed the finish line, the desired accuracy was obtainable.
Next, we needed a way to alert the timing program that a car had crossed the start/finish line. Working with another club member who provided his mechanical engineering skills, and an electrical engineer he knew, we devised a box that used a laser light, reflected by a precision mirror, that tied in to the serial port of the computer. When the laser light was interrupted, the electronics in the box, cabled to the serial port, generated a signal that would then cause the program to record the exact time the signal was received. The only human interaction was to record in the program the car number that had just generated the interrupt, which was the only point of possible error.
The program would print out a timing label, which could then be posted onto a scoreboard, thus also eliminating a second possible human error of writng the wrong score on the board.
The system was then enhanced by combining it with a dBase program that handled the registration and classification of the cars, feeding the valid car numbers into the timing program. At the end of the event, the program sorted the times by the best time for each car, and produced the results for the event.
Another enhancement was made to allow for timing at our track events, since the laser box was powerful enough to send a beam across the track. Instead of only two cars, the system could handle up to 20 timing events. The timer was set up near the entrance to turn 1 at Texas World Speedway, where most cars would be getting into a single file; the only problem with this setup was that two cars could cross the beam at the same time, so that only one time would be recorded. Since these events were not strictly competitive, the lap times recorded were for information only. A log of each crossing was kept, and the timing personnel would only have to record the order of the cars as they crossed the beam, and then call up the list of events and associate a car number with each one. Since the cars were fairly spread out around the track, this was usually no problem. The program would then calculate the lap time for a car if it had previously tripped the timer, or start a lap if it hadn't. There was no set number of laps a car could run, since the program ran a continuous log of lap times.
A client wanted to start a web-based image enhancement business using his pre press experience and Photoshop training skills. The complete solution involved the use of a MySQL database to manage the images as they progressed through the process of uploading by the client's customer, downloading for manipulation, uploading results, and tracking payments made using PayPal or other means. A web service for image conversion was also incorporated in the site as well as Google Adsense advertising as a means to enhance the revenue generated by the site.
A small business in the vending machine industry wanted a web site to promote itself and provide information to potential customers about the goods and services it offered, without spending a lot of money. They also wanted the site to be maintainable by its own employees once the initial website was completed. NetObjects Fusion, a visual website design and HTML generation tool, was used to address the low-cost and user-update requirements.