The alternate story of the time one of my colleagues debugged a line-of-business application for a package delivery service


Some people objected to the length, the structure, the metaphors, the speculation, and fabrication. So let's say they were my editors. Here's what the article might have looked like, had I taken their recommendations. (Some recommendations were to text that was also recommended cut. I applied the recommendations before cutting; the cuts are in gray.) You tell me whether you like the original or the edited version.

Back in the days of Windows 95 development, one of my colleagues debugged a line-of-business application for a major delivery service. This was a program that the company gave to its top-tier high-volume customers, so that they could place and track their orders directly. And by directly, I mean that the program dialed the modem (since that was how computers communicated with each other back then) to contact the delivery service's mainframe (it was all mainframes back then) a computer at the delivery service and upload the new orders and download the status of existing orders.¹

[Length. The "top tier customer" part of the story is irrelevant.]
[Length. The mainframe part of the story is irrelevant.]
[Speculation. No proof that the computer being dialed is a mainframe. For all you know, it was an Apple ][ on the other end of the modem.]

Version 1.0 of the application had a notorious bug: Ninety days after you installed the program, it stopped working. They forgot to remove the beta expiration code. I guess that's why they have a version 1.01. It told you that the beta period has expired.

[Length. Version 1.0 is irrelevant.]
[Speculation. No proof that the beta expiration code was left by mistake. It could have been intentional, for whatever reason. Probably some nefarious reason.]

Anyway, the bug that my colleague investigated was that If you entered a particular type of order with a particular set of options in a particular way, then the application crashed your system. Setting up a copy of the application in order to replicate the problem was itself a bit of an ordeal, but that's a whole different story.

[Length. Retransition no longer necessary. The "setting up" story is irrelevant.]

Okay, the program is set up, and yup, it crashes exactly as described when run on Windows 95. Actually, it also crashes exactly as described when run on Windows 3.1. This is just plain an application bug.

[Length. Irrelevant.]

The initial crash

[Structure. Create heading (even though it gives away some of the story).]

Here's why it crashed: After the program dials up the mainframe to submit the order the order system, it tries to refresh the list of orders that have yet to be delivered a list box control. The code that does this assumes that the list of undelivered orders the list box control is the control with focus. But if you ask for labels to be printed, then the printing code changes focus in order to display the "Please place the label on the package exactly like this" dialog, under the specific circumstances, the control is no longer focus; as I recall, it was because a dialog box had appeared and changed focus, and as a result, the refresh code can't find the undelivered order list list box and crashes on a null pointer. (I'm totally making this up, by the way. The details of the scenario aren't important to the story.)

[Fabrication. All that is known is that there was a list box that lost focus to a dialog box.]

Okay, well, that's no big deal. A null pointer fault should just put up the Unrecoverable Application Error dialog box and close the program. Why does this particular null pointer fault crash the entire system?

[Embellishment.]

Recovering from the crash

[Structure. Create heading.]

The developers of the program saw that their refresh code sometimes crashed on a null pointer, and instead of fixing it by actually fixing the code so it could find the list of undelivered orders even if it didn't have focus, or fixing it by adding a null pointer check, they fixed it by adding a null pointer exception handler. (I wish to commend myself for resisting the urge to put the word fixed in quotation marks in that last sentence.) The program installed a null pointer exception handler.

[Speculation. No way of knowing that this was what the developers were thinking when they wrote the code.]

Now, 16-bit Windows didn't have structured exception handling. The only type of exception handler was a global exception handler, and this wasn't just global to the process. This was global to the entire system. Your exception handler was called for every exception everywhere. If you screwed it up, you screwed up the entire system. (I think you can see where this is going.)

[Embellishment.]

The developers of the program converted their global exception handler to a local one by going to every function that had a "We seem to crash on a null pointer and I don't know why" bug and making these changes: A few functions in the program took the following form:

extern jmp_buf caught;
extern BOOL trapExceptions;

void scaryFunction(...)
{
 if (setjmp(&caught)) return;
 trapExceptions = TRUE;
 ... body of function ...
 trapExceptions = FALSE;
}

Their global exception handler checks the trapExceptions global variable, and if it is TRUE, they set it back to FALSE and do a longjmp which sends control back to the start of the function, which detects that something bad must have happened and just returns out of the function.

[Speculation. No way of knowing that this was what the developers were thinking when they wrote the code. No proof that the code was first written without a global exception handler, and that the handler was added later. No proof that every such function set this variable. No proof that the reason for adding the setjmp was to protect against null pointer failures.]

