April, 2006

  • The Old New Thing

    The 2006/2007 Seattle Symphony subscription season at a glance


    I put together this little pocket guide to the 2006/2007 Seattle Symphony subscription season for my symphony friends to help them decide which ticket package they wanted. Maybe it'll help you, too. Maybe not. But since I already put it together, I may as well post it. Explanatory notes follow the table.

    Weekend Program Comments M L E O B C A S P G F
    09/28/2006 Rachmaninov: Third Piano Concerto
    Beethoven: Symphony #3 (Eroica)
    10/05/2006 Copland: Music for the Theatre
    Mendelssohn: Violin Concerto
    Brahms: Symphony #1
    11/02/2006 Berlioz: Royal Hunt and Storm
    Harbinson: Double Bass Concerto†
    Tchaikovsky: Symphony #5
    11/09/2006 Brahms: Hungarian Dances
    Bartók: Violin Concerto #2
    Stravinsky: Petrouchka
    11/16/2006 Grieg: Peer Gynt
    Williams: Bassoon Concerto
    Schumann: Symphony #1 (Spring)
    12/01/2006 Weber: Invitation to the Dance
    Tchaikovsky: Swan Lake (excerpts)
    Prokofiev: Cinderella (excerpts)
    Ravel: La Valse
    12/28/2006 Beethoven: Symphony #9 Awesome                      
    01/04/2007 Dvořák: Serenade for Strings
    Barber: Cello Concerto
    Elgar: Enigma Variations
    02/01/2007 Kernis: Newly Drawn Sky
    Kodály: Hary Janos Suite
    Brahms: Piano Concerto #2
    02/08/2007 Grieg: Piano Concerto
    Bruckner: Symphony #9
    02/15/2007 Rimsky-Korsakov: Russian Easter Overture
    Pärt: Tabula Rasa
    Sibelius: The Swan of Tuonela
    Sibelius: Symphony #7
    03/03/2007 Beethoven: Piano Concerto #2
    Beethoven: Piano Concerto #1
    Beethoven: Piano Concerto #3
    03/15/2007 Beethoven: Egmont Overture
    Beethoven: Triple Concerto
    McKinley: Symphony #7†
    Stravinsky: Symphony in Three Movements
    03/22/2007 Weber: Ruler of the Spirits
    Mozart: Violin Concerto #4
    Shostakovich: Symphony #10
    04/05/2007 Beethoven: Missa Solemnis Good                      
    04/12/2007 Stravinsky: Feu D'artifice
    Prokofiev: Piano Concerto #3
    Messiaen: L'Ascension
    Debussy: La Mer
    04/19/2007 Ravel: Ma Mère L'oye (Mother Goose)
    Szymanowsky: Symphony #4
    Mussorgsky/Ravel: Pictures at an Exhibition
    04/29/2007 Prokofiev: Symphony #1 (Classical)
    Bobby McFerrin Improvisation
    Bizet: Symphony in C
    05/31/2007 Martinů: Double Concerto
    Kurtág: ... quasi una fantasia ...
    Bartók: Bluebeard's Castle
    06/07/2007 Janáček: Glagolitic Mass Nervous?                      
    06/14/2007 Mendelssohn: The Hebrides
    Bruch: Scottish Fantasy
    Stock: Symphony #5†
    Strauss: Der Rosenkavalier
    06/21/2007 Schoenfield: Klezmer Rondo
    Poulenc: Gloria
    Dvořák: Symphony #8
    06/27/2007 Mahler:Symphony #3 Polarizing                      
    † Premiere
    Listener's Choice
    Musically Speaking
    Popular Classics
    Afternoons with the Symphony


    This chart doesn't include "one-off" concert series such as the Visiting Orchestras or Distinguished Artists series.

    Two boxes in the Bravo series are marked ½. The Thursday Bravo series includes the Ravel concert, whereas the Saturday Bravo series includes the Beethoven concert.

    The comments column very crudely categorizes the works to assist my less-classically-aware friends. This is, of course, a highly subjective rating system, but I tried to view each piece from the ears of somebody new. Thus, I rated downward pieces that I personally like but which others might not. These predictions have, of course, proven wrong in the past. For example, this season, I was pleasantly surprised to find that one of my friends started getting into Kodály after hearing the Dances of Galanta. (I consider Kodály an acquired taste.)

    Here's what the comments mean:

    • Awesome: Guaranteed crowd-pleaser.
    • Excellent: You will definitely like this piece.
    • Good: You will probably like this piece.
    • Okay: You may like this piece.
    • Nervous: I have a bad feeling about this one.
    • Polarizing: Some people will love it; others will hate it.
    • Wildcard: I have no idea what will happen.

    A question mark means that I am not familiar with the piece and am basing my evaluation on what I know about the composer (or am just guessing).

  • The Old New Thing

    Adding a new flag to enable behavior that previously was on by default


    One of the suggestions for addressing the network compatibility problem was to give up on fast mode and have a new "fast mode 2". (Equivalently, add a flag to the server capabilities that means "I support fast mode, and I'm not buggy.") This is another example of changing the rules after the game is over, by adding a flag to work around driver bugs.

    Consider a hypothetical program that uses fast mode on Windows XP. It runs against a Windows Server 2003 server and everybody is happy. Suppose you make a change to Windows Vista so that it requires that servers set a new "fast mode 2" flag in order to support fast mode. When the customer upgrades their client from Windows XP to Windows Vista, they would find that their hypothetical program ran much slower. Whose fault is it? Not the hypothetical program that was using fast mode on Windows XP; that program is using fast mode correctly. Not the Windows Server 2003 machine; that server supports fast mode correctly. Is it Windows Vista, then, that is at fault?

    "Hey, don't blame me," you answer. you answer. "It's that guy over there. That guy you've never heard of. He made me do it. Blame him!"

    To describe this sort of behavior I like to steal a phrase from Albert Einstein: "Spooky action at a distance". (Einstein used it to describe what in modern physics is known as quantum entanglement.) In this particular situation, we have a conversation between two participants (the client software and the server software) mediated by a third (Windows) which collapses due to the mere existence of a fourth party not involved in the conversation! It's as if your CD player suddenly lost the ability to play any of your music CDs because some company you've never heard of halfway around the world pressed a bunch of bad CDs for a few months earlier this year.

    Some people suggested, "Why not have a flag that says 'I support fast mode'?" Indeed that flag already exists; that's why Windows Vista was trying to use fast mode in the first place. The problem wasn't that the server didn't support fast mode. The problem was that the server had a bug in its fast mode implementation.

    "Okay, then add a new flag that says 'My fast mode isn't buggy.'" Consider also how this course of action would look after a few revisions of the specification:

    In response to the QUERY_CAPABILITIES request, the server shall return a 32-bit value consisting of zero of more of the following bits:

    0x00000001  This server supports fast mode
    0x00000002  This server supports fast mode and doesn't have the bug where enumerating a directory with more than 128 files fails on the 129th query
    0x00000004  This server supports fast mode and doesn't have the bug where the long file name is reported incorrectly in the response packet
    0x00000008  This server supports fast mode and doesn't have the bug where directories whose names consist entirely of digits are misreported as files
    0x00000010  This server supports fast mode and doesn't have the bug where the enumeration resets if a file is created in the directory while the enumeration is in progress
    0x00000020  This server supports fast mode and doesn't have the bug where FindNext returns failure even though there are still files to be enumerated

    If a new capabilities flag were created for every single server bug that was discovered, the capabilities mask would quickly fill up with all these random bits for bugs that were fixed ages ago. And each time a bug was found in any one server, all servers would have to be updated to add the new capabilities bit that says, "I'm not that buggy server you found on April 8th 2006," even the servers sitting in a locked closet whose operating systems are burned into EPROMs. And if you're the author of a new server, which capabilities bits do you set? Do you claim that you don't have the bug where FindNext returns failure even though the enumeration hasn't completed? What if, six months after you ship, somebody finds a bug in your server of exactly that sort? I guess this mean that the next revision of the protocol will have to have a new flag:

    0x00000020  This server supports fast mode and doesn't have the bug where it claims that it doesn't have the "FindNext returns failure even though there are still files to be enumerated" bug, even though it actually does have the bug, but in a more subtle manner

    Or maybe you're convinced that you don't have any bugs in your "fast mode" implementation. Do you report 0xFFFFFFFF to say "I have no bugs at all, not even the ones people might discover later in other implementations"? What happens when the 33rd "fast mode" bug is found? Do we have to have a QUERY_CAPABILITIES2 function? If a capabilities bit is created for every single bug that ever existed in a networking protocol implementation, you'd have a few thousand capability bits all of whom mean "I don't have that bug where..."

    Now, I'm not saying that this course of action is out of the question. Sometimes you have to do it, but you also have to realize that the cost for making this type of change is very high, and the benefit had better be worth it.

  • The Old New Thing

    Maybe you don't sound like Carl Kasell, but you can have his job


    According to the wonderful Mixed Signals, the Corporation for Public Broadcasting is searching for radio hosts. They're calling it "American Idol for public radio".

    I recently stumbled across Mixed Signals and was instantly hooked. Some of my recent favorites:

    The curatorship of Mixed Signals appears to change hands rather frequently. The last few entries I linked above were from Robert Smith, whom I had the pleasure to meet at KUOW studios when he was stationed in Seattle.

  • The Old New Thing

    How to fill in that number grouping member of NUMBERFMT


    If you look at the NUMBERFMT structure, the way groups are expressed by the Grouping member do not match the value returned by LOCALE_SGROUPING:

    Grouping Sample Culture
    3;0 3 1,234,567 United States
    3;2;0 32 12,34,567 India
    3 30 1234,567 (none I know of)

    LOCALE_SGROUPING expresses grouping as a series of semicolon-separated numbers, each expressing the number of digits in each group (least-significant group first). A trailing zero indicates that the last grouping should be repeated indefinitely. For example, "3;2;0" means "Group the three least significant digits, then in twos until you run out of digits." If there is no trailing ";0", then there are no commas past that point. For example, "3" means "Group the three least significant digits, then stop."

    The Grouping member expresses the grouping rules differently. Each significant digit represents a group, with the most significant digit representing the least-significant group, with the units digit repeated indefinitely. For example, "32" means "make a group of three digits, then group by twos thereafter." To suppress the repetition, multiply by ten.

    In other words, the two systems are basically the same, with the Grouping consisting of the LOCALE_SGROUPING string with the semicolons removed. Except that the meaning of the trailing zero is reversed, so if LOCALE_SGROUPING has a trailing zero, you have to remove it to get the Grouping, and if it lacks a trailing zero, then you have to add one to the Grouping.

    It's kind of strange that the two systems differ, considering that they both came from the same NLS team! It's probably a case of parallel evolution, wherein the locale-string folks and the number-formatting folks came up with their respective systems independently.

    Writing code to implement this conversion from LOCALE_SGROUPING to Grouping shouldn't be hard once you understand the algorithm, so I'll leave that as an exercise.

    Fortunately, in real life you rarely have need to perform this conversion, for you can just pass the desired locale as the first parameter to the GetNumberFormat (or even better, LOCALE_USER_DEFAULT), pass a NULL pointer as the lpNumberFormat, and let NLS do all the work.

  • The Old New Thing

    Merchandise your food with pride


    There is a new placard in our cafeteria which reads "Merchandise your food with pride". That's the first time I've seen the word "merchandise" used as a verb.

    Here, I'll translate that last paragraph into management speak for you:

    The cafeteria newly signed a placard whose read is "Merchandise your food with pride". That's my first see of a verbed "merchandise".

    Earlier this year, I was chatting with a Boeing employee who mentioned that he "had to status an action item". I have yet to see the word "status" used as a verb at Microsoft, but it's only a matter of time.

  • The Old New Thing

    Locale-sensitive number grouping


    Most westerners are familiar with the fact that the way numbers are formatted differ between the United States and much of Europe.

    Culture Format
    United States 1,234,567.89
    France 1 234 567,89
    Germany 1.234.567,89
    Switzerland 1'234'567.89

    What people don't realize is that the grouping is not always in threes. In India, the least significant group consists of three digits, but subsequent groups are in pairs.

    India 12,34,567.89

    I've also seen reports that the first group consists of five digits, followed by pairs:

    India 12,34567.89

    Meanwhile, Chinese and Japanese traditionally group in fours.

    China, Japan 123 4567.89

    What does this mean for you? Don't assume that numbers group in threes, and of course you can't assume that the grouping separator is the comma and the decimal character is the period. Just use the GetNumberFormat function and let NLS do the work for you.

    Next time, a little more about that NUMBERFMT structure.

  • The Old New Thing

    Where did start.com get its name?


    I remember some time ago getting a piece of email that basically said, "Hey, is anybody using start.com?"

    I have since learned that that domain was registered by the marketing department, presumably to "synergize" with the "Start Me Up" campaign or something like that, but nothing ever happened with it. Nevertheless the registration kept getting renewed year after year. (Perhaps we should also put marketing in charge of renewing passport.com since they seem to do a better job of keeping on top of expiring registrations than whoever is in charge of Passport.)

    It was probably at about the time I got that email that the start team (except that wasn't their name yet) was looking for a domain name they could use to host their little experiment, and they stumbled across start.com and wondered whether anybody was using it. Nobody was, so they took it and did something interesting.

    The rest is history.

    (Oh wait, this was history, too.)

  • The Old New Thing

    Chain tax preparers do not fare well in undercover investigation


    The Government Accountability Office paid nineteen visits to chain tax preparers, presented information on two hypothetical families, and asked for assistance in preparing the tax return. "Only two returns showed the correct refund amount, but both of those returns included errors." The article goes into specifics of what sorts of mistakes were made. A Marketplace report added that mistakes with tax credits were particularly bad because messing them up can render you ineligible for claiming them in the future.

    Add to that the plans for the IRS to permit tax preparers sell information about their clients to marketers and the fact that major tax preparation firm H&R Block got its own taxes wrong [found a not-yet-404'd link - 2pm], and my decision to do my own taxes by hand doesn't seem so kooky after all, now, does it...

    In other tax-day news, I will be heading to San Francisco on the 15th for a family event. I don't have a precise agenda, but I left time to be a tourist on Monday the 17th. I'll most likely take the War Memorial and Performing Arts Center tour at 10am, then head north to check out the Presidio (which was still a military base when I lived in the Bay Area). If you want to meet up, you can drop me a message today or tomorrow via the contact page. I won't be checking my email much while I'm away (that's why it's called a "vacation", see), but before I leave I'll set up my voicemail to forward to my mobile phone. Call Microsoft Corporate Headquarters, press "2", then say my name. (The voicemail lady will say, "Calling the office". Don't be alarmed.)

    When talking to the voicemail lady, be careful to enunciate clearly, because there are also a Raymond Cheng and a Ray Chen at Microsoft. We get each other's stuff occasionally but it usually gets sorted out without too much trouble since we each work on completely different projects. (Bonus trivia: When Raymond Cheng first arrived at Microsoft, I was his mentor!)

  • The Old New Thing

    Where did the name for Microsoft Access come from?


    We've seen how the names for some Microsoft products had to be changed due to a name conflict. I'm told that the people who had to come up with the name for the database product avoided this pitfall in a clever way: Instead of trying to avoid a name that was already taken, they intentionally used a name that was already taken: By Microsoft itself.

    They discovered that Microsoft had a long-forgotten terminal emulator product called Microsoft Access. "Access" sounded like an appropriate name for a database product, so they blew the dust off it and gave the name a new life.

  • The Old New Thing

    News for dummies in French and English


    In case you didn't get the joke, "News for dummies" is just my nickname for the news designed for non-native speakers. It tends to be spoken more slowly and use less advanced vocabulary. I use the term because I'm the dummy, you see. If I were smart, then I'd use the news for native speakers. (Sometimes I give it a shot and then my head explodes. German tends to explode my head more than Swedish.)

    In response to my links to the Swedish and German news for dummies, commenter David Conrad asked if there was an equivalent service in French. I don't speak French myself, but a little bit of web searching turned up Le journal en français facile which appears to be the news in easy French. They even have a quiz afterwards to see how good a job you did. And like Deutsche Welle, they also have a series of online French lessons.

    I didn't have quite as much luck finding a Japanese version, but this page may help. (And I amused myself by listening to the Japanese news in Swedish.)

    Commenter Peter Chen wonders if there's an English news for dummies. A very quick search at the Voice of America News site reveals News in Special English, a service that provides the news and cultural information about the United States in Special English. Analogous with the Swedish Klartext style, Special English uses a reduced vocabulary, avoids idioms, and keeps to a simple sentence structure.

    Here one way to find the news for dummies in various languages: Choose a likely country for the language you are interested in. Find the national radio broadcast service for that country. Go to their web site and start poking around. (Of course, you have to be able to read the language you're searching for.) Often—two out of three in today's examples—you will find the "news for dummies" on the front page or close to it.

Page 2 of 4 (34 items) 1234