Why Borland trashed its spreadsheet
Finds hidden meaning
Myths and legends Always remember, the compiler is your friend. Programming is stressful but no matter how many f**ks and b***ocks you might occasionally feel the need to insert into the comments, the compiler will always strip them out. It's great.
Of course, it doesn't actually go looking for rude words. So it would be a mistake to use them haphazardly. But that's OK because programmers who work for large, well-established companies would never make that mistake.
Let me take you back to September 1992, when "collaboration" software was known as productivity software, ISVs wrestled with the decision of whether to support a relatively new thing called Windows from Microsoft, and when Borland Software shipped the mighty Quattro Pro for Windows version 1.0.
As one of the first Windows-based spreadsheets, Quattro Pro - since sold to Corel and now part of WordPerfect Office - was a fabulous product, way ahead of its time. Certainly ahead of Microsoft's then-young Excel and Office.
It featured multiple pages and right-click access to a properties menu, both of which are common features now but were staggeringly innovative then. It also, predictably, had a button bar but even this had a twist: it was fully customizable and you could create your own. Each new button bar was stored as a file on disk so if you created a bar called Penguin, for example, a file called PENGUIN.BAR appeared.
This was in the days of the change over from DOS to Windows, so it was still common to use the DOS prompt as well as the GUI. One of the commands available in DOS is "Type", which displays on screen the typeable characters in any file. Now there was no good reason to "Type" one of the .BAR files but, if you did so, the name of the file appeared - so it must have been embedded into the file header - followed by an assortment of random characters.
Borland supplied several sample button bars with arty names like PICASSO.BAR and MONET.BAR and also one called SECOND.BAR. The latter name seemed like an odd choice beside its artistic brethren so, in a moment of boredom, I "Typed" it. Instead of the expected SECOND appearing, the characters "FUCKME" appeared. I was shocked. No, that doesn't really cover it: I was traumatised.
At the time I was completing a review of the product and had been in daily contact with the UK product manager, the charming and unflappable Frances Reay (now Fawcett). I rang her immediately to share the trauma.
Mark Whitehorn: Hi, Frances, do you happen to have Quattro Pro installed?
Frances Reay: Of course, what else would you expect from the product manager?
MW: OK, would you do me a favour and pop down to DOS for a moment?
(Clattering of fingers on keyboard heard down the phone).
FR: OK, I'm there.
MW: Can you swap to the QPW directory?
(More clattering of fingers).
MW: Now "Type" SECOND.BAR.
(Even more clattering of fingers, followed by a long pause).
FW: Well now, that's interesting.
MW: Does your screen say what mine says?
FR: More than likely. I suppose I'd better make some calls.
I may have been the first to report this to Borland, but I certainly wasn't alone in discovering it. Before I could publish the story in a magazine (the long defunct PC User) the news was rapidly spreading via email.
Frances passed the news on to Borland US with the result that the production lines in Ireland and the States were shut down and, as I was later told, Borland had to trash all those boxed copies that hadn't escaped the warehouses. Early copies of 1.0 instantly became collector's items.
Ah, such happy days, but that kind of thing could never happen now, of course.
Oh, wait a minute.®
And then she went to work for Canon :-).
It was quite funny to see Francis show up again when I worked for [xxx] - I had indeed met her before at Borland as I used to use a lot of Turbo Pascal and Paradox PAL (their database and it's coding language). I had managed to make their first Bubblejet printer (I think it was a BJ 130) to do what they said it couldn't do at all:
(1) I was printing labels. That wasn't a big deal because it was a matter of checking if the rollers were where I needed them to stop the labels 'uncurl' whilst the tractor feed pulled them through.
(2) I was going through an ink cartridge in 2 weeks or so - they were supposed to last about 1 month or more, but that's explained by the next line..
(3) .. I was printing barcodes with it. The silly thing was used to test barcoded stock labelling so we could speed up stock takes (I was heavily into barcodes those days, and used my own barcode printing code to drive that printer), it worked so well after I coded it all together that we just left it until it broke down..
(4) .. which it never did. I did this for over a year with this printer (i.e. I was operating it absolutely MILES out of spec) and as far as I know it never failed once. I kid you not, NOT ONCE. Same head, heaps of ink cartridges, almost 2 hours/day printing. Not a single failure.
That's when Canon showed up in the form of Francis Reay, I can believe they wanted to check this for themselves. I think we'd been talking about them about the capabilities of the new model and when they found out just what we were doing they had to come and see that for themselves :-).
I have VERY fond memories of my first (Canon) bubblejet - it was a relief after years of ZZZZZZZZZZZZZZZT ZZZZZZZZZZZZZZZt ZZZZZZZZZZZZZt dot matrix printing. I once actually tortured a Star printer to death with making it print a solid A4 page of black - the head overheated and it died spectacularly by trying to execute a carriage return with two pins seized and sticking out. The ribbon disagreed with that idea (as the pins went through the ribbon at that point) and the whole assembly more or less shot out of the printer, taking out head, ribbon and cassette, lid and scraping the rubber roll. Wow :-).
In came the bubblejet. Whisperquiet and super fast. Wonderful.
BTW, I think Borland should receive credit for their 'license as a book' concept. The idea was that Borland had no problem with software duplication as long as you treated it as a book: i.e. only one person could use it at a time. That meant it was quite OK to have a copy at work, one at home and another archive copy as long as it was just you who used it. I found that personally about the bestm enad easiest explained license policy ever. This crap with serial numbers and online activation irritates the hell out of me.
When I got to the above place we had two people typing in VAX stocklists every week for sending components to suppliers. Yes, that's right, two man weeks plus the time to sort out typos. - every month. A hack on the VAX (custom report), a kermit download and some crafty Turbo Pascal, Paradox and Quattro work later and the whole thing took 15 minutes, and was as accurate as the stock report on the VAX. Which wasn't, but that's a different story.
Anyway, enough nostalgia. Back to work..
mark, it is time to forgive
QPW was certainly the best of its time. But the biggest problem out the gate wasn't the contents of the files, but the BOX itself. For it said "WinDOS" on it, the initial release being a bundle of Quattro Pro for Windows (Win) and the original Quattro Pro for DOS (DOS).
Some retailers such as Fry's didn't know that "WinDOS" meant Windows & DOS, and filed QPW away in some dark corner of the store. Similarly, customers did not know what "WinDOS" was, but to a person they were sure it wasn't DOS and it wasn't Windows. Needless to say this did not help matters. So the box got reprinted.
Which brings the story 'round. Sometimes the drama of the small stage unfolds under the dark sky of a greater mystery.
In any case, it is time for you to forgive the Borland artisans for whom, minor profanity or not, Quattro Pro for Windows was a labor of love.
"Again Jesus said[to the disciples], "Peace be with you! As the Father has sent me, I am sending you." And with that he breathed on them and said, "Receive the Holy Source. If you forgive anyone his sins, they are forgiven; if you do not forgive them, they are not forgiven." (John 20:21-23)
F**kin error messages
Ah, profanity in code. I remember my Compilers and Compilers 2 courses; by the time I was in Compilers 2, I had forgot most of my code, and built the code generation phase on top of the year-old codebase.
Imagine my face when I find something along the lines of:
case 'A': // accept symbol, fuckin' A!!!
(loose translation from Spanish, the original Spanish phrase was a little bit more offensive)
Which was on plain view for my teacher. And the rest of the class, as it was on the projector. Oops.
Recently, a small change on an existing app caused a bug that triggered one of those "can't get here" logger messages. The reaction from users was amusing, as this message was:
"Error 666: HELP! THE MACHINES HAVE RISEN! RUN TO THE HILLS! RUN FOR YOUR LIFE!"
Ok, that's what happens when you mix Terminator with Iron Maiden. I wonder if my other apps have shown "If you can read this, your system is stoned" messages...