Yes, things are kind of messed up as a result of this. Yes, there is a memory leak. But at least their application didn't crash.

[Embellishment.]

On the other hand, if the global variable is FALSE, because their application crashed in some other function that didn't have this special protection, or because some other totally unrelated application crashed, the global exception handler decided to exit the application by running around freeing all the DLLs and memory associated with their application.

Okay, so far so good, for certain values of good.

[Embellishment.]

Failed recovery

[Structure. Add heading here.]

These system-wide exception handlers had to be written in assembly code because they were dispatched with a very strange calling convention. But the developers of this application didn't write their system-wide exception handler in assembly language. Their application was written in MFC, so they just went to Visual C++ (as it was then known), clicked through some Add a Windows hook wizard, and got some generic HOOKPROC. (I don't know if Visual C++ actually had an Add a Windows hook wizard; they could just have copied the code from somewhere.) Nevermind that these system-wide exception handlers are not HOOKPROCs, so the function has the wrong prototype. What's more, the code they used marked the hook function as __loadds. This means that the function For whatever reason, the handler they installed saves the previous value of the DS register on entry, then changes the register to point to the application's data, and on exit, the function restores the previous value of DS.

[Speculation. No proof that the program was written with MFC in the Microsoft Visual C++ IDE. It could have been written with Notepad in assembly language that just happens to look like the assembly language generated by the Microsoft Visual C++ compiler when it compiles code written in MFC.]

The DS is a register on the x86 CPU that describes the data currently being operated upon. All that's important here is that the value in the DS register must always be valid, or the CPU will raise an exception.

[Need to explain the DS register in case the reader cannot infer this from the description that comes later. We have established that neither the author nor the reader is allowed to draw inferences.]

Okay, now we're about to enter the set piece at the end of the movie: Our hero's fear of spiders, his girlfriend's bad ankle from an old soccer injury, the executive toy on the villain's desk, and all the other tiny little clues dropped in the previous ninety minutes come together to form an enormous chain reaction.

[Embellishment.]

The application crashes on a null pointer. The system-wide custom exception handler is called. The crash is not one that is being protected by the global variable, so the custom exception handler frees the application from memory. The system-wide custom exception handler now returns, but wait, what is it returning to?

The crash was in the application, which means that the DS register it saved on entry to the custom exception handler points to the application's data. The custom exception handler freed the application's data and then returned, declaring the exception handled. As the function exited, it tried to restore the original DS register, but the CPU said, "Nice try, but that is not a valid value for the DS register (because you freed it)." The CPU reported this error by (dramatic pause) raising an exception.

[Embellishment.]

That's right, The system-wide custom exception handler crashed with an exception.

[Embellishment]

The chain reaction

[Structure. Add heading here.]

Okay, things start snowballing. This is the part of the movie where the director uses quick cuts between different locations, maybe with a little slow motion thrown in.

[Embellishment.]

Since an exception was raised, the custom exception handler is called recursively. Each time through the recursion, the custom exception handler frees all the DLLs and memory associated with the application. But that's okay, right? Because the second and subsequent times, the memory was already freed, so the attempts to free them again will just fail with an invalid parameter error.

But wait, their list of DLLs associated with the application included USER, GDI, and KERNEL. Now, Windows is perfectly capable of unloading dependent DLLs when you unload the main DLL, so when they unloaded their main program, the kernel already decremented the usage count on USER, GDI, and KERNEL automatically. But they apparently didn't trust Windows to do this, because after all, it was Windows that was causing their application to crash, so they took it upon themselves to free those DLLs manually. For whatever reason, the handler frees the DLLs anyway.

[Speculation. No way of knowing that this was what the developers were thinking when they wrote the code.]

Therefore, each time through the loop, the usage counts for USER, GDI, and KERNEL drop by one. Zoom in on the countdown clock on the ticking time bomb.

Beep beep beep beep beep. The reference count finally drops to zero. The window manager, the graphics subsystem, and the kernel itself have all been unloaded from memory. There's nothing left to run the show!

[Embellishment.]

Boom, bluescreen. Hot flaming death.

The punch line to all this is that whenever you call the company's product support line and describe a problem you encountered, their response is always, "Yeah, we're really sorry about that one."

[Length. Irrelevant.]

Bonus chatter: What is that whole different story mentioned near the top?

