The Old New Thing
Practical development throughout the evolution of Windows.
Latest posts

Follow-up: Portsmouth Spinnaker Tower now open, but maybe you should take the stairs

Portsmouth's ever-delayed Millennium Tower (since renamed Spinnaker Tower) has finally been completed, five years late and £11 million over budget. But even opening day couldn't escape without its own glitches, for the project manager was trapped in a glass-walled lift for over an hour, requiring abseiling engineers to come and rescue him.

There’s something about Rat Poker

When performing usability tests, one of the standard tasks we give people is to install a game, and the game we usually use is The Puzzle Collection. (Yes, it's an old game, but continually updating the game makes it less valid to compare results from one year to the next.) One of the things that the game's Setup does that always confuses people is that it asks you where you want to install it and suggests a directory. If you accept the default, a warning box appears that reads, "The directory C:\Program Files\Microsoft Puzzle Collection does not exist. Do you wish to create it?" People see this dialog box ...

Be careful what you name your product group

They thought they were so clever when they named the Desktop Applications Division. "And the abbreviation is 'DAD', isn't that cute? Complements the Microsoft Office Manager toolbar (MOM)." And then the troubles started. Shortly after the new product group was formed, everybody in the product group started getting email talking about strange non-business things. How's the garden doing? Did you get my letter? When will the twins be coming home from college? The reason is that the email address for sending mail to the entire division was—naturally—"DAD". But it so happens that many people have ...

Answering the phone, a classic rookie mistake

I had taken yesterday off from work just to take a breather, but I stopped by the office in the morning to pick up my bicycle helmet. (How I managed to leave my bicycle helmet at the office is not important.) My office telephone rang and I answered it. As my colleague Ken described it later, "Ah, classic rookie mistake." The call was from an emergency meeting in another group. They called to put me on the hook for a problem with Windows Vista Setup because they believed that my group was responsible, being among those that recently RI'd. I ended up staying until 4pm, then resuming the investigation at home ...

The undeletable Outlook folder

For a while, I've had a few "undeletable Outlook folders". Even after deleting all the messages from them, Outlook just complains when I try to delete them. There was some sort of error message, but of course I didn't read it. The only option was OK, so I clicked it. As I recall, the message said something about "Can't delete because blah blah pending synchronization blah blah." I don't know what "pending synchronization" is, but it must be important if Outlook won't let me delete a folder because of it. Meanwhile, I also noticed that my Sync Issues folder grew by about a dozen error messages every day, and I...

The history of the path separator in Japanese and Korean Windows

Michael Kaplan blows the dust off this classic question.

Thread affinity of user interface objects, part 5: Object clean-up

The window manager and GDI objects as a general rule will automatically destroy objects created by a process when that process terminates. (The window manager also destroys windows when their owner threads exit.) Note, however, that this is a safety net and not an excuse for you to leak resources in your own program with the attitude of "Oh, it doesn't matter, the window manager will clean it up for me eventually." Since it's a safety net, you shouldn't use it as your primary means of protection. For one thing, leaving junk behind to be cleaned up is just plain sloppy. It suggests that your program is too laz...

Make money working at home in your pajamas, and it’s completely legal!

Become a professional captioner.

Thread affinity of user interface objects, part 4: GDI objects and other notes on affinity

GDI objects are much simpler. As a general rule, they all have process affinity: They can be used by any thread in the process that created them. If you use a GDI object from multiple threads, it is your responsibility to coordinate the object's use. Note that the window manager and GDI as a general rule keep their respective objects thread-safe. When I say that it is your responsibility to coordinate an object's use from multiple threads, I mean that you have to coordinate among your own threads if you're going to modify the object from one thread and read from it on another or modify it from two threads. For ...