March, 2004

  • The Old New Thing

    The look of Luna

    • 76 Comments

    Luna was the code name for the Windows XP "look". The designers did a lot of research (and got off to a lot of false starts, as you might expect) before they came to the design they ultimately settled upon.

    During the Luna studies, that people's reaction to Luna was often, "Wow this would be a great UI for X," where X was "my dad" or "my employees" or "my daughter". People didn't look at it as the UI for themselves; rather, they thought it was a great UI for somebody else.

    It was sometimes quite amusing to read the feedback. One person would write, "I can see how this UI would work great in a business environment, but it wouldn't work on a home computer." and the very next person would write "I can see how this UI would work great on a home computer, but it wouldn't work in a business environment."

    (And interestingly, even though armchair usability experts claim that the "dumbed-down UI" is a hindrance, our studies showed that people were actually more productive with the so-called "dumb" UI. Armchair usability experts also claim that the Luna look is "too silly for serious business purposes", but in reality it tested very well on the "looks professional" scale.)

    Aero is the code name for the Longhorn "look". With Aero, the designers have turned an important corner. Now, when they show Aero to people, the reaction is, "Wow, this would be a great UI for me to use."

    People want Luna for others, but they want Aero for themselves.

    [Raymond is currently on vacation; this message was pre-recorded.]

  • The Old New Thing

    When temperance backfires

    • 9 Comments
    [South Carolina is] the only state in the nation requiring bars to serve all hard liquor in minibottles. The minibottle's place behind the bar is even enshrined in the state's constitution.

    Mini-bottles are those cute little single-serving bottles you see on airplanes and in hotel refrigerators.

    The law was originally passed under pressure from the temperance movement who opposed "free pour" because it created the opportunity for bartenders to "sweeten" a drink. By requiring the liquor to come from a fixed-sized bottle, portion sizes could be kept under control.

    This worked great for a while. But then social pressures shifted and economics started happening. Across the country, the typical size of an alcoholic beverage started shrinking. But South Carolina's drink size stayed the same, because the size was mandated by law. The result: absurdly huge drinks, like the Long Island Iced Tea that comes in a pitcher. South Carolina ended up with the stiffest drinks in the country, exactly the opposite of what the original drafters intended!

    The very people who helped West pass the minibottle law as a way to limit consumption -- the teetotalers and religious conservatives -- are now helping Hayes's bid to abolish the law.

    The effort to repeal the law has been going on for many years, but somehow it always falls short. Maybe this year...

    [Raymond is currently on vacation; this message was pre-recorded.]

  • The Old New Thing

    Where did my Task Manager tabs and buttons go?

    • 33 Comments

    Ah, welcome to "Tiny Footprint Mode".

    This mode exists for the ultrageeks who want to put a tiny little CPU meter in the corner of the screen. To go back to normal mode, just double-click a blank space in the border.

    This is one of those geek features that has created more problems than it solved. Sure, the geeks get their cute little CPU meter in the corner, but for each geek that does this, there are thousands of normal users who accidentally go into Tiny mode and can't figure out how to get back.

    [Raymond is currently on vacation; this message was pre-recorded.]

  • The Old New Thing

    "Special skills" draft on the drawing board

    • 5 Comments

    The [U.S.] government is taking the first steps toward a targeted military draft of Americans with special skills in computers and foreign languages.

    Apparently, there is already a special system to draft "health care personnel", whatever that means.

    Can you imagine the havoc that could be wrought by disgruntled programmers forced to write code for the government?

    So all I have to do now is volunteer at the local hospital and I'll have hit the conscription jackpot.

    [Raymond is currently on vacation; this message was pre-recorded.]

  • The Old New Thing

    It's embarrassing how little Swedish you need to know

    • 27 Comments

    Because everybody here speaks English. Perfectly.

    Sometimes they'll speak English to me even before I say anything. (My comparative silence probably gives me away as a non-native.) Other times they'll notice that I'm speaking with a bad accent and switch to English. Some humor me by speaking Swedish until I finally break down and ask (in English), "I'm sorry, could you say that again?" because they're speaking Swedish too fast for me to keep up.

    When dealing with non-Swedes, the default language is English. Not because people from English-speaking countries are so prevalent, but because English is everybody's second language. If a German and a Russian meet, they'll talk in English.

    In other language news: On the flight out of Seattle, a variety of newspapers were available and I grabbed what turned out to be a Norwegian paper by mistake. But it turns out that if you know Swedish, you can read a Norwegian paper anyway; it's no big deal.

    Yesterday, one of Jonathan's corridormates listened patiently as I said "sju" ("seven") over and over again until I could get the sj-sound right. It went like this:

    Me: "Sju."

    Peter: "Nope."

    Me: "Sju."

    Peter: "Nope."

    Me: "Sju."

    Peter: "Nope."

    Me: "Sju."

    Peter: "Nope."

    Me: "Sju."

    Peter: "Nope."

    Me: "Sju."

    Peter: "Nope."

    Me: "Sju."

    Peter: "Nope."

    Me: "I give up."

    Peter: "That's okay."

  • The Old New Thing

    Why Ctrl+Alt shouldn't be used as a shortcut modifier

    • 22 Comments

    You may have noticed that Windows doesn't use Ctrl+Alt as a keyboard shortcut anywhere. (Or at least it shouldn't.) If a chorded modifier is needed, it's usually Ctrl+Shift.

    That's because Ctrl+Alt has special meaning on many keyboards. The combination Ctrl+Alt is also known as AltGr, and it acts as an alternate shift key. For example, consider the German keyboard layout. Notice that there are three keyboard shift states (Normal, Shift, and AltGr), whereas on U.S. keyboards there are only two (Normal and Shift). For example, to type the @ character on a German keyboard, you would type AltGr+Q = Ctrl+Alt+Q. (Some languages, like Swedish, have a fourth state: Shift+AltGr. And then of course, there's the Japanese keyboard...)

    Most international keyboards remap the right-hand Alt key to act as AltGr, so instead of the finger-contorting Ctrl+Alt+Q, you can usually type RAlt+Q.

    (For reference, here are diagrams of several other keyboard layouts, courtesy of my bubble-blowing friend, Nadine Kano.)

    Sometimes a program accidentally uses Ctrl+Alt as a shortcut modifier and they get bug reports like, "Every time I type the letter 'đ', the program thinks I want to start a mailmerge."

    [Raymond is currently on vacation; this message was pre-recorded.]

  • The Old New Thing

    The army is cool, except for the part where you have to fight

    • 26 Comments

    There's some to-do over a soldier who volunteered to serve in the army who has since changed his mind and is applying for conscientous objector status.

    I noticed this trend over two years ago, when people who had enlisted in the armed forces underwent a change of heart after the World Trade Center attacks:

    Many of the enlisted personnel who are now seeking honorable discharges argue they didn't sign up to defend America; they just wanted to learn a trade or earn money for college.

    Sort of like the Monty Python sketch.

    "Watkins why did you join the army?"
    "For the water-skiing and for the travel, sir. And not for the killing, sir. I asked them to put it on my form, sir - no killing."

    (I should point out that this particular situation appears to be different, however, since he did serve the first time he was called.)

    [Raymond is currently on vacation; this message was pre-recorded.]

  • The Old New Thing

    You know you've been in Sweden too long when...

    • 14 Comments

    Some Aussie ex-pats developed a list of “You know you've been in Sweden too long when...”. My friend who is acting as my host (and who is himself a U.S. ex-pat) says that the list is astonishingly accurate, and that your reaction to it goes through several phases.

    1. Confusion. You don't know what the list is talking about.
    2. Amusement. You know what the list is talking about and you find it funny.
    3. Realization. You find yourself agreeing with the statements on the list.
    4. Acceptance. This list isn't funny. It's just the way it is.

    For example, my friend explained points 73 and 74 to me. In Sweden, when the temperature reaches a certain never-explicitly-stated-but-everybody-somehow-agrees-on-it point, it officially becomes summer and you are not allowed to wear winter clothes regardless of the actual temperature. Similarly, when the temperature first dips below a certain point, it officially becomes winter and you are not allowed to wear summer clothes.

    My friend woke up one morning and noticed that it had dipped below freezing overnight. But it was warm when he got up, so he dressed appropriately for the temperature. What he didn't realize was that 0C was the secret "winter point". Everybody was bundled up for the coming blizzard, even though it was no longer freezing outside.

    I myself experienced a variation on 249. I was in Åhléns and there was a sign that read, "If you don't see your size, please ask for it." (Paraphrased from Swedish.) So I asked a passing employee if they had this particular pair of shoes available in a size 36. The employee got rather annoyed at me and told me to go stand in line at the register.

    Because if you want somebody to help you, you have to stand in line at the register and wait your turn - even though you aren't actually buying anything yet. When you reach the front of the line, the register person fetches the shoe you want. Fortunately, I was satisfied with the shoe she retrieved for me without trying it on (I was buying it for somebody else). If I had to try it on for size, I probably would have had to stand in line a second time.

    One of the "Adjusting to life in Sweden" books I read mentioned that the intense "nobody is better than anybody else" attitude in Sweden means that customer service is an oxymoron. If nobody is better than anybody else, then service personnel have no obligation to help you. The book noted, "This may take quite a bit of adjustment for people who come from other countries. Except the British."

  • The Old New Thing

    What U.S. college students miss from home

    • 11 Comments

    I didn't believe it until I saw it myself: My friend asked me to bring red and blue plastic cups to Sweden because the U.S. students really miss them. It's true. Here's why. (This needed to be explained to me because this was a part of U.S. college life I missed out on.)

    These cups are valuable because they are opaque. This allows you to walk down the street with a beer without anybody (anybody = police) being able to tell that you have a beer in your hand, which would otherwise be a violation of open-container laws or evidence of underage drinking. As a result, the plastic cups have been synonymous with college drinking. 

    That's why the U.S. students miss them so.

    In other news: Stockholm basically closes at 4pm on Saturdays.

  • The Old New Thing

    The ways people mess up IUnknown::QueryInterface

    • 33 Comments

    When you're dealing with application compatibility, you discover all sorts of things that worked only by accident. Today, I'll talk about some of the "creative" ways people mess up the IUnknown::QueryInterface method.

    Now, you'd think, "This interface is so critical to COM, how could anybody possible mess it up?"

    Forgetting to respond to IUnknown.

    Sometimes you get so excited about responding to all these great interfaces that you forget to respond to IUnknown itself. We have found objects where

    IShellFolder *psf = some object;
    IUnknown *punk;
    psf->QueryInterface(IID_IUnknown, (void**)&punk);
    
    fails with E_NOINTERFACE!

    Forgetting to respond to your own interface.

    There are some methods which return an object with a specific interface. And if you query that object for its own interface, its sole reason for existing, it says "Huh?"

    IShellFolder *psf = some object;
    IEnumIDList *peidl, *peidl2;
    psf->EnumObjects(..., &peidl);
    peidl->QueryInterface(IID_IEnumIDList, (void**)&peidl2);
    

    There are some objects which return E_NOINTERFACE to the QueryInterface call, even though you're asking the object for itself! "Sorry, I don't exist," it seems they're trying to say.

    Forgetting to respond to base interfaces.

    When you implement a derived interface, you implicitly implement the base interfaces, so don't forget to respond to them, too.

    IShellView *psv = some object;
    IOleView *pow;
    psv->QueryInterface(IID_IOleView, (void**)&pow);
    
    Some objects forget and the QueryInterface fails with E_NOINTERFACE.

    Requiring a secret knock.

    In principle, the following two code fragments are equivalent:

    IShellFolder *psf;
    IUnknown *punk;
    CoCreateInstance(CLSID_xyz, ..., IID_IShellFolder, (void**)&psf);
    psf->QueryInterface(IID_IUnknown, (void**)&punk);
    
    CoCreateInstance(CLSID_xyz, ..., IID_IUnknown, (void**)&punk);
    punk->QueryInterface(IID_IShellFolder, (void**)&psf);
    

    In reality, some implementations mess up and fail the second call to CoCreateInstance. The only way to create the object successfully is to create it with the IShellFolder interface.

    Forgetting to say "no" properly.

    One of the rules for saying "no" is that you have to set the output pointer to NULL before returning. Some people forget to do that.

    IMumble *pmbl;
    punk->QueryInterface(IID_IMumble, (void**)&pmbl);
    

    If the QueryInterface succeeds, then pmbl must be non-NULL on return. If it fails, then pmbl must be NULL on return.

    The shell has to be compatible with all these buggy objects because if it weren't, customers would get upset and the press would have a field day. Some of the offenders are big-name programs. If they broke, people would report, "Don't upgrade to Windows XYZ, it's not compatible with <big-name program>." Conspiracy-minded folks would shout, "Microsoft intentionally broke <big-name program>! Proof of unfair business tactics!"

    [Raymond is currently on vacation; this message was pre-recorded.]

Page 1 of 5 (50 items) 12345