[Length. Cut the entire bonus chatter. Irrelevant story.]

Well, when the delivery service sent the latest version of the software to the Windows 95 team, they also provided an account number to use. My colleague used that account number to try to reproduce the problem, and since the problem occurred only after the order was submitted, she would have to submit delivery requests, say for a letter to be picked up from 221B Baker Street and delivered to 62 West Wallaby Street, or maybe for a 100-pound package of radioactive material to be picked up from 1600 Pennsylvania Avenue and delivered to 10 Downing Street. all of which were fictitious.

[Fabrication. No proof that these were the addresses and orders used. All that is known is that fictitious orders were placed.]

After about two weeks of this, my colleague got a phone call from people identifying themselves as Microsoft's shipping department. "What the heck are you doing?"

[Speculation. No proof that the call truly came from the shipping department. Could have been a lucky prank call.]
[Fabrication. No transcript of this call exists.]

It turns out that the account number my colleague was given was Microsoft's own corporate account number. As in a real live account. She was inadvertently prank-calling the delivery company and sending actual trucks all over the country to pick up nonexistent letters and packages. The people who identified themselves as Microsoft's shipping department and people from the delivery service's headquarters claimed that they were frantic trying to trace where all the bogus orders were coming from.

[Hearsay.]

¹ Mind you, this sort of thing is the stuff that average Joe customers can do while still in their pajamas, but back in those days, it was a feature that only top-tier customers had access to, because, y'know, mainframe.

