April, 2009

  • The Old New Thing

    Identity theft via repeated name changes


    In the United States, it is legal to change your name as many times as you like, and you don't even have to have a reason, as long as you're not doing it with fraudulent intent. The ease with which name changes can be accomplished has been exploited by people who use it to carry out identity theft. Creditors coming after you? Change your name, attach it to a stolen Social Security number, and off you go.

    The story about name changes reminds me of a friend of a friend who lives in Taiwan. As a teenager, she was somewhat unhappy and changed her name on the advice of a fortune teller. (I get the impression that fortune tellers are pretty popular in Taiwan, particularly among people who are dissatisfied with their lives.) After the name change she felt a little better, but after graduating with her doctorate from a United States university (where she took on an English name), things weren't working so well and she consulted another fortune teller, who told her, "Yeah, well that name you changed to as a teenager was a good name for a teenager, but now you're an adult, and that name doesn't work any more. You should change it to this other name now that you're an adult."

    She followed the fortune teller's advice and changed her name a second time, but it wasn't until after the paperwork was complete that she realized she had misspelled her name on the form. What's more, in Taiwan, you're only allowed to change your name twice. (In Taiwan, women typically do not change their names when they marry.) Maybe they imposed this rule to avoid people changing their names every other week based on the recommendation of a new fortune teller. Whatever the reason for the rule, the result is that my friend's friend is now unfortunately stuck with a misspelled name.

  • The Old New Thing

    Those notification icons, with their clicks, double-clicks, right-clicks... what's up with that?


    (A completely feeble attempt to mimic Michael Kaplan's blog entry titles which carry a much stronger voice.)

    Jonathan Hardwick made a short table of inconsistencies in how various programs handle clicks on their notification icons. How are these supposed to work?

    The final decision is up to the application, since it is the one that receives the mouse clicks and decides what to do. But what were the intended semantics for clicks on the notification icon?

    Left single click: Display a simple interface item targetting the casual user. In most cases, this would be a context menu, but if you are something like the volume control, then a custom interface item (in this case, a slider control for controlling the volume) may be more appropriate.

    Right single click: Display a context menu, but one which can contain options for more advanced users. In many cases, the menu will be identical to the left single click menu. (Important: See tomorrow's entry for additional discussion.)

    As for double-clicks, you don't need a special rule because there is already a general principle for what double-clicks mean: The double-click action, generally speaking, is equivalent to viewing the context menu and choosing the default action.

    For the programs on Jonathan's list, then, the actions should go like this:

    • Left single click: Display a context menu showing applicable quick-access actions, with Open being the boldfaced default menu item.
    • Left double click: Open the application window.

    Note that if you go for the left single click, you'll run into a half-second delay because the icon is waiting to determine whether that first click is a standalone single click or whether it is the first half of an upcoming double-click.

    Oh, and here's that further discussion on right clicks: The right click and left click distinction was an attempt to provide advanced functionality to advanced users, on the principle that most users don't really use the right mouse button much and will click with the left button by default. This was especially true back when the Windows 95 user interface guidelines were being developed, since the right mouse button was barely used at all in Windows 3.1. It's a new button, may as well use it for something new. In the intervening years, however, things have changed. The right mouse button is much more heavily used by applications, and even novice users are accustomed to right-clicking on things. Consequently, knowledge of the right mouse button no longer carries the mark of the geek that it once did. In fact, there is a nontrivial class of users who are accustomed to right-clicking on icons as their primary means of interacting with them.

    The fact that applications which create notification icons historically have done a poor job of distinguishing the left click ("basic function menu") from the right click ("advanced function menu") only makes the distinction even more meaningless. For notification icons, the consequences of this shift in usage patterns and the general confusion in the world of applications that create notification icons is that you are probably best off making your right click menu the same as your left click menu.

    Update: Here's a link to the official guidance regarding how users interact with notification icons.

  • The Old New Thing

    Qrystal does more research into those spam blogs


    Blogger Qrystal got hit with blog trackback spam and did research into the phenomenon, even discovering the author trying to sell the spam blog.

    And he had to cut the price because Google AdSense has cut him off. Ha, ha, haaahhhhh~!

    (Read the blog entry for the spammer's for-sale offers and other linkity goodness.)

  • The Old New Thing

    Why is there sometimes a half-second delay between the click and the action?


    There are places in the user interface where you may click to perform an action, but the action doesn't actually take place until a half second later. Why is there a half-second delay?

    Because it's waiting to see if the user is on the way to a double-click.

    Some users simply double-click everything in sight, and depending on what the single click action is, this may or may not be a problem.

    If the click launches a modal dialog, then the second click is mostly harmless because the modal dialog appears on the same thread group as the window that received the stray second click. When that thread group next processes input (when the modal dialog is ready to accept input), the mouse click goes to the modal dialog, and usually it's in some harmless location so nothing happens. Often, the second click is not even at the location where the modal dialog appeared but rather remains over the original window, which is now disabled. Consequently, the click is ignored—no harm done.

    But if the click launches a new process or opens a new top-level unowned window, then that second click is going to cause trouble. For example, if you clicked a link that launches a control panel, the second click goes to the launcher, and the control panel itself then appears without focus. (It can't steal focus because the user denied the focus change by interacting with the launcher window.)

    A common workaround for this problem is for items that act on a single click and which fall into the second category to wait for the double-click time to see whether another click arrives. If another click arrives, then perform the operation on the second click because the user is a double-clicker. If no click arrives, then perform the operation after the double-click time elapses because the user is a single-clicker. (Filtering out accidental double-clicks is informally known as debouncing.)

    The result of this is that if you're a single-clicker, then there's a half-second wait before the operation is performed.

  • The Old New Thing

    A simple bar chart on letter distribution


    I was visiting a colleague's office in another building and I spotted a whiteboard on which the following enigmatic bar chart was drawn. The source data for the analysis was left unspecified.

    Letter Distribution
        S   N   O   P   D   G  

    It looks like there's an entire Web site devoted to profound charts like this. For example, a graph of beer bottle distribution as a function of the number of bottles taken down and passed around.

    When I showed this Web site to one of my friends, he responded, "Oh, great, now I'm not going to get anything done for a week and it's all your fault."

    Unfortunately, the charts on graphjam appear to have diverged in recent months from the site's original conception as a reinterpretation of music and popular culture. Now it's just snarky charts.

  • The Old New Thing

    What kind of uncle am I?


    Like every language, English has its own collection of words to express family relationships. There are the easy ones like mother, father, brother, and sister. Also comparatively easy are cousin, aunt, uncle, niece and nephew. But most people don't know about this "removal" part, beyond the fact that your "first cousin twice removed" is somebody you probably met once at a wedding ten years ago.

    It's really not that complicated. Some people think removal has to do with estrangement, but actually it has to do with generations. The children of your Nth cousin are your Nth cousins once removed. Their grandchildren are your Nth cousins twice removed. In general, to find your Nth cousin K times removed, go to your Nth cousin and then follow their children K times.

    You can also look at it from the point of view of the younger relative: Your Nth cousin K times removed is the Nth cousin of your Kth direct ancestor, where K = 1 is your parent, K = 2 is your grandparent, etc. For example, your father's second cousin is your second cousin once removed. There's a nice chart at genealogy.com that depicts many of these more complicated relationship terms.

    In practice, these relationship terms are considered unnecessarily formal. In casual conversation, two such relatives who are comparable in ages are called distant cousins. If one is significantly older than the other, then the older relative is called a distant aunt/uncle of the younger one.

    In many cultures, the terms for aunt and uncle can be applied more generally to any close friend of your parents. When I mentioned to my mother that the children of one of my friends call me Uncle Raymond, she asked me, "Which uncle?" This question puzzled me initially, but then I realized that in my parents' native language, as with most other Chinese dialects, there are several types of family relationships which in English all get lumped together as uncle. The term to use depends on whether the uncle is paternal or maternal, whether the uncle is older than or younger than your parent, and whether the uncle is by blood or by marriage. For example, you can use the word for husband of father's older sister or, if you wanted to be more respectful or if you need to resolve ambiguity, you can say the word that means husband of father's older sister number two. One of the reasons for so many fine distinctions for family relationships is that it is considered disrespectful to address someone older than you by name. (Compare United States culture, where it is considered disrespectful to address one's parents by name.) Consequently, resolving ambiguity cannot be accomplished as it is in Western cultures by appending the relative's name (Aunt Carol or Uncle Bob); it must be done by using a more specific title.

    But since my friend's children speak English, they can just address me as Uncle and not have to worry about which kind of uncle I am. (To my Chinese-speaking nieces, however, I am 大姑丈.)

  • The Old New Thing

    The Start menu pin list is just a list of items; there's no magic


    Commenter Kevin Dente asks, "Is it possible to put a folder on the Start Menu Pin list and have it cascade?"

    No. The last time I checked (which was back in Windows XP), the Start menu pin list was a list, not a menu. (Specifically, a list view in tile mode.) When you click on the icon, it launches. There is no code to say "Oh, if this flag is set, then let me draw a little menu arrow next to the item, and if the user clicks the arrow, bind to the target of this shortcut, enumerate its contents, and create a menu from it."

    Remember, features don't exist by default; somebody has to implement them.

  • The Old New Thing

    No, we're not nerds, why do you ask?


    Last year, to celebrate successful completion of a project milestone, our group went on a "cultural expedition" to a glass-blowing studio where we were to learn about the craft of glass blowing and even do some of it ourselves. (By the way, it was fun.)

    One of the glassblowers had been making a lot of little jokes about Frodo and Mount Doom. Working with molten glass does that to a person, I guess. When it came time to break up into smaller groups, each working with a different glassblower, the Tolkein-obsessed glassblower announced, "Okay, let's do it this way. Lord of the Ring fans on this side of the room, Star Trek on the other."

    After a brief pause, a few of us casually crossed to the other side of the room.

    Okay, maybe we're nerds. You decide.

    Hey, at least nobody asked, "What about Harry Potter?"

  • The Old New Thing

    Fashion is something that can be acquired by looking at lots of different fashions


    Actress Brenda Dickson teaches us how to be awesome.

    Update: Apparently that video link died within days of my finding it, but there are plenty of other copies floating around the Intertubes. Here's one of many series on YouTube: Part 1 (Fashion), Part 2 (Make-Up), Part 3 (Exercise). and Part 4 (Diet and Nutrition),

  • The Old New Thing

    Why are there two values for PSH_WIZARD97?


    Welcome, Slashdot readers. Remember, this Web site is for entertainment purposes only.

    If you go cruising through the commctrl.h header file, you'll find that there are two different definitions for PSH_WIZARD97:

    #if (_WIN32_IE >= 0x0400)
    #if (_WIN32_IE < 0x0500)
    #define PSH_WIZARD97            0x00002000
    #define PSH_WIZARD97            0x01000000

    Why are there two values for PSH_WIZARD97?

    Set the wayback machine to 1997. (Note: Dates are approximate.) The user interface design team studied how Windows 95 wizards have been faring and have begun using what they've learned to develop the next version of the wizard interface, which they have code-named "Wizard 97". Development in comctl32.dll proceeds based their designs, what with exterior and interior pages, headers and sub-headers, watermarks, all that jazz. Meanwhile, work on Internet Explorer 4 reaches the homestretch, and it's a race to the finish line.

    Internet Explorer 4 wins the race and is ready to ship before the work on Wizard 97 is complete. What do you do? Do you say "Um, hi, Internet Explorer team. Could you slip your schedule by about half a year so we can finish our work on this new wizard design?" Yeah, like the Internet Explorer team are going to say, "Oh, sure, no hurry, take your time. We'll wait. It's not like we're going to get ridiculed for being another six months late."

    And monkeys might fly out of my butt.

    Out the door it goes, with a Wizard 97 design that hadn't gone through a full usability review. To discourage programmers from using this half-finished wizard, put the sentence "Don't use this flag" in the documentation. Boy, that was a close call.

    Since they already "missed the boat", the urgency to complete the work on Wizard 97 vanished. One of the things that came up during the usability review was that the full-page watermark wasn't such a great idea after all. It made the text hard to read, users had difficulty figuring out what they should do, various problems like that. The design for Wizard 97 changed; now the watermark was just a small picture that goes in the corner of the wizard. Of course, the changes weren't just design changes; there were also bug fixes. All the work was done in time for Windows 2000, yippee.

    And then the compatibility bugs started coming in.

    Wait, compatibility bugs? How can there be compatibility bugs? Nobody is using Wizard 97 yet; there's nobody to be compatible with!

    Well, it turns out that programs were indeed using the PSH_WIZARD97 flag from Internet Explorer 4 and expecting to get that old half-baked Wizard 97 design. (After some investigation, I believe we discovered that somebody somewhere had told the MFC folks, "Hey, there's this cool Wizard 97 thing you should use. It's pretty awesome." That someone was overcome with excitement and didn't realize that the work on Wizard 97 was not yet finished and that Wizard 97 was not yet ready for prime time. People who used MFC to write their programs then said, "Hey, look, MFC has support for this new type of wizard!" and started using it.)

    Oh, great, how do you fix this?

    It wasn't pretty, but it had to be done. (The preferred first choice, using a time machine, was unavailable.) The fix was to have two types of Wizard 97; there's the "Internet Explorer 4 version" and the "Windows 2000 version". Of course, nobody wants to officially admit that the Internet Explorer 4 version exists, since during its brief lifetime, it was documented as "Don't use me!" All the changes that were made after Internet Explorer 4 shipped had to be revisited. Each time there was a code change (either to support a new design or just to fix a bug), a test against the wizard flavor had to be made, and the old behavior restored if the old flag was used.

    If new code was added for the Windows 2000 version of Wizard 97, whether it be due to a design change or a bug fix, then it had to be placed behind a check:

        if (program asked for Windows 2000-style Wizard 97) {
            // new behavior here

    Conversely, if code was deleted, it had to be brought back with a version check:

        if (program asked for Internet Explorer 4-style Wizard 97) {
            // old behavior here

    And if behavior changed, you need to have both versions:

        if (program asked for Internet Explorer 4-style Wizard 97) {
            // old behavior here
        } else {
            // new behavior here

    Giving the old and new Wizard 97 flags different values allows the property sheet wizard code to tell whether the program was designed for the bogus Internet Explorer 4 pre-release version of Wizard 97 or the finished Windows 2000 version.

Page 1 of 3 (28 items) 123