My favourite error message
My "favourite" error message of all time is VAX Basic's "103: Program lost - Sorry" from the '80s. No explanation of why it was lost or what to do next other than punch the screen but a nice little apology at the end.
Please accept our apologies. We had a technical which slowed down our response times. Run that by me again. You had "a technical"? What does that mean? When I saw this pop up in response to an almost-forgotten issue I had logged earlier in the week, I naturally assumed a word was missing after "a technical". But which word? A …
My most memorable error message was on CP-6 and was followed by a system crash:
"You can't get here."
When we called support, the support engineer didn't believe us. Fortunately, upstairs in the director's conference room were several Honeywell-Bull development staff, onsite for a demo of their newfangled RDBMS. My boss, the head system administrator, took the elevator to the 3rd floor and returned with JJ and put him on the phone to confirm the error message to the credulous support engineer.
Between the two of them, they were able to determine that it was caused by a hardware problem but I can no longer recall any specifics beyond it being a DMA error on an IO channel.
I have screenshots of funny unhelpful errors like the classic "An error as occurred", the plain no-nonsense "Error", and the mildly disturbing empty error box, just with an "OK" button on it.
One of my favourite ones states that "The trust relationship between this workstation and the primary domain has been lost" - might they need couples counselling?
Maybe I have too much time on my hands :)
"I have screenshots of funny unhelpful errors like the classic "An error as occurred", the plain no-nonsense "Error", and the mildly disturbing empty error box, just with an "OK" button on it."
TRS-80 Level I BASIC error messages:
HOW?
WHAT?
SORRY
Still, that's better than Window 10 with it's:
:-( Something went wrong
Progress? We've heard of it.
I remember one time when someone I was playing golf with asked if there was a urinal nearby. Queue lots of bemused looks from everyone else.
This is why you should be cautious picking up stray golf balls, especially if you've found them near shrubbery or the base of a tree :)
Naah, it's Dilbert who's wrong there. Price is determined by supply and demand, and the crude oli market is a commodity market; the price is pretty much exactly the same for all transactions. Dilbert's demand is shifted to some other provider, but replaced by the same amount of demand from someone else who previously would have bought from the provider Dilbert shifted away from. He's just shuffling deck chairs.
A couple that always amuse me
"An Unexpected Error Has Occurred" Apparently some errors were expected, but not this one
RRAS in Windows Server could be asked for an "Unreachability Reason" if a site-to-site VPN didn't connect (which is spectacular language in itself) but the most common response was "The destination server could not be reached because the host was unreachable"
Not "expected" perhaps but "anticipated" - why do you think programming languages have error trapping and handling built in?
I try to handle every possible error the protoplasm between the keyboard and chair can come up with but sometimes their capacity to fuck up exceeds even my expectations, then the error handling falls through to "Unexpected Error" and shows whatever cryptic message the error trap generated.
When writing a time-sharing system I had to handle EVERY error. No exceptions. Disk errors, address out-of-bounds errors, etc. Many errors could just be reported back to the user but some couldn't: power failing in 160 usec, permanent dist error on allocation table. Still something had to be done.
"anticipating every possible mistake they can make is not really possible."
Some people try. But the only way to even partially succeed is to make the input and options so limited that you quickly find the system no longer works as intended because of the innumerable edge case you forgot about.
> It's possible to anticipate every possible error
If that was true, why do programs ever have bugs? Why didn't the developer simply anticipate them?
No, for any slightly complex program it's definitely not possible to anticipate each error, it would require its developer(s) to be omniscient, short of that there is no chance to anticipate all the possible interactions between input, hardware and internal workings. That's why you normally have beta testers, who try to spot the most easily triggered bugs.
This post has been deleted by its author
While I haven't seen that one, I have seen "Are you sure you want to cancel? Continue/Cancel". I had a fun argument over what each button was supposed to do.
The answer in this case was that cancel canceled the cancellation and continue continued the cancellation but didn't work, giving you a new box with a cancel button and a progress indicator that never moved. Clicking that cancel button, which should theoretically have canceled the continuation of the continued cancellation didn't do anything, which was probably for the best as the confirmation box for that would likely have been recursively confusing.
Which is why my dialogue boxes look something like this:
--------------------------------
Changes have been made:
Press 'OK' to save and exit
Press 'No' to exit without saving
Press 'Cancel' to resume
[OK] [No] [Cancel]
-------------------------------
There's plenty of space - explain what each button does.
Yes I know most users don't read them and just press whatever button seems like a good idea but if it's explained it's 100% down to them.
I would prefer longer labels. Having a button labeled "No" is confusing when there's no "Yes". You have explained what they're for in the message, which at least avoids ambiguity, but it still looks weird. You could put labels on the buttons that clearly indicate what they do: "Save and exit", "Discard changes", "Continue editing [or whatever they're doing]".
So it shouldn't say Yes/No/Cancel, it should say Quit without saving/Save and Quit/Continue editing. A quesion should never give prompts that are not the actual verbs the selection will perform.
Correct functionality: link
The options ****MUST**** be the ACTUAL ACTIONS that will be performed. Anything else requires the application of a clue-by-four.
This is a consequence of using the wrong early implementation of Pascal. UCSD Pascal would have taken you back into the editor at the point where the error was detected. After growing up on batch runs of FORTRAN* this was a mind-blowing revaluation. Even more mind-blowing was the fact that it would also do this for assembler.
* For added fun once the compiler had been thrown off track by the first error it would consider most following lines as being in error even if they weren't so there would be pages of error messages of which only the first was necessarily true - although some of the others might have been.
COBOL did exactly the same.
I remember once in my first work in a bank's IT department a room filled with 90+ developers, typing silently (as silently as those wonderful keyboards allowed us to be) when suddenly we hear a really loud and prolonged "Fuuuuck!"
Everyone turns to the new guy, who's turning bright red by then.
His compilation had just produced over 4000 errors and he thought he'd have to rewrite his program from scratch... I think he was as embarrassed about his loud expletive as for the public explanation he got from our manager about the error count.
From then on we would hear, day in day off, someone muttering the prolonged fuuuuck whenever something was awkward, had really gone awry, or just because.
The COBAL class I took graded you on how many times you complied a program (something like start at 100%, drop 10% each time). The way to get 100% was to note the first error then reboot the PC before it completed, fix that error, then try again.
I'd forgotten about that, caused much swearing when we were sitting Higher Computing and had to write programs in Turbo Pascal. Made things so much easier when I went to Uni and the text editors were designed for coding and matched parentheses and recognised comments etc.
My most recent experience with something like that was during a GPO refresh. I was adding corporate bookmarks to Edge and Chrome, which is done via JSON. However the JSON needs to be on a single line for the GPO, which is entirely unreadable (at least to me) so I was using Notepad++ with a plugin to verify the formatting and then truncate it to a single line. The version of the plugin I downloaded at first was putting spaces in places they shouldn't be and causing the GPO to fail to parse the JSON string.
No you just went outside instead and did something more interesting like poking an insect with a stick.
With Atari basic once you typed a line in that was it, there was no going back and editing it, and after diligently typing hundreds of lines from a magazine, checking each one as you went, it was extremely frustrating to find out there was an error in the listing.
The only thing worse was when it did actually run and you realised it was total crap anyway.
I owned several Atari computers back in the day (400, 800, and 800XL). While it's true that you couldn't edit a line of code, you could just re-type the line. Atari Basic was line numbered back then, and if the line number matched an existing line, it would be replaced by the "new" line. You could edit the current line before pressing enter ("Return" on the Atari, if I remember correctly), also.
Funny thing is, at the time you just did it because it was how it worked.
I had Ataris and I can't remember ever being fazed by the editing at the time. It was just what it was. It wasn't like you had to type a program(me) right first time or you had to start over or anything. You could still overwrite a line as needed.
I can't even remember the specific point at which any system I was using switched to producing editable source code files. I can remember that they did, of course, but I don't recall seeing it as being anything other than just different to what it was like before.
One thing I do know is that back then my typing when coding was a lot more accurate than it is now. With hindsight, maybe that was because it needed to be. Nowadays, error messages do tend - overall - to be more helpful than they were back in the day. You even get to understand how obscure ones often relate to the same error even if they don't specifically point it out.
When I used to write PHP, it used to drive me mad that sometimes an error would point to one line (usually the T_VARIABLE if memory serves), when the actual syntax problem could be several scrolls down.
"I can't even remember the specific point at which any system I was using switched to producing editable source code files."
PET BASIC had a screen editor TRS-80 BASIC had a line edit, eg type EDIT 450 to edit that line. Not sure what Apple ][ BASIC did but it had an editor. All prior to Atari. But, of course, few people got to play with and learn about more than one brand so as you say, you used what you had and didn't know anything different, however good or bad it might be.
PRIMOS had a line editor spectacularly called ED, internally we had a more functional and friendly version called X.ED.
The command to go to the lats line the file was B, however, if you were already on the last line it would print an error message.
-----:B
Bad Bottom
Actually, I reported several typos to the magazines in question (with solutions) over the years, and solved various others for myself by analysing the syntax and the error messages (if any were given).
But there wasn't much you could do when the typesetters had missed out whole blocks of code when they paginated it. That was quite common to greater or lesser degrees - especially in longer listings. And they'd do it in blocks of data for PEEK and POKE.
I mean, when you think about it, if you have a working program(me), giving a complete and error-free listing of it ought not to introduce any new errors in itself. But send it to the printers to switch fonts and spread it across three or four dual-column pages, and... well, we know what used to happen. One word-wrap in the wrong place and the last line of PEEK/POKE data was gone.
"No, you learned to debug code."
Yes, especially in the early days of computer magazines before there were enough of any one particular brand for the magazines to specialise. There'd be programme listing for different computers. Not different versions of the same programme, but entirely different programmes, each for different computers in different version of BASIC, often based on different screen geometries. Trying to understand and then translate a CBM PET BASIC game to get it working on a TRS-80, and making it fit in a 64x16 screen instead of the intended 40x25 was...interesting and challenging. Oh, and different extended character sets too.
Ah, yes. Debugging program listings. Not with the Commodore 64 listings, those typically just did a few lines of setup POKE/PEEK magic and then a for loop POKEing in the hundreds of lines of DATA statements, with a SYS command at the end jumping into execution of the entered data.
[...]
1080 DATA 165,38,145,32,230,32,198,37,76,44,128,165,38,145,32,24
1100 DATA 165,32,101,37,133,32,230,34,165,34,197,35,208,200,230,35
[...]
After some years, the published DATA statements turned from comma separated values into character strings with no commas in between. Even more arcane to a 12 year old...
Typing those in pretty much made me give up on learning programming for several years, it seemed so impossibly tedious and non-creative work (not knowing about anything better).
Multi-line statements. Bright spark putting two statements on the same line.
If I want to write something for my own use these days I tend to use Lazarus. I find that if I make a typing error such as that it doesn't necessarily work out where it was and throws an error some way further down on a line which looks right but was wrong because it was trying to parse it in the wrong context.
Missing Semi-Colon at line 454
At least it told you where it is, SSRS rarely does that ,
SQL sprocs off set the line number by a certain amount to annoy you.
and SSIS errors are a F*****g nightmare!
When translated from complete gobbldygook to English (1st task), they are something about as helpful as:
"I didnt like something in that 20,000 row file I was reading and im not telling you what or where"
That sounds horribly accurate. There appear to be various regular stupidities in error messages:
The system knows exactly where the error is but the developer decided that this information is not something that the user should know.
The error message was written to describe the error, but only in a way that once you know what the error is, is the error message actually useful.
The developer couldn't be bothered to implement any error handling (because it requires thinking) and therefore just left everything to exceptions, including all the expected errors. As a result a user trying to open a locked file is responded to by informing them that the low level FileOpenEx function "did not have the correct parameter" or something equally useful.
"The error message was written to describe the error, but only in a way that once you know what the error is, is the error message actually useful."
I write error messages for myself! There is no other point to them, because if the user encounters an error message, all I get is an email "I got an error". No screenshot, no steps to reproduce, no nothing. Sometimes they don't even say which application it was.
In one of my courses on programming language design, the professor wrote several small languages which were designed to teach us how different programming languages would be designed if someone only knew lisp syntax, didn't mind lots of unclear reserved terms, and wasn't at all interested in not having people hate him. These small languages had canonical interpreters, and the students would first write some projects in those languages, and later would reimplement part of the interpreter. The canonical ones had very bad error messages. You'd never get a line or location reference, and as I recall there were a total of five possible messages: "Invalid syntax", "Invalid type", "Invalid value", "Code error" (this mostly meant stack overflow), and "Test failed").
When we were tasked with reimplementing these, we were graded on whether it could run proper code and reject erroneous code, but not on exact duplication. So I gave my versions proper error messages. This was mostly because, if I did it wrong, they were helpful in debugging. Still, I couldn't help but adding a message along these lines: "This is where [language name] would say invalid type, but since this is a proper one, your actual error is". I would remove that part before submission in case the professor saw it and didn't like it, but I got an approving comment from one of the graduate students who assisted them.
I was teaching C++ and a student was getting really weird error messages on code like:
switch(ch) {
case: '\' // handle /
{
// do something
}
case: '\' // handle \
{
//do something
}
etc.
The student was puzzled as were all of the TA's
But \ at the end of a line is deleted with the following new-line resulting in the following line also being commented out.
The resulting error messages were not helpful and pointed to a problem after the \.
Burroughs Algol on the 6700 would often say "^ semi-colon required" with the caret pointing at ";". Sometimes, adding a second semi-colon there worked (in the sense of allowing the program to compile, but not necessarily to run, and only rarely to do what was required.)
This is the price of a simple recursive-descent compiler for a language with nested syntax.
Python's much more entertaining - a missing or extra tab has a very high chance of being accepted, and your progran will do something, but probably not what you want.
...I could actually get an error message.
Trying to sort out a BACS submission file for an international bank, three times now I've sent a sample file and three times the response has been, "Rejected, please comply with the attached Implementation Guide and sample", accompanied by yet another copy of each but no indication of which record has actually failed, let alone the field in that record.
Last time that happened to me it was because the Relevement Inter-Bancaire showed all the various numbers helpfully grouped with spaces, my banks own examples showing that you can enter spaces but their software not accepting or auto-stripping spaces, resulting in "invalid input please try again". The most helpful bit is that you have to re-enter every single field all over again (instead of editing fields 1 at a time till you get rid of the error).
I am sure there are hundreds of thousands of brilliant coders out there, so why do banks always employ morons?
their software not accepting or auto-stripping spaces, resulting in "invalid input please try again"
This really grinds my gears
What sort of morons code these websites that say "Enter card number - no spaces"
They actually ask for your help formatting the input because they are apparently unable to remove spaces from a string??
Unless it's an AmEx card, so clowns who write validation code that assumes Visa 4x4 format will get failures.
It's as annoying as people that assume phone numbers only contain digits (no +) or have area codes, or postcodes are digit-only zipcodes. If you can't fully and correctly validate the format, don't try.
Add to that address formats that assume everyone lives in a city. Or that all street addresses have numbers rather than house names.
Ah - I think I've just realised something. A couple moved into a house opposite us and got its name changed to a number (15 greater than the previous highest number). Maybe they've been bitten by that one in the past.
Ah yes, addresses are almost as interesting as names.
If you are dealing with multinational addresses, things get really fun. Knowing the difference between a postal address (where the mail gets delivered) and a visiting address (where the office of the person you want to meet actually is). Delivering service to a an address which is "15.3 km along the road from City A to City B". Finding a building in Tokyo, where buildings in a small area are numbered in order of construction date. Having independent roads of the same name in the same postal district. Having house numbers restart from 1 again when a road crosses a county boundary. Using house names instead of numbers, giving no indication where on a road they might be.
FRANK'S COMPULSIVE GUIDE TO POSTAL ADDRESSES: Effective Addressing for International Mail
Stack Overflow: Best Practices for storing postal addresses in a database
Falsehoods programmers believe about addresses
Comments on the last one:
Oh god, the number of times I've had parcel services fail to turn up because "address missing or incomplete".
It's my name, the house name, the postal code (that covers one town and four communities) followed by the name of the community to help narrow it down.
Rejected without trying by some city twat that thinks the address needs seven lines to locate a place.
Step outside your comfort zone, get some cow shit on your shoes, and just be glad that my address isn't the way it's really known - Chez Bordereau - after somebody who lived here hundreds of years ago, maybe the original occupant?
I am impolite (but not sweary) when on the phone with the parcel companies because I happen to know that my address, as written, can be correctly located with Google Maps. Therefore it is entirely their uselessness that is wasting my time, and that's more or less exactly how I put it.
"a postal address (where the mail gets delivered) and a visiting address (where the office of the person you want to meet actually is)"
And that's only modern addresses. Historical addresses can have quite different concepts. Maybe you think that shouldn't be a problem. It is when you're dealing with genealogical S/W written by someone who thinks addresses were always like modern addresses in whatever country they live in (usually the USA).
What sort of morons code these websites that say "Enter card number - no spaces"
A slightly better class of morons than the morons who simply say "Enter card number" but don't tell you they don't accept spaces or do but treat them as valid characters and truncate the entered string at 16 characters.
Enter telephone number - no spaces.
But I don't remember my telephone number as a random string of 11 digits. I remember it as my-town, my-exchange, my-number.
Even worse: copy this random string of unpunctuated digits that somebody has given you into this box, making sure you don't lose your place as you glance from the string of digits to the screen/keyboard and back to the random string of unpunctiated digits. Was that three '7's or four '7's? And have I entered the fifth digit yet, or am I still on the fourth digit. And am I actually looking at the fourth digit when I am wanting to type the fourth digit, or have I ended up looking at the fifth digit?
A human resources site used by my former employer enforced case on the [i]username[/i] as well as on the password.
Only site I have ever found fhat did that. It was only after repeatedly trying and failing to log in, and requesting that my password be reset, that they reminded me of this fact.
My persistance (and query) paid off, as I foumd my final paycheck had shorted me of 2/3 of the amount due for my unused vacation time. A second check arrived remarkably quickly after I queried the amount. I'm still waiting for the apology.
/ anon because
// "trust, but verify", as a politician once said
/// three times, if necessary
enforced case on the [i]username[/i] as well as on the password.
A former employer used CheckPoint's SecuRemote for remote PC to site VPN access. That used case sensitivity on the username too. We used surnames as usernames which caused endless fun where some users insisted the first few letters of their usernames should be start with 'de' or 'van der' or 'Mc' followed by an uppercase and the rest in lowercase.
Worse than that if you were typing in a password that had a substring of uppercase letters and used the capslock it would throw up a useful warning that you'd turned on capslock - but then consume the next keystroke as acknowledgement of that warning, thus making the password wrong. That one took a hell of a long time to work out.
I always took this to mean:
Abort - Abort this attempt to read()/write() data
Retry - Retry reading/writing to this sector
Fail - Fail writing to this sector, and try a different sector
It makes sense for writing, but I dunno what "Fail" means in the context of reading a sector, can't just go read another sector...
It does mean your disk is fucked though :)
It was explained here recently what they actually mean - and Dabbs forgot "Ignore" :-D
https://www.theregister.com/2022/02/14/dave_plummer_abort_retry_fail/
Briefly, Abort terminates the whole process, Fail returns the error to the process - hoping it's able to handle it. With many languages without exception handling back then, and developers using the "it compiles! ship it" development model, it wasn't really assured.
It was mostly for I/O errors, but not all of them were about bad disks - you may have forgotten to close the disk read (as required by many 5 1/4 drivers), you may have set the read only tab, etc.
The problem being that:
If Abort terminates the process, you drop back to COMMAND.COM, which may well try to access the same drive and trigger the same error.
If Fail doesn't terminate the process, the application may ignore the failure, keep trying to access the same drive, and trigger the same error.
The way to get out of the loop, as I recall, was to Abort (to get back to COMMAND.COM) and then Fail (because COMMAND.COM did check the result and handle a failed read). You'd end up at a "Current drive is no longer valid>" prompt.
I think you mean "ON ERROR RESUME NEXT".
It got used due to VB's piss-poor error handling. Remember, there was no Try/Catch functionality back then.
Your only options were ON ERROR RESUME NEXT and ON ERROR GOTO -label-. Notice its GOTO not GOSUB. So, you got dumped into your error handler code with no idea where (in code) your error occurred, and no way to RETURN back to the next line of code. And, you had to build this error handler into each Sub/Function.
If you didn't use ON ERROR RESUME NEXT, the best you could do was to clean up whatever you can, attempt to display some kind of useful error message, and dump out of the Sub/Function.
My favorite was that to cancel error handling altogether, you used "ON ERROR GOTO 0"
For example, if your code has to make an IP connection to something:
On Error Resume Next
- code for making an IP connection -
- check the connection status -
On Error Goto 0
...
In this case there is a difference, and it signifies the enormous difference between Windows 3.0 and 3.1 when it comes to memory management as Windows 3.1 used "protected mode" and Windows 3.0 used "real mode".
General Protection Fault is where an application tried to access (usually write) to memory which it is not permitted to access. This requires an MMU to register the memory assigned to a process.
Unrecoverable Application Error was slightly different as it's an after the fact error where one process has just written on the memory space that another process was using and as a result the process has crapped itself. Likely because another process overwrote some part of the in-memory code.
That's my memory of the difference anyway!
In this case there is a difference, and it signifies the enormous difference between Windows 3.0 and 3.1 when it comes to memory management as Windows 3.1 used "protected mode" and Windows 3.0 used "real mode".
Windows 3.0 had three operating modes - Real, Standard and 386 Enhanced. 3.1 dropped support for Real mode but it was hardly ever used even there because of its limitations. The only reason to use it at all would be on XTs and systems with under 1Mb memory.
And yes, Windows on either class of system was just as painful as it sounds.
This post has been deleted by its author
...is when you get an error code/number/message and you go to the vendor's site(or Google) and it cannot be found anywhere.
If that code has come, up someone must have put it there and at least have an inkling of why it has been generated.
MS I'm looking at you in particular!
Once, I spent half a day trying to recover pictures for a friend of a friend on a foobared HDD.
Windows would only say "Read error" and drop the ball.
I booted my Linux gaming system with this HDD attached and proceeded to cp -r the whole pictures folder to an USB stick.
I had the time to read all *very* precise kernel messages explaining "inode X pointing to a non-readable sector" etc ...
But I did recover many pictures :)
Linux devs are a lot less lazy at error msgs than most others ...
I remember triggering the BDOS ERR ON A: when trying out a friend's CP/M machine. My personal computer experience started with 86-DOS/MS-DOS, so didn't get to enjoy the BDOS ERR messages at home.
Would like to know how many El Reg readers have actually encountered the BDOS ERR message.
The Alderson loop.
The only way out was to kill the program (which may have required a three finger salute).
Two of my memorable ones
A required dll is missing
And
Redo from start
The required dll is from the windows 3 days and was just infuriating yes it is missing but what is missing…..
The redo from start is from a commodore vic20 and basically meant you typed a letter and it was expecting a number - confusing as hell to a 10 year old me.
That one makes me angry against the $^%* developer who wrote that one. May his/her arse itches and his/her arms be to short to scratch!
The "general error" with no further information is great too.
This website is old, but still relevant. Here you will find many examples of nice error messages.
In a previous life, a guy I used to work with, had done a stint with the developer of a popular AIX accounting package. He recounted the story of being called into his manager's office to be quizzed about a problem with one of the modules he'd written. Apparently one of their important customers had called the support line after his system had thrown a fit and dumped him out to the command line, with the accompanying error message "what the fuck are you doing in here?"
He never went into details about the fallout, but as he no longer worked there, we drew our own conclusions.
In Danish (at Uni) we thought "Nåh!" would have been better. Hard to translate, something like "Well..." combined with a sigh. I think in Portuguese "Pois" would do.
English may have more words than most languages but there still appear to be some missing.
Apologies in advance to our hard-working and under-appreciated sub-editor, but the urban myth I referred to in this week's column with respect to 'Invalid Syntax' concerned disabled people, not hypochondriac devs. The joke lies in the way you pronounce the inflection in the word 'invalid'.
Its not my joke, mind. It is an urban myth. I first heard about it in the 1990s on CIX. I wasn't aware there was another urban myth about the same error message concerning hypochondriac devs, hence the confusion.
I had a recent experience on the Crucial website. Having been a customer with them for years, I therefore had an account with them which had worked fine the last time I'd purchased something (probably about 18 months previously) and they'd been sending "news/offers" emails almost weekly to that address ever since. So, I was rather nonplussed when, upon entering my email address, I received the error message "Invalid email".
Now, to me, that meant that somehow, it had decided my email address was not formatted in a valid manner so I entered it manually (instead of pasting it in as normal) in case it was croaking on some hidden space/tab or whatever. No, what they actually meant to say was that they'd moved to a new (and, in my opinion, far crappier) back end system recently and had purged all accounts that hadn't ordered in the past few months and so had no record of that email address. I complained but I don't think the message got through that a message more like "Email address not found on our system" would have been far more appropriate.
Sigh...
An archive for shitty messages from the past? A now gone company called "Isis Information Architects" once built the "Interface Hall of Shame", which has a subsection on error messages. Here is a mirror of that page
https://www.ronaldbieber.de/Interface_Hall_of_Shame/
and the error messages subsection
https://www.ronaldbieber.de/Interface_Hall_of_Shame/error_messages.html
For example, a service on a banking website stops working and pops up a message that invites you to phone them instead; you comply and are put on hold while a recording of an overbearingly cheerful, slightly insane-sounding person says you can save time by going to the website.
Dear God yes. Although bettering that was a chat-bot this week that used a side-scrolling bank of images to make your choice of help topic.
In all honestly, I have given up on just about any support option offered, and instead rely on snotty Twitter posts to get customer support.
If you remember all of those error messages you likely also remember that there was a time when you could phone a company, talk to live person, and have problems resolved in minutes instead of sitting on Hold for a half hour.
I think I’ve posted this before (but I can’t find it).
Back in the pre-OS10 period, I think it was 7.5 or 7.6 the Mac would occasionally throw up this message (from memory so it may not be verbatim): The operation could not be completed because something deep has happened.
A reboot always cured it.
For example, a service on a banking website stops working and pops up a message that invites you to phone them instead; you comply and are put on hold while a recording of an overbearingly cheerful, slightly insane-sounding person says you can save time by going to the website.
If El Reg allowed screenshots I could give plenty of examples...
Sometimes explaining the error makes it more confusing:
IBM1298I E Characters in B3 literals must be 0-7.
In a B3 literal, each character must be either 0-7.
Some would require no explanation if they avoided tortuous double negatives:
IBM1333I E Non-asterisk array bounds are not permitted in GENERIC descriptions.
All array bounds in generic descriptions must be asterisks.
But too many "errors" are simply pushing back on the user the consequences of poor design choices. An obvious example is The operation can't be completed because the disk is full when attempting to delete files (a Mac issue, I believe) . It simply shouldn't be possible for this to occur.
Abort/Retry/Fail is another example of this - it's not the error message that's wrong, the read failure should simply have been reported back to the program and the OS should have kept out of the way.
With a little forethought, many of these errors are avoidable - and if the error doesn't occur you're saved the task of attempting to explain it.
>>An obvious example is The operation can't be completed because the disk is full when attempting to delete files (a Mac issue, I believe)
Almost certainly a Mac Issue.
The Mac FS was, in the past (dunno aboout now; pretty sure its ext3 or 4 or somesuch), notorious for poor decisions.
Two that spring to mind are lopsided binary trees (where half - or some large proportion - of the nodes were 0) and requiring a rewirte of the entire index when you do things like delete a file (so yes, you couldn't delete a file if the disk was too full because it needed space to write the new tree nodes)
There were, I am sure, other dleights that I am sure more knowledgeable greybeards than I will elucidate (unless memory of the cluster fuck has been erased by Friday lunctime pints...)
Speaking of which, its that time of the week so have one on me --->
Not just a Mac issue. Also available on Windows, up to and including 10 (may be as far as 11, I don’t have 11 and can’t test) and on various Linux distros, including Mint and Ubuntu. Typically a problem with the GUI, can be bypassed by using the command line. On Macs and Windows you can force immediate delete using the correct GUI command, you just had to know where to go to do it. Using the command line was faster.
Macs don’t do ex*. They do HFS, if very old, or HFS+, or APFS. I haven’t seen this error on APFS, but it was common on HFS and not rare on HFS+. Maybe Apple has fixed it. Given how long ago HFS was in use, I’m not betting on it. I suspect that it’ll be back.
I try to avoid the whole problem by just having a few tens of gigs of disk space. My current main Mac has about 400 GB free out of a TB, way more than enough to avoid the problem. My current main Windows box has over a TB free out of 2 TB, but that’s because I just pruned things back a bit. It’ll fill up again, it always does.
Macs now use APFS which they switched from HFS+ a few years ago as long as you're using an SSD. This switch was a source of several problems. Apple figured this was doable during an OS upgrade and didn't treat it as concerning. Some machines simply failed to switch, causing them not to boot at all. A full reinstallation was necessary. I had this happen to me and debugged it on a couple others as well. I figured that would be the last of it, and for a while, it was.
Then a friend who hadn't had that happened came to me looking for help clearing files from their disk as it was nearly full. I gave them the standard advice on finding caches or unneeded software and deleting it, but it wasn't working. When I finally ran manual tools to figure out what data could be purged safely, I found that, for some reason, Apple had converted this laptop to APFS successfully, kept a backup HFS+ copy of it all, and had been automatically cloning every operation from one to the other for years, halving the disk space available. I backed up everything, including a full image of the disks, and nuked that from orbit. It was the only way to be sure.
"so yes, you couldn't delete a file if the disk was too full because it needed space to write the new tree nodes"
I've never checked to see if Linux does this but old-style Unix would declare disk full to non-root programs with some margin left for root. I've appreciated that when an overnight job went rogue and filled up a partition with junk messages.
An obvious example is The operation can't be completed because the disk is full when attempting to delete files (a Mac issue, I believe) . It simply shouldn't be possible for this to occur.
Same with windows 10: disk too full on cheap thing with fixed SSD so try and do a factory reset to clear the crap off it. Could not be done due to disk being full!
I think that indicates the real source of the problem. I'm guessing here but would bet 20p that if you are at the command line when you DELete a file, it actually deletes it. If you are in the GUI, the file gets COPIED to Trash then deleted. That's why deleting a file results in loads of disk activity instead of a quick blip while the pointers are re-written. I'm guessing that since Apple also has Trash, the same happens.
For six months the website of The Spectator has refused to speak to me. Their help department is utterly useless. Their latest gem: "Please login with a new account and new email address". I have been telling them for six months that I cannot get their front page or login screen.
Many years ago while working on an internal library I had to write an error code to message handler. I came to one error that in theory was completely impossible to trigger. So went with 'Mr Beekle is a poo' which is an obscure quote from Terry Pratchett's Erik.
Anyway it turned out that there was a way for that code to be generated and one of our bemused customers sent an email asking what it meant..
..luckily all concerned thought it was funny.
Other PTerry error messages are available for such situations, such as "Out of Cheese Error".
I learned long ago (thankfully from observation and not from experience) not to even make code comments sweary or offensive (no matter how much you felt like it at the time), let alone error messages, or anything else that can show up in the UI. Especially if it's never meant to, as this pretty much guarantees that sooner or later it will.
Comments, too.
I damn near killed an idiot who insisted on commenting in Klingon, but only on bits of inline assembler embedded in C ... I wouldn't have cared, but the comments popped up during a surprise visit from the CEO with a couple clients in tow looking to see how their customized version of the code was coming along.
There's a well established pattern for useful error messages:
1) What went wrong
2) Why (identifying information for the developer to fix, if applicable)
3) What the user can do about it
For example:
"The database connection could not be made. SQL Server error 12345: Out of Cheese. Please contact product support. (OK)"
"Cannot save the document. Disk not found. Insert a disk in Drive A. (Retry)/(Cancel)"
and so on
Also, it's best to log unexpected errors, because the user will never relay the actual error message to you. They'll hit the OK button THEN call you. Having a log file on disk with the error details and stack trace is usually the most helpful thing when diagnosing a bug.
This post has been deleted by its author
I was thinking more generally.
Certainly as regards error messages long numerals or alphanumerics are seldom going to be reported correctly. I do wonder how such error messages come to be generated.
Does some development manager tell a team "You can have errot numbers 00000333387000000 to 00000333387999999" while someone else has 00000333388000000 to 00000333388999999?
Are they some sort of mapping? Is the code file given number 00323334, the functions within it numbers starting 0000 and the errors within the functions also given numbers starting 0000 with the error reported as the concatenation?
A better approach would be to use a What 3 Words approach and map them to a short phrase which might be memorable enough for the user to remember and easy to map back to where the error was found. "Out of cheese" might well be a better way.
But there are other issues. Take the situation where the user goes to close the application with unsaved work. There are instances in which the user may reasonably choose to do this, one being that they've made such a bollocks that the easiest thing is just to quit and start again and a prompt which confuses the user into the wrong choice is not helpful.
Another, mentioned here recently is the GIMP prompt about unsaved work. The real issue there is that GIMP's idea of saving is saving work in its own format even if the user used it to edit a JPEG and pnly wants to save the resulting JPEG. In this case the "Quit without saving" option is quite often the one to choose as the user has already opted for the Overwrite or Export options which are the only ones to save as a JPEG. A bit of thought about that would maybe have steered the developers into a unified save function in which .jpg and .xcf were equally valid choices.
Getting that short message unambiguous can be crucial. A notice at a level crossing saying "Wait here while light flash" sounds OK doesn't it? In Yorkshire dialect "while" and "till" can have opposite meanings than expected. "Wait here while lights are flashing" is better.
The file format thing is true in a lot of applications. They all do something like it. Libreoffice is, unfortunately, one of them. Yes, I know that the ODT format is nicer and open and all that, but this file is a docx and the user who sent it to me is expecting a docx back. Stop complaining that I'm going to use a format you already know. At least Libreoffice has that option. Some other word processors (Apple, this means you) won't allow you to save in anything but their own format and will pull up a dialogue if you try. For someone who has the habit of saving whenever I've completed part of something, this is very annoying.
When I die, and if I find out that I was wrong all along and there is an afterlife, and for some reason, I am sent to the non-fiery place, I should find that it is a place where specs are written that cover all eventualities, rather than the "golden path" through the software where nothing goes wrong.
In other words, specs are invariably written to say "The software will do X then Y then Z" and not "The software will attempt to do X, then check to see whether it was successful. If X is not available, a message in the following format will be displayed... If the memory limit is exceeded, this will be handled by writing the following state to a log file..."
The difference between a programmer and a developer, is that the programmer writes the 10% of the code to get the job done, and the developer writes the other 90% of the code to mop up after the first 10% when it goes wrong.
... if I get sent to the place where they write code, I'll tell 'em to fuck off and send me to the other place. I've done more than my fair share in this plane of existence.
A programmer writes code to make the hardware do what it is supposed to do.
A developer writes code that his management tells him to.
I've still not found a keyboard with an 'any' key.
But I do recall a problem in a CICS program. We had a report that the screen was stuck and just reloaded whatever the user pressed. There was a useful message, but it ended with "PF5 for Help"
(max 79 char message)
We had assumed that the user understood that PF5 was the function key. No. They typed in the literal PF5 and pressed Enter, which really twisted some knickers.
The Tandy TRS-80 Model 16 was a Frankenstein's monster of an 8-bit Z80 system mashed together with the bits of a 68000 Unix workstation. Under normal conditions, the Z80 was supposed to handle bootup and pass control to the much more powerfull 68k but occasionaly could attempt to assert control over the running system, whereupon the computer would declare 'Bring her up Scotty, she's sucking mud.'
Guru Meditation Error 0xFFFFFFFF
Still the best error message, with the best history. In very early days of Amiga Development, an addon called the "Joyboard" was being experimented with, including a game not unlike the Zen mode of Wii Fit. Failing to stay balanced was a game-over condition.
The game crashing while being tested lead to the Guru Meditation error sticking around into production.
Medhi Ali and the other morons that made up the Commodore board were such spoilsports dumbing the message down to a mere System Failure in later revisions of Kickstart. David Pleasance of Commodore UK has on many occasions expressed just how bad the parent org were...
Once upon a time, there was Eudora, a very popular email client.
On this memorable day, I had dropped a book on the keyboard and had a little chat with a collegue.
Imaging my surprised reaction when I returned to the error message:
There is no one listening to keystrokes currently, so you might as well stop typing.
Heh, thats GOOD programming, anticipating someone dropping a book and leaving it on the keyboard.
Never forgot an old one I used to see a decade ago. Something related to a COM+ component or some database.
"Task failed successfully"
Took a long, long time to "understand" what was going on (the task failed, and the operations needed to properly deal with this failure were successful), but for the common user it was a message at the same time amusing and excruciatingly irritating.
you lucky lucky lucky people
Down in robot village near the dawn of time (actually somewhere near the late '80s) a new series of computer controlled machines appeared
Looming over us mere mortals who dared to think that one day we might program them to do the work (instead of us actually doing anything.. remember... this was the government I 'worked' for)
Until one day, the machine refused to do anything... nothing.... just sat there..... cursing it did'nt work, rebooting it didn't work.... some suggested sacrificing a virgin to it but the 1st year apprentices ran away on hearing this.
Until someone noticed the main oil tank was low..... oil procured and deposited.. and lo... the machine awoke.
F'ing machine builders thought "No one is going to be dumb enough to let the machine run out of oil" and therefore didnt bother with an error message if it did....
Some of my faves:
Working with HP's Virtual Connect modules, I received the error "Some server error" when performing an update to the configuration. Opening a ticket with HP, there was a tedious back-and-forth about how I needed to provide the exact error message and that Virtual Connect Support did not assist with server issues.
A pair of cow-orkers had a conversation wherein one asked the other to "Create an Active Directory" on a server. The actual request was intended to be to add an Active Directory group to the server to grant access, but the recipient of the request chose to run "dcpromo" on the server to create a new Active Directory domain, completely failing to understand why this was entirely the wrong course of action on several levels. The recipient's admin rights to the server were duly revoked.
And, of course, no discussion of error messages would be complete without mentioning BeOS's haiku errors. Sadly, I think most of them have been lost in the mists of time, but here's an example:
Cables have been cut
Southwest of Northeast somewhere
We are not amused.
/me pours one out for BeOS.
Had difficulty with a particular card for pre-pay.
However, the only response was, and I kid you not, a page with "Something went wrong" overlaid on a picture of a fluffy cat holding a stick in it's mouth.
No card I had worked, so I ended up using a Tesco ATM.
Before dumping O2 and using an operator that could actually take my money.
Typical old-style 5-pin DIN-connected PC keyboards would not be detected if not already connected at bootup. Also risk of damaging <$something> if hot-plugged. PS/2 keyboards (or mice) rarely die if hotplugged in my experience, but still are not detected except at boot, unlike USB keyboards of course.
M.
> " not be detected if not already connected at bootup"
That's not my experience. Power-up, get error, plug-in, press F1, all was well on 99% of 8088-486 machines. Never blew the interface neither.
Of course today my PC is whining about my printer which has moved in with Schrödinger's cat.
This post has been deleted by its author
The Elliott 803 Algol Compiler only produced numeric error codes which had to be looked up on the manual.
My favorite one is "Error 49 : Program too large to complex to be compiled at all".
These days there would be an emoji at the end rather than the added "at all" for extra emphasis!
"Object reference not set to an instance of an object"
To be fair, it does mean what it says. You've tried to reference an object which doesn't exist, and also, to be fair to the C# language team, the newer nullability language features do make it a lot easier to notice when you are potentially handling a null object reference and try to make sure you handle it properly.
These days, you have to explicitly tell the compiler that you are always expecting to get an object reference that does exist, and to ignore this check (by inserting a precompiler directive, which you can hardly do by mistake), and in that case, if you do get a null reference, it is entirely, and absolutely, your own fault. They've even added lots of various shortcuts to null checking to make it less onerous for you.
Not an error, but one of my favorite prompts comes from early DOS:
PRESS ANY KEY TO FORMAT DRIVE C:
This happened if you typed "FORMAT" without specifying a target drive. It would by default format the drive you were currently logged to, and would give you that prompt.
I once accidentally typed FORMAT without specifying a drive and then froze, uncertain what to do. Because ESC is a key, after all, and so is any other key you might think might abort the process.
After a few moments' thought I unplugged the machine.
As for Yes / No / Cancel, sorry to ruin the joke, but it actually makes sense in at least one context: you try to exit a program without having first saved your work, and the computer asks if you want to save before you exit. "Yes" means yes, you want to save whatever changes or edits you've done and then exit. "No" means toss away the changes and leave the current file unmolested, but exit the program anyway. "Cancel" means on second thought, you've changed your mind and don't want to exit after all.
As for sharing my favorite errors, I'm afraid most of them are variations on the ones already mentioned, or are simply bad English translations ("No any drive exist"). The classic "hit any key to continue" for a missing keyboard is certainly one of my favorites, though.