Comments (77)
  1. Owen Rudge says:

    I'm sure I'm not the only person who found the original story very interesting and entertaining. Personally I would encourage more content, not less. Some folk are just never happy!

  2. steven says:

    Wow. I can't decide whether this is sad or awesome. Probably a little bit of both. Sad that many people apparently felt the need to rip into what I thought was a nice writeup for an amusing story. Awesome that you actually took the time to do this in response. At any rate, having read your blog pretty much since the beginning I have found it consistently interesting and well-written throughout all of those 10 years and your book remains one of my favourites. Here's hoping you keep going and don't change your inimitable style.

  3. SI says:

    The original was much more interesting :(

  4. Guest says:

    @Owen Rudge

    I agree, this modified version just feels very dry. Almost textbook like, whereas the previous felt like an actual story told by a real person to another.

  5. Joshua says:

    Very few of those edits improved the story. None of them are marked fabrication. It would have been nice to know the addresses were not necessairily what was entered. I very nearly started an urban legend thinking the radioactive was real; but a much less drastic adjustment is better.

    Some people complain without sufficient reason.

  6. Francois says:

    Oh my… Based on the comments so far, some of you still don't get the point.

    @Raymond: I love your new style ! ;-)

  7. MNGoldenEagle says:

    The amount of snark/dry wit in this post is just ridiculous.  I love it.

    That said, people in comments make the worst editors.  And people like to complain regardless of the fact that it's your blog and you can write however you dang want.  In fact, your writing style is no small part of the appeal to this blog and probably why a lot of people started following it.

  8. Wilhelm says:

    Please just ignore the amateur "editors", Raymond. They couldn't write an interesting writeup if their lives depended on it.

  9. IanBoyd says:

    I preferred the longer version, but not simply for entertainment purposes. I preferred the informed speculation that comes from an experienced developer and debugger.

    And while i never assumed that Raymond was able to retroactively read minds, it's not difficult to look at some code and see what the person who made the mistake was thinking. It's something that comes from experience, and making the mistakes yourself.

  10. The_Assimilator says:

    Anyone who finds Raymond's superbly entertaining write-ups "too long" should probably try something a bit more their speed. Like picture books, or the documentation for Linux applications.

  11. Eric TF Bat says:

    Wait… Raymond, are you saying you actually read the comments?

    You poor, poor man.  Never read the comments.  Anywhere.  They will only make you sad.

  12. visualj says:

    Thank you Mr.Tweedly…

    You're Welcome, I'm sure.

  13. John Doe says:

    The longer version is much better. This is neither a bugtracker nor a manpage, no need to be stiff and reduce everything to the core.

  14. Dave T says:

    @Raymond – Well played sir.  Well played indeed.

    @Francois – no kidding, a thermonuclear device goes off (SMASH CUT to shot of expanding MUSHROOM CLOUD) and some remain oblivious.

    @Eric TF Bat – Agreed.  Just like when you're up really high, don't look down.

  15. Dave W says:

    @Raymond, I would not read your blog if it were written in the style the haters want you to have. I'm not even a Windows developer, I just love reading your stories. They're very entertaining. Don't change!

  16. ShinyHat says:

    Among my many issues with the all-volunteer buzzkill editor squad is that anyone saying they would or could write MFC-lookalike code in Notepad has never seen MFC code.

    It would be worse than writing a simple webpage in Notepad that looks like the old FrontPage generated code.

    Its TECHNICALLY POSSIBLE, but mind-bendingly insane.

  17. Anthony says:

    Dear other-article commenters: please go read this blog instead:

    blogs.msdn.com/…/ntdebugging

    It's more about smart people investigating nasty Windows system issues, but it has all the authorial flavor of Sheetrock. Bon appetit.

  18. Mike Caron says:

    I am willing to bet that if you forced everyone who reads this blog to post a comment, 99% of those comments would look like "Cool! Good read!". Since obviously these comments don't add to a discussion, they do not get posted.

    Unfortunately, this opens the flood gate to everyone else who does have criticism (valid or otherwise). This can have the unfortunate effect of making the majority of comments negative, even though most of them are posted by 5 or 6 individuals (I mean, really, xpclient can't be the only person reading this blog!)

  19. Speed says:

    I understand that Raymond queues posts days/weeks/months in advance. This post (unless a complete fiction) jumped the queue.

    Does Raymond's system permit insertion of a post, causing subsequent posts to automatically move forward one day?

    [This was a supplemental article (second article of the day), so no queue reordering. Reordering is more complicated than just shifting everything one day, because that would put Monday-style articles on Tuesdays, for one. -Raymond]
  20. Nick says:

    I love this response. It's brilliant.

  21. JJJ says:

    It might help if you think of us all like a big family.

    … people you'd never hang out with if you had a choice, but you're stuck with us.  There are some people who post regularly who fit the role of the overly negative mother-in-law quite well.

  22. GWO says:

    I didn't complain about the original – I'm quite used to Raymond's florid and grandiose style … but this one is better, and certainly 10x more readable.

  23. wma says:

    Ouch!  Definitely preferred the original.

  24. Peter says:

    Raymond, I love your blog, and I'm improved immeasurably as a developer over the years by reading it.  However, I do think you're rather uncharitable when it comes to your customers.  I often get the impression that you unfairly assume that your customers are idiots and that they do foolish things because they're stupid and lazy.  For instance, it strikes me as eminently plausible that the exception handler came first and accidentally obscured the UI bug.  (And while bad, it would certainly be a lot less idiotic than adding a handler in favour of debugging the code.)

  25. John Costello says:

    It's quite clear that you're the published author.

    I don't often respond to your blog posts, usually because I'd just be saying "wow, another great blog post!" But I appreciate that you have a thick skin and a snarky attitude and have no problem shrugging off the constant rain of negativity you get. Thanks for keeping it up! You always brighten my RSS reader.

  26. Kyle says:

    @Peter

    Even if the exception handler came first, there's absolutely no reason to catch an exception just to hide it.  There's no way to charitably respond to that except to call it either sheer ignorance or laziness.  If you can't be bothered to know about the system you're coding for, then coding shouldn't be your job.

  27. Skip says:

    Raymond, I would have given up posting articles years ago. I don't know how you manage to keep going (and stay sane). But I'm glad you do.

  28. JamesNT says:

    The original story was fun to read, informative, and very Raymond-ish.  As for the editor wannabe's, they can all go [expletitive] themselves.  Their "recommendations" to Raymond's original story are stupid, take out the fun, and worst of all make the article sound not like Raymond at all.  

    Mr. Chen:  Your blog is awesome.  You are, am, and continue to be, my programming god.  May your preferred Superior Deity continue to bless you.

    JamesNT

  29. Simon says:

    I loved both posts, for entirely different reasons.

    Thanks Raymond!

  30. BIllA says:

    Commenters on the original article are like my father who complained about the inane chatter on Car Talk instead of just answering peoples questions about their car.

  31. Jake says:

    I can't be the only person who initially parsed Pink Box #3 as

    [Speculation. No proof that the computer being dialed is a mainframe. For all you know, it was an Apple ]

    [ on the other end of the modem.]

  32. Mc says:

    In my opinion the original article was one of your best.   Please don't do anything drastic like stop blogging or anything like that.  Just ignore us idiots.  I find your blog educational and entertaining which is rare these days.

  33. MNGoldenEagle says:

    @Peter: Don't take everything Raymond says on this blog at face value.  Just because a post makes the customer's intentions look idiotic or ignorant doesn't necessarily make that the case, it's mostly just for storytelling purposes.  After all, the original team/programmer who designed the exception handler could've moved on years ago, leaving everyone else high and dry, or maybe it was cobbled together by a self-proclaimed "expert" due to a high-impact bug.  Microsoft's made plenty of silly choices too when implementing their own software, but to make the stories more engaging it's usually fun to play these things up.

    After all, Raymond made it pretty clear in his post that he had no insight at all on what was going on on the customer side of things.  The parentheticals should be more than enough hints that you should take those particular aspects of the post lightly.

  34. Comic Book Guy says:

    This post would have been much more funny if you had riddled it with spelling mistakes.

  35. a-joewil says:

    Having worked in PSS supporting Windows95 during and after the launch … I really enjoy the Windows95 stories with all of the details.  Thanks Raymond!

  36. Maurits says:

    Still too much fat. The short, short version:

    > Windows 95 let applications call FreeLibrary(USER), FreeLibrary(GDI), and FreeLibrary(KERNEL) too many times. A major delivery service had a line-of-business application that did this accidentally sometimes. This bluescreened the system it ran on.

  37. FM says:

    I accept the sarcasm, however I like the edited version… sorry (but perhaps editing ALL the embellishment is too heavy)

  38. 12BitSlab says:

    In my world, one of the basic rules of complaining about someone's writing style is to also post link to one's own writing so it can be critiqued.  Overall, this would lead to a much more polite world.

  39. BigStew says:

    Why spoil a good post with all that non-sense?

    I think Raymond has finally lost the plot.

  40. Chris Crowther says:

    Well that just makes dull reading; it has none of the amusement of the original

  41. David H says:

    I object to the use of pink on the side for your editing comments. Red is much more traditionally used for editing. You should have gone with that.

    (Just to be sure, I'm joking. I loved the original, and this made me chortle as well)

  42. Michael Stone says:

    It's great to see a blogger who really listens to his readers!  Here's an example of William Shatner taking constructive criticism in a similar way:

    http://www.youtube.com/watch

    :)

  43. Fleet Command says:

    Oh, my God! I'm so excited! A Microsoft engineer took my advice. Yipeeeeeeeeeeee! From now on, I am going to write five detailed editorial reviews of all your blog posts, Raymond! And I will have it FedEx-ed. I'M SUCH A BIG FAN!!!

    Now, joke aside, the original article was mediocre while this one is plain awful and pointy; and since being awful is its objective, it is yet another success. But ironically, its flow is much better because of section headings.

    [You seemed to object to everything that made the article a story rather than a report. Reports are dull. Stories are entertaining. Some stories are more entertaining when you don't know where it is going. -Raymond]
  44. Chris Charabaruk says:

    The original was a much more interesting, much more fun read. Your "editors" are idiots. :/

  45. Locke Cole says:

    Long-time reader, book owner, very infrequent commenter.

    @Raymond:

    Don't read the comments, that way lies tears and agony. I read the original of this and LOVED it. If someone doesn't like your writing, they can go read something else. Easy as that.

  46. Fleet Command says:

    [You seemed to object to everything that made the article a story rather than a report.]

    No, Raymond, I just objected the writing style, the undue length, the weird movie metaphors and lack of sufficient context about DS register. What you have written now eliminates topic sentences in the name brevity; eliminates all metaphors (not just the weird ones) and does not substitutes them with anything better; and although it adds something about DS registers, the addition is not adding more context about freeing said register. And let's not forget that the sole objective of this text is to prompt people like Chris Charabaruk call me an idiot. It is not a product of honestly taking my advice; it is a personal attack with improved flow because of the use of section headings!

    This is how Microsoft ends up creating awful things like Internet Explorer 6 and Windows 8: Treating negative feedback like.

    If you think you can write great articles, I challenge you to writing a Featured Article in Wikipedia. Oh, I warn you; doing that literally needs prescience.

    [But it's the style, the length, and the weird metaphors that make it a story. (I acknowledge the DS mystery, but I thought I implied "DS must always be valid" in the description of how things went bad.) Maybe you can give an example of what you were looking for. (Mind you, I'm still going to write articles with my own style, length, and weird metaphors, because that's my style. I just can't figure out what you want changed in the article while still keeping it entertaining.) -Raymond]
  47. Anonymous Coward says:

    A marked improvement. Maybe you really do need an editor.

  48. Crescens2k says:

    @Fleet Command:

    Personally I think it flows worse now.

    The original version had each section flowing into each other smoothly. This edited version has the titles and that causes a break in the flow. Remember, preference of writing style is still an opinion.

    Also, what does this have to do with IE6 or Windows 8? I fail to see that link besides of an attempted attack back. IE6 was a product of no real browser competition at the time which caused stagnation. Windows 8 was an attempt at a tablet operating system, with some bad choices. Either way that was very pointless to mention.

    Also, I never have felt that Raymond thinks that he writes great articles. He was just writing an amusing story, which is totally different to what makes an article good.

  49. Joshua says:

    Too bad we can't have a debating-class debate between Fleet Command and Raymond Chen.

  50. voo says:

    "No, Raymond, I just objected the writing style, the undue length, the weird movie metaphors and lack of sufficient context about DS register."

    undue length: 1584 words and rather diverting at that to me. Considering that it's a story to entertain I'm not entirely sure how you define "undue" anyhow. Are you also going to complain about an author writing a 500 page book if they could've cut it down to 300 pages, even if the 500 pages add flavor and are entertaining?

    weird movie metaphors: By definition subjective. And Raymond likes to mix metaphors in weird ways – it's part of his style. De gustibus non est disputandum, so why read someone's writing if you don't like their style?

    lack of sufficient context about DS register: Ok that one's particularly weird. Does that mean we can now no longer assume that Raymond's readership has at least some basic ideas about x86? If you don't want to research basic things, but instead want to read some technical triviality there are tons of blogs out there for that. What's next? Demand adding some explanation about what null pointer exceptions are and why they are bad? Or what dlls are?

  51. Richard Russell says:

    I prefer the edited version.

  52. Marcel says:

    @Fleet Command: Sheldon Cooper, is that you? This is the point at which a decent human being just shuts up and/or leaves. This is just a little hint for the empathy impaired.

  53. Nixon's Silent Majority says:

    I prefer the original version, in particular the writing style, the appropriate length, the colorful movie metaphors, and the hint of mystery about the DS register.

  54. Amused says:

    It's endlessly amusing that Raymond writes a blog for the education and entertainment of people not as smart as him[1], but actually takes their comments to heart.

    [1] If you're reading this thinking "wait! Perhaps I'm smarter than Raymond!": you're not.

  55. John Doe says:

    That John Doe is another John Doe, it's not me, John Doe.  Apparently, my name, or his name, is not that unique (who would say…) or real (really?)

    BTW, I agree with him, although I wouldn't use the word "manpage" in this day and age.  I love stories.

    This has just gone too far…  I guess no one is imune to troll bait…

  56. Fleet Command says:

    [But it's the style, the length, and the weird metaphors that make it a story. (I acknowledge the DS mystery, but I thought I implied "DS must always be valid" in the description of how things went bad.) Maybe you can give an example of what you were looking for. -Raymond]

    Aha! Now that's more to the point. Yes, style makes story; I agree. Hence, it needs improvement, not removal. (Compare the style of Dale Brown with J.K. Rowling, for instance.) Metaphor is an image-making device that helps conjure up an image in the reader's mind. Now, here is where things get weird: In all your previous posts, you used metaphor to conjure up an image of the subject, or an analogous image. (e.g. this masterpiece: "It's bad enough for a guest to demolish the host's house; demolishing an unrelated person's house is taking it to a whole new level") In this certain post, however, metaphor is used to conjure up images that serve no purpose beyond that of ad in the middle of the film: They distract.

    [It sounds like you prefer a dry style that sticks to facts without embellishment or side-discussion. Sorry, you're not going to find that here. And the purpose of the metaphors is take the conventions of a summer blockbuster movie and apply them to a technical story, because it's funny. -Raymond]
  57. Mark VY says:

    @Fleet Command: You may call them distracting.  I happen to disagree.  I though they were bunches of fun!

  58. n1k says:

    I giggled at this post.

    And people need to remember, it's a blog. If you're coming here for 100% hard facts and technical book grade writing, you're barking up the wrong tree. It was an interesting and fun to read story as it was.

  59. DebugErr says:

    The original is better. And you know why? Because it's original, and not a boring manipulated research paper.

    Screw the people not understanding this.

  60. cheong00 says:

    The comparison is much more interesting. *flee*

  61. Daniel says:

    @Fleet Command:

    First and most important point: It's Raymonds blog. He's allowed to write in the style he wants. (And he's even allowed to SWITCH styles if he likes). If you didn't like the story: Tomorrow there may be a different entry you like more. If not: nobody forces you to read this blog.

    @Raymond: I really liked the original version… Best part was the "Bonus Chatter": So real-world…

  62. Neil says:

    That's the sort of article slamming I would have expected in The Daily WTF's comments.

  63. Katie says:

    Sorry, but I couldn't resist this line: "Compare the style of Dale Brown with J.K. Rowling, for instance."

    I have absolutely no idea what comparison you expect us to make – the context makes it seem like you consider one obviously better than the other, and that "improving" the style of one to match the other would be a good thing. But these are authors that write in different genres and subjects to a different target audience, and each has a large fanbase that clearly appreciates their individual style.

  64. HagenP says:

    > You tell me whether you like the original or the edited version.

    Both. The original AND the edited version INCLUDING the edit remarks by you.

    If you only have time for one version, please let it be your original one.

  65. HagenP says:

    > A major delivery service had a line-of-business application that did this

    > accidentally sometimes. This bluescreened the system it ran on.

    Funny fact: the German equivalent to 'Oops!' is 'Ups!', pronounced [ups].

  66. jnm2 says:

    I think the story style and length of the original were perfect. Wish I could say something nice about the style and length of the sarcasm in your comparison of the two versions. Dead horses get old after, oh… four paragraphs? o.O

    But who cares about jibes? Your original was brilliant.

  67. Engywuck says:

    "Some people complain without sufficient reason."

    is the long form of the much more general "Some people are idiots"

    I *liked* the original version. It has flavour and texture. Chapter headings I only expect in (usually quite dry) textbooks or childrens books. Everyone with a reading age above ten years old or so should be able to appreciate well-written(!) long texts where the only separations are paragraph whitespace. Perhaps with chapters (only numbered, nothing more) for easier "jumping" or when *really* changing the setting (like "on the moon, fourty-fivee years later")

  68. morlamweb says:

    Raymond, allow me to join the chorus praising the original article.  It's a sterling example of the reason why legions read your blog every day.  Please, ignore the two commenters who critiqued the original story; if they don't get your writing style, metaphors, or jokes, then that's they're problem, not yours.

  69. Fleet Command says:

    [It sounds like you prefer a dry style that sticks to facts without embellishment or side-discussion.]

    I said quite the opposite.

    [The original complaints were for undue length and metaphors that don't conjure up images. I interpreted "undue length" as "too many digressions into things that aren't relevant to the story, and time wasted elaborating on irrelevancies." Also, I thought "zoom in on countdown clock" conjured up an image, but now the complaint apparently is that the conjured-up image wasn't helpful. -Raymond]
  70. Fleet Command says:

    Glad to see it is all cleared up. Thanks for your attention.

    Good luck.

  71. Mr Cranky again says:

    Dammit, I meant Malebolge (en.wikipedia.org/…/Malebolge).

  72. Reducing Length without Reducing Content says:

    Reducing length without reducing contents is like improving software performance without removing features. It is doable. See this:

    en.wikipedia.org/…/Redundancy_exercises:_removing_fluff_from_your_writing

  73. Anon says:

    @Eric TF Bat

    blog.codinghorror.com/please-read-the-comments

    If you're the owner of a blog/website/whatever, your choices are to either read the comments, or turn them off. Nothing else is acceptable.

  74. Ricardo Costa says:

    I love the original story, and the "weird movie metaphors" make it feel just like an episode of the documentary Seconds from Disaster (NatGeo). I can't understand why some people are complaining, maybe they need to watch more action movies to know better about their narrative structure…

  75. Obnoxious Human says:

    @Raymond

    How is it that people like Fleet Command can get under your skin? From what I can see his/her writing is nothing special and neither are the examples she/he is using to demonstrate good vs poor writing. With no valid evidence to critique your writing style why let "I don't like how you write" get to you?

    You have a lot of <censored>'s commenting on your blog, such as myself and Anon up there; I'd ignore us all if I were you.

  76. Ty says:

    I appreciate both versions. The initial version was a magnificent narrative, the latter is a magnificent display of the methodological skepticism. Both have their place.

Comments are closed.