Here’s one from Chrome:
Cute icon! Funny phrase! I guess those are supposed to distract us from the total uselessness of the error message.
A while back I happened upon a “defensive omnivore bingo” card at veganporn, I then found the original, a revised version, a more artistic version, a feminist version, and many reposts.
As an exercise for learning Jquery, I wrote a javascript enabled version which picks random statements from a long list including ones from the versions above and some of my own. I started to add answers to some of the statements in popups. You can even place chips on the squares (by clicking), but the “bingo” is entirely anti-climactic. I actually started writing this months ago, but I just worked out a couple of annoying bugs. Feel free to send me any suggestions for additional statements and/or answers.
Back in 1992 or so I was writing an email-based trouble-ticket system which tried to match up incoming emails to existing trouble-tickets by looking at the In-Reply-To: email header. Much to my chagrin, I found that a few email programs did not add this header when replying to messages. So I had to add a set of kludges to hook together tasks that were mistakenly broken by such email messages, and some subject-line shenanigans to allow tasks to be manually specified.
Well, in those days, email was a new thing, and so some amount of ignorance was understandable. 20 years later, we have managed to add those couple of lines of code into every email program, right? Such hope is misplaced. While wrestling to get threading to work properly in Thunderbird, I find that it is still a problem! Viz, “The bad news is that not all e-mail clients actually generate these message headers.” Now we aren’t talking about some ancient text-based email programs (ironically, they all got it right back in 1992, it was the Mac which was broken), the example given in the next sentence is Yahoo!
While, I know, first hand, about dealing with these sort of broken email threads, it is sad that Thunderbird cannot get it right; none of the semi-hidden settings allow it to join together the multitude of broken email threads in my inbox.
The key to working with computers, it seems, is lowering your expectations.
I got this error, which definitely wins the quantity over quality prize:
23:56:50,545 [main] INFO historyLogger:84 - EXCEPTION CAUGHT: org.polarion.svnimporter.ccprovider.CCException: java.io.IOException: No space left on device
at org.polarion.svnimporter.ccprovider.internal.CCContentRetriever.getContent(CCContentRetriever.java:94)
at org.polarion.svnimporter.svnprovider.internal.actions.SvnAddFile.calculateLengthAndChecksum(SvnAddFile.java:104)
at org.polarion.svnimporter.svnprovider.internal.actions.SvnAddFile.dump(SvnAddFile.java:83)
at org.polarion.svnimporter.svnprovider.internal.SvnRevision.dump(SvnRevision.java:127)
at org.polarion.svnimporter.svnprovider.SvnDump.dump(SvnDump.java:191)
at org.polarion.svnimporter.main.Main.saveDump(Main.java:221)
at org.polarion.svnimporter.main.Main.run(Main.java:91)
at org.polarion.svnimporter.main.Main.main(Main.java:49)
Caused by: java.io.IOException: No space left on device
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at org.polarion.svnimporter.common.Util.copy(Util.java:303)
at org.polarion.svnimporter.common.FileCache.put(FileCache.java:72)
at org.polarion.svnimporter.common.FileCache.put(FileCache.java:87)
at org.polarion.svnimporter.ccprovider.internal.CCContentRetriever.getContent(CCContentRetriever.java:90)
at org.polarion.svnimporter.svnprovider.internal.actions.SvnAddFile.calculateLengthAndChecksum(SvnAddFile.java:104)
at org.polarion.svnimporter.svnprovider.internal.actions.SvnAddFile.dump(SvnAddFile.java:83)
at org.polarion.svnimporter.svnprovider.internal.SvnRevision.dump(SvnRevision.java:127)
at org.polarion.svnimporter.svnprovider.SvnDump.dump(SvnDump.java:191)
at org.polarion.svnimporter.main.Main.saveDump(Main.java:221)
at org.polarion.svnimporter.main.Main.run(Main.java:91)
at org.polarion.svnimporter.main.Main.main(Main.java:49)
So, after that deluge of “information”, all I know that I ran out of space on a filesystem. Which filesystem, you ask? If they told us that would ruin the fun of this guessing game!
The stack trace is a nice touch, since it provides little useful information, like what parameters were being passed, etc. I used to display stack traces like this for my own programs, but have stopped doing so as they didn’t provide as much information as a well-written error message. This stack trace is much like driving directions which consist solely of the phrases “turn right” and “turn left”, but no street names, distances or landmarks. Largely useless.
I’m sitting in a doctor’s waiting room looking at a diet/nutrition magazine, which really seems to be a “how much meat and cheese can we squeeze in and still be healthy” sort of magazine. I just ran into the “special diets bookshelf” section and see a vegan cookbook listed. The reviewer says
… with dozens of recipes each proving that “lactose free,” “ethical” and “environmentally sustainable” are not synonymous with boring or difficult.
If readers weren’t thinking that being a vegan was boring or difficult before they read that, they are now. Everyone knows that doing ethical or environmentally sustainable things must always take a back seat to taste. However, if a chef cannot make an interesting or flavorful vegan dish, they are incompetent. Any moron can throw a slab of flesh onto a plate and and have a flavorful meal. Many do.
My comment about ex-vegans in a previous post was, apparently, ahead of its time. Recently, a couple of newly ex-vegans have blogged about their experiences, and while there have been a number of good responses, including this, this, this and this. I wanted to address a different angle.
I have run into several ex-vegans (or ex-vegetarians) over the years and have recently started to think of them more as “born again meat eaters”. Like the stereotypical born again Christian, they hang onto a pile of partly-understood rationalizations for what they are doing, believe they have discovered absolute truth, and won’t shut up.
But a recent posting from an ex-vegan has shown that I forgot something: a religious experience. Here are some excerpts (emphasis added):
My first bite of meat after 3.5 years of veganism … I just ate, and ate, and ate. I cried in grief and anger, while moaning with pleasure and joy. … my face felt warm, my mind peaceful, and my stomach full but….I searched for a word to describe how it felt….comfortable. I had only eaten a small piece of cow flesh, and yet I felt totally full, but light and refreshed all at once. … How beautiful it felt to be able to eat the exact thing that for so long my body had been begging for. I felt profoundly joyful in finally listening to the wisdom of my body. What a revelation.
She didn’t eat a steak, she saw Jesus! But the miracle continues!
Then I noticed something else odd: my heart was beating slowly, steadily. … my heart was in perfect shape. … Now after eating a single piece of steak, my heart thudded on, steady, strong, and slow. It made me cry all over again, this time in joy.
I am healed! Praise the Lord! Amen and pass the butter!
Thunderbird popped this one up one day:
I cannot remember the context, but then I shouldn’t have to! So, basically some unspecified operation failed, for an unknown reason. It’s nice they mentioned the network connection didn’t get cleaned up, though it’s rather useless information since I don’t know what should be done about it, let alone what the impact is. As a programmer I can guess that the dangling network connection is just a minor adminstrative detail which will get cleaned up on the next reboot. But I can imagine my mother getting this error message and being worried that viruses or spammers are going to sneak onto her computer this way.
There is a fine line between being user friendly and treating people like morons. It is apparent that some programmers think that users cannot be presented with meaningful details of error situations as it will scare or intimidate them. This crosses the line and is simply insulting. Case in point (from Google Chrome):
Wow, that’s terribly uninformative. In this case, I am trying to debug a mod_rewrite configuration (a Sisyphean task, to be sure) and I did figure out how to dig in and see the real error message, which distills down to this:
<span style="font-family: Georgia, 'Bitstream Charter', serif; color: #444444;"><span style="line-height: 22px;">404 Not Found -- The requested URL /cgi-bin/w.pl was not found on this server.</span></span>
Let’s think about this from a different context, if I was getting a bug reported against my web site, which error message would I prefer to be provided? The former would be utterly useless, and I would have to go back to the person and have them do a “view source” so I could see the real error message. It would have been trivial to include the error message from the server verbatim and there’s no valid reason to exclude it, except, perhaps, to keep from scaring them :)
Some years ago I ran into a piece of code which shocked me, and in the time since then I have realized that it exemplified a lot of what is wrong with software. Sadly, I have since lost the code, so here is an approximation:
unless (open(F, "/some/important/file"))
{
# We don't want to scare the users with an error message
# warn "Unable to read config file";
}
Am I the only one who is outraged by this? What is scarier to a user, to get an error message when a genuine error situation occurred or let the software plod on getting even stranger and more non-sensical errors which cascade from this initial problem? For example, imagine the following code further on:
my $req = $http->request($config->{url});
die "Unable to contact web server $config->{url}\n" unless $req;
The config structure was empty because it could not be read due to the earlier problem, so the error message simply says “Unable to contact web server”. So now you are led to believe that the problem is with some unspecified web server. How much time will you waste trying to track that down?
So which is worse, “scared” or confused and frustrated?
To kick off my error message “hall of shame” series, I thought I should share my all-time favorite. I got this one many years ago, I was minding my own business and suddenly this pops up in the middle of my screen:
I did not have the presence of mind to take a screenshot back then, so this is “faked” from memory, but all the essentials are here: An empty title bar, so I have no idea which program generated the error, the “unknown error” deepens the mystery and the “ok” button serves as a cruel, taunting punchline.
I never figured out which program issued this error, everything seemed to continue normally. Great mysteries, indeed.
The Oct 9th issue of New Scientist had an article titled “Eating Skippy?” written by a now, former vegetarian about the merits of eating the flesh of Kangaroos.
I like to think of former vegetarians (and vegans) more as “born-again meat eaters”. Like some born-again Christians, they often hang onto a pile of partly-understood rationalizations for what they are doing, believe they have discovered absolute truth, and won’t shut up.
Fortunately the author of this article doesn’t seem to be one of these. Her article seems to be pretty compelling, but in the end it shows that if you do something for the wrong reason, it won’t stick.
There are a number of reasons one might become vegan: for health benefits, for reducing environmental impacts, to imitate a celebrity (that’s what PETA counts on), for animal welfare or for animal rights. The problem is that all reasons except the last one are arguable, and only a few rationalizations from vanishing.
The article does show that Kangaroos consume less water and food and produce fewer greenhouse gasses than other animals. Oops! there goes the environmental arguments. She also shows that flesh is more healthy than that of other animals. There goes the health reasons.
Kangaroos are very easily stressed, and that stress ruins the taste of their flesh. Therefore they can’t be confined and must be free-range; they can only be hunted in the most stealthy manner, which means they know nothing of their fate until the moment the bullet enters their skull. And there goes the animal welfare reasons.
The article does mention “animal rights” at a few points, but, as is so often the case, it ends up confused with “animal welfare”. Here are the two mentions of “animal rights”: “Many animal rights groups remain opposed to kangaroo harvesting, saying it is cruel…” and “Animal rights groups, such as Australia’s Voiceless, say any orphaned young at foot will starve to death.” This shows that most groups which use the phrase “animal rights” are really welfarist groups. And, while I don’t know if the author intended this, these statements are strawmem: by using the phrase “animal rights” but then bringing up welfare concerns, which are easily dealt with (q.v.), the implication is that the animal rights concerns can be dismissed.
But the animal rights argument is straightforward: Kangaroos are sentient beings and we have no right to kill them. But that wouldn’t fill four pages of a magazine, now would it?
There’s an old joke told many years ago by those who didn’t like Unix:
Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the numerous idiot lights which plague the modern driver. Rather, if the driver makes any mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver”, he says, “will usually know what’s wrong.”
I’m sure the early versions of ed inspired this. Though in those days, when every byte counted, a certain level of terseness was understandable. And the software was simple enough that there were a limited number of things which could be going wrong.
But now our computers are orders of magnitude bigger and more complicated. We have layer upon layer of drivers, libraries and applications, which nobody can understand in their entirety. And we still have a giant “?” lighting up on our dashboard. The combination of sloppy (or nonexistent) error handling and poor error reporting, means that we all encounter incomprehensible or meaningless out-of-context error messages on a regular basis. Increasingly, I feel that this is the key problem with computers these days: we expend much of our time, energy and morale to the struggle of figuring out what the latest incomprehensible error message means.
Therefore, I will be devoting some time here to cataloging terrible error messages I run into and some of the bad programming practices that lead to them. I thought I should provide some warning (and context) before I vent my spleen.
I just migrated this site to Laughing Squid’s new cloud hosting and upgraded WordPress. I’ve been hoping to get this blog going again, as I have a bunch of rants bottled up, but it has been a very busy year: My daughter just turned two, we moved across the country last year and the house has needed a lot of work.
I debated setting up separate blogs for the different topics of concern to me, but I figured that’s just too much work, so there will be an odd mix of topics here including: veganism (from an abolitionist viewpoint), bicycling, gardening and various computer programming topics.
Considering this is my first post pretty much since my daughter was born, I’m sure I’m talking to an empty room. That’s ok, I’m used to it. But this post at least will explain the long gap and the change in focus.
Since there isn’t much traffic on 124th Avenue and it doesn’t generally go anywhere useful, Bellevue decided to put a bike lane on it. That isn’t quite fair. There numerous houses in that neighborhood, so if you live there and are commuting into downtown here’s the baffling situation which will greet you as you approach 8th Street. Rather than do something logical, like put up a sign that says “bike lane ends” and simply stop the lane marker, they chose to instead force cyclists towards the curb, twice! Since the bike lane marker doesn’t end properly, car drivers get no indication that they may actually need to expect bicyclists to merge with traffic in order to get to the intersection with 8th St, so they zoom right past blissfully ignorant of your plight. So really, this bike lane translates to “get off the road”, but that title would get monotonous.
NE 8th Street is pretty frightful place to ride, with the worst part being the I-405 overpass which I generally call a “wrongful death lawsuit waiting to happen”. Fortunately for the inevitable victims, Overlake Hospital is right next door. But once you get to the other side of the freeway there are fragments of bike lane! One helpfully appears on the westbound side at 120th Ave, right as you begin scaling a steep hill. But once you get to the top, around 123rd, the bike lane gradually loses about 1 foot of its width, which means you’re just a hair’s breadth away from the Mercedes SUVs piloted (to use the term very loosely) by the gesticulating, bluetooth enabled maniacs.
Something tells me that with my bike buckets and produce box (see photo), I’m wider than that lane. Retreat to the sidewalk!
Our oh so brief sojourn down 106th Ave comes to an abrupt end at 4th Street. Of course it isn’t enough to simply bring the bike lane to an end, but to re-assert the God-given supremacy of the automobile. Rather than just paint the line straight to the crosswalk, they swerve the line over, squeezing cyclists and making it rather hard to continue up 106th Ave. The implication is that you should instead, turn right… though watch out for the Hummer taking advantage of those extra couple of inches to accommodate their bulk as they proceed around the corner.
As we labor up the hill on 106th Ave NE, towards 4th street we are presented with this odd situation: for no readily apparent reason, the bike lane briefly shrinks to about 1 foot wide, and then back again. I suddenly remember yoga class. Inhale! Hold! Exhale!