Friday, January 30, 2009

The Virtual Handbrake

This story is dedicated to all the developers who have found themselves in a situation where they have set something in motion that they desperately wish they could stop...

When I was a kid, I used to think that computers were good at arithmetic and logic. It turns out that computers are horrible at numbers. They can't round, don't understand that 1.9999999999999 is effectively equal to 2, can't handle floating point without a human holding their hand. And LOGIC? Not on your life. They are exceptional at doing what you tell them - and not doing anything you forget to tell them. They seem to have a secret, perverse delight in doing the most illogical thing in response to your instructions. If you gave half the detail to a human they'd feel that you were patronizing them, but a computer will get it wrong every time.

The one thing they have working for them, is that if you can give them instructions that are clear and complete enough, they will do the most mundane things at absolutely inhuman speed. Things that would cause a human to die of boredom just thinking of doing, they seem to delight in eating up and spitting out in almost no time at all.

Every once in a while their greatest weakness combines with their greatest strength. Then things go really bad! There is nothing like the feeling you get when you've typed in the name of your latest program to fix the database, and after a moment of trepidation you hit the Enter key. Only to see a stream of error messages scrolling up the screen.

You frantically pound the Break key but nothing happens, finally you turn the terminal's power off and on in hopes of resetting your session and stopping the nearly-as-fast-as-light carnage! It's a moment like that that you really wish your computer had a virtual handbrake. Something that you could run to an pull (or push) and make it all stop!

I knew someone who used to tell a story about an airline reservation software system that they had. A pilot was working on a terminal, using a word processor program. With this program, you would hit a function key to save your document, and a prompt would come up saying "OK to save (Y/N)?" and you would hit the letter 'Y'. Your document would save and the message "Saved" would show on the status bar. If you happened to hit the wrong function key, it would prompt you with "OK to delete (Y/N)?" and if you happened to hit the letter 'Y', your document vanished without a trace, the status bar said "Deleted", and you got to repeat the last hour's work.

Well, one day a pilot managed to hit the wrong key, and the very moment that he hit the letter 'Y', he realized what he had done. Airline pilots have great reflexes. This guy was no exception. Without missing a beat, his hands flew from the keyboard to the cable on the back of his terminal, that connected it to the server. He yanked the cable off. As he was doing this, the man of might was rising up from his seat and attracted the attention of the entire office as he sprinted madly to the computer room. In there, he dove to the back of the computer to catch the other end of his cable and yank it off the server before his instructions could reach it.

Somehow the fact that the word "Deleted" was on his status bar didn't tip him to the fact that he hadn't been fast enough. I give him an 'A' for effort, though!

Oh! For a virtual Handbrake!

The Computer Mouse and the Specimen Agitator

This is an example of how a customer thought outside the box to solve a problem.

We sell an ODBC driver for legacy Multivalued databases, and we had a customer who was doing HIV testing in the Seattle area, about the mid-1990s, when a different company was selling these products (at that time it was Liberty Integration Software. My current company, FusionWare, now sells these.)

The customer was using MS Query (came with Excel) to download some information into a spreadsheet. The report ran through a huge database file on their multivalue system, that took a long time to query (several hours). But for some reason, the report wouldn't complete. The customer cancelled it and restarted it several times, then they noticed something strange.

MS Query used to display the ODBC globe, which looked like a globe of the world, in the top right corner, and much like IE does with the stylized "e" it displays, when MS Query was downloading data, the world would turn.

Well, the report would run for a few minutes, then the world would stop turning. The customer noticed that if he touched any keys on the keyboard or moved the mouse, that the world would turn again for a few minutes. Somehow, the MS Query applet was getting stuck until something hit the message queue for the applet.

It turned out that this was a known bug with certain combinations of MS Query and associated ODBC and Jet components.

What to do now? The customer was a busy man and didn't have the time to sit there moving the mouse while the report finished - this would take hours!

Then he had a brainstorm! He took a specimen agitator. This is a bit like a miniature version of the things that shake up the paint cans at your local hardware store, except that it was intended to shake up blood samples, or other samples, possibly mixed with other chemicals in a test-tube.

Well, he put the mouse in the specimen agitator, turned it on, and left it running until the report completed.

The customer thought he should send Bill Gates one of these specimen agitators.

I never cease to be amazed at the ingenuity of some of my customers!