February, 2010

  • The Old New Thing

    Those annoying satisfaction surveys

    • 54 Comments

    It seems that the United States has gone satisfaction survey mad. You get your oil changed, they ask you to fill out a satisfaction survey. You make a doctor's appointment, they ask you to fill out a satisfaction survey. You call the company technical support phone line, they ask you to fill out a satisfaction survey.

    These surveys typically ask you to rate how well various aspects of the interaction went, be it how easy it was to make the appointment, how knowledgeable the person who helped you was, how long you had to wait, whether the music in the waiting room was soothing, and what really bothers me is that all of these satisfaction surveys are striving to score "exceeds expectations" on every question.

    Um, if you are exceeding all expectations, then people will adjust their expectations so that what was previously "exceeding expectations" is now just "meeting expectations". In other words, the only way to consistently exceed expectations is to intentionally set low expectations. I think these people look to Lake Wobegon as their ideal town, because "all the children are above average".

    Sometimes I try to explain this on the satisfaction survey. One such survey asked, "How can we improve our performance from 'somewhat satisfied' to 'extremely satisfied'?" I replied,

    Manufacture some sort of artificial disaster, let everyone know about the fake disaster, keep them up to date with hourly fake status reports, and then "resolve" the problem three hours later, thereby making people think you're really awesome.

    Another time, I simply responded,

    I am satisfied with "somewhat satisfied".

    Bonus chatter: One time, I was told by the person assisting me that I would receive a satisfaction survey in the mail and that "the only thing they look at is whether you rated something exceeded expectations or not. All the other ratings are meaningless."

    Of course, all management is doing is devaluing the meaning of "exceeds expectations." Now, when somebody actually exceeds expectations, you have no way of saying "This really did exceed my expectations; it's not just one of those perfunctory exceeds expectations that everybody is required to give." I wonder if they will just go one higher and create a category called significantly exceeded expectations. Of course, the natural next step is to require all customer service representatives to meet this new level of service. Merely exceeding expectations won't be good enough any more.

  • The Old New Thing

    Advocating the overthrow of the government of the United States by force or subversion

    • 43 Comments

    It has been widely reported that South Carolina now requires "subversive groups" to register with the Secretary of State (and pay a $5 filing fee).

    Curiously, the list of organizations which must register include "an organization subject to foreign control." I wonder if this means that all consulates have to register, and that when any foreign dignitary visits South Carolina, they have to pay a $5 filing fee. (Not to mention all foreign-owned companies like Shell Oil.)

    Actually, it has been pointed out that a "subversive organization" includes one which advocates, teaches, or practices the propriety of controlling the government of the United States. I guess this means all political parties are subversive organizations. (Something most of us knew already.)

    And apparently, in your registration, you also have to include the bylaws or minutes of meetings from the last year. I wonder whether you have to resubmit the minutes each year. I'm sure somebody could keep a government bureaucrat busy for a long time by submitting hundreds of pages of "minutes".

    Anyway, this is a long and largely superfluous set-up for a different story. The mother of a colleague of mine came to visit from Canada. For some reason, the United States requires visitors to fill out a questionnaire asking them whether they are a drug dealer, whether they are a Nazi war criminal, and this question:

    Do you advocate the overthrow of the United States government by force or subversion?

    The sweet old lady studied the question for a while, then circled force.

    Bonus weirdness: On the form, it also says "Answering Yes will not necessarily exclude you from admission to the United States."

  • The Old New Thing

    How many servings are there in a single-serve cup? The answer might surprise you

    • 42 Comments

    I was in the grocery store, and there was a sign advertising a new product.

    Delight in a cup
    Your favorite XYZ Ice Cream
    Now in convenient single-serve cups.

    I took a look at the cup. Seemed kind of big for a single serving. I picked one up to read the nutritional information.

    Servings per container: 2
  • The Old New Thing

    No matter what you do, someone will call you an idiot, part 2

    • 41 Comments

    There was quite a bit of reaction to what I thought was a simple "Hey, here's what's going on" article from last year, specifically on how the Adaptive Display Timeout means that Windows doesn't always start the screen saver exactly on time. As you may recall, this feature adjusts the time it takes for the screen saver to activate if the user keeps dismissing it immediately after it starts. One of those small things that makes the computer adapt to you rather than vice versa, and an adaptation that you probably don't even notice when it happens.

    I think these two responses below summarize the extremes of the types of reactions this feature generated.

    • Vista/W7 has some nice touches too. http://is.gd/2FgKv Such little things is what we love about Macs.

    • Ich finde das erstaunlich. In einem Linux-System kann man soetwas relativ leicht selber scripten, und sich z.B. einen Button erzeugen, der den Bildschirmschoner kurzzeitig ganz ausschaltet. Sowas geht unter Windows freilich auch, aber kaum ein User kennt das System hinreichend gut. Deshalb stellen sich dort solche Probleme. Erstaunlich.

      Translation: This is incredible. On Linux, you can script this yourself relatively easily and create, for example, a button which completely disables the screen saver for a short time. Admittedly, you can also do this on Windows, but hardly any users know the system that well. And therefore we have these types of problems. Incredible.

    On the one hand, the feature is something so cool, it must have been stolen from a Mac.

    On the other hand, this feature shows everything that is wrong with Windows. I mean, on Linux, you can solve this problem by simply writing a script!

  • The Old New Thing

    It rather involved being on the other side of this airtight hatchway: Dubious escalation

    • 40 Comments

    Consider this type of dubious security vulnerability:

    There is a buffer overflow bug in kernel driver X. To exploit it, call this function with these strange parameters. The exploit works only if you are logged on as administrator, because non-administrators will get ERROR_ACCESS_DENIED.

    Yes, this is a bug, and yes it needs to be fixed, but it's not a security bug because of that only if you are logged on as an administrator clause.

    It's another variation of the dubious elevation to administrator vulnerability. After all, if you're already an administrator, then why bother attacking kernel mode in this complicated way? Just use your administrator powers to do whatever you want to do directly. You're an administrator; you already pwn the machine. All you're doing now is flexing your muscles showing how cleverly you can take down a machine that's already yours.

  • The Old New Thing

    Why doesn't my program receive the WM_DWMSENDICONICTHUMBNAIL message when I ask for an iconic representation?

    • 37 Comments

    A customer was having trouble adding Windows 7 taskbar integration features to their application:

    I'm trying to use the new Windows 7 taskbar integration features, but am running into a problem. I've made certain that my program has the DWMWA_FORCE_ICONIC_REPRESENTATION and DWMWA_HAS_ICONIC_BUTMAP DWMWA_HAS_ICONIC_BITMAP [corrected 8am] attributes set, yet I never receive a WM_DWMSENDICONICTHUMBNAIL message in my window procedure.

    A member of the taskbar team invoked psychic powers:

    Is your program running elevated by any chance? If so, then you need to add the WM_DWMSENDICONICTHUMBNAIL message to your UIPI message filter:

    ChangeWindowMessageFilter(WM_DWMSENDICONICTHUMBNAIL, MSGFLT_ADD);
    

    Psychic powers once again save the day.

    That was it. Thanks!

    Note that forcing someone to invoke psychic powers is a bad thing. It means that you withheld crucial information that somebody had to guess at. Here are some crucial pieces of information people tend to forget to mention:

    • "Oh, did I mention that my process is running elevated?"
    • "Oh, did I mention that my process is a service?"
    • "Oh, did I mention that my process is 32-bit, running on a 64-bit machine?"
    • "Oh, did I mention that I initialized COM as MTA?"
    • "Oh, did I mention that my process is impersonating another user?"
    • "Oh, did I mention that I'm running a version of the operating system different from Windows 7?" (or whatever the most current client operating system is)

    Added: The reason those items above are crucial pieces of information is that all of them (except the last one) are "game-changers": If you do any of the things in the list, a whole bunch of rules change. It's like asking a question about traffic regulations and neglecting to mention that the other vehicle is a fire truck with its siren on. (And presumably when you chose to invoke any of those game-changing conditions, you were aware of the rules which applied to the new situation. Those rules are documented with the game-changing condition, not with the general description of a normally-functioning universe. Imagine if every physics book had the sentence "This rule does not apply to Superman" at the end of every paragraph.)

  • The Old New Thing

    Food products that are offenses against nature: Bagel-fuls

    • 35 Comments

    Wow, it's been a long time since my last rant against food products that are offenses against nature. Today's rant is against Bagel-fuls, a product which Kraft launched in April 2008.

    Bagel-fuls (note the hyphen and the lowercase "f") are a dense, doughy material formed into a log shape, with a cream cheese filling. Think of them as Twinkies, but with cream cheese instead of a sugar cream filling, and with a dense, doughy substance instead of whatever alien material it is they make Twinkies out of.

    The great thing about this product is that it is an attempt by Kraft to learn its lesson from a previous failed bagel-like product: The Philadelphia To Go bagel, a package consisting of a frozen bagel, a one-ounce tub of cream cheese, and a plastic knife. For people who are unable to remember where they kept their cream cheese (hint: the refrigerator) and knives (hint: cutlery drawer).

    Apparently, Kraft's conclusion was not that the product failed because it was too stupid, but rather that it failed because it was not stupid enough.

  • The Old New Thing

    Le Chatelier's principle in action: Announcements

    • 32 Comments

    As I noted some time ago, one of the most important lessons I learned from Systemantics is Le Chatelier's Principle for complex systems which states, "Every complex system resists its proper functioning."

    At Microsoft, there are processes galore. For example, when a server is taken down for planned maintenance, you can expect a series of messages, perhaps following this pattern:

    • Server X will be unavailable from time A to time B. (Sent a few days before the planned outage.)
    • Server X will be unavailable today from time A to time B.
    • Server X is going down now. It should be back at time B.
    • Server X is back.

    The problem with this is that you often receive notifications for servers you have no interest in, indeed whose mere existence you were previously entirely unaware of. The notification messages don't include instructions on how to stop receiving the notifications, or if they do, the instructions are incorrect (no points for guessing how I discovered this), so people set up email rules to auto-delete the notifications instead of trying to figure out how to unsubscribe.

    The result is that we now have a system in place which generates large quantities of email which are automatically deleted.

  • The Old New Thing

    Don't forget to double-null-terminate those strings you pass to SHFileOperation

    • 30 Comments

    About once every two months for the past six months (I stopped checking further back), somebody reports a problem with the SHFileOperation function. Often, they don't include very much information at all. They just say, "I call the function and it doesn't work." Here's an example:

    I'm hitting a problem with SHFileOperation when using it to frob files in the gonzo directory when the user's SID ends in an odd number.

        //
        // Delete the file.
        // szDeletePath contains the full path to the file.
        //
        shFileOp.hwnd = NULL;
        shFileOp.wFunc = FO_DELETE;
        shFileOp.pFrom = szDeletePath;
        shFileOp.pTo = NULL;
        shFileOp.fFlags = FOF_NO_UI;
        iRet = SHFileOperation( &shFileOp );
    

    The function returns file not found, but the file is definitely there.

    If you read the variable names carefully, you can see the problem.

    The pFrom and pTo members of the SHFILEOPSTRUCT structure are double-null-terminated strings. (There's even a callout box for this in the MSDN documentation.) But a variable named szDeletePath is probably a single-null-terminated string. (The name for a double-null-terminated string would be szzDeletePath.)

    My psychic powers tell me that szDeletePath is not double-null-terminated.

    So far, my psychic powers haven't failed.

    Now, you might say that the fact that people make this mistake so often is a sign that the function is flawed. And if the function were designed today, I would agree with you. But this function in its public form is over fifteen years old (and in its private form, is around 20 years old), and back in those days, programmers were assumed to have the time to understand the subtleties of what they were doing.

  • The Old New Thing

    On the Internet, everybody wants to know if you're a dog

    • 29 Comments

    On Slate, Michael Agger expounds on increasing pressure for people to provide pictures of themselves online. I've managed to resist so far.

    That article also tipped me off to a phenomenon I didn't even know had a name: MySpace angles.

Page 1 of 4 (35 items) 1234