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

    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

    Moving by staying put

    • 13 Comments

    A few years ago, Michael Kaplan opined on his distaste for office moves, particular the ones for which there appears to be very little benefit. One of his options was "interview with whatever group moves into Building 24 and work for them instead."

    Many years ago, an organizational change to the project I was working on resulted in my group ceasing to exist. The reason isn't important to the story; what's important is that the members of that group were redeployed to other parts of the project. At the time, I hadn't yet learned that material goods are a burden, and I dreaded moving offices because of all the packing and unpacking I would have to do.

    Solution: Join whatever group was moving into my hallway on the condition that I get to keep my office.

    They gladly accepted the terms of this agreement.

  • The Old New Thing

    The 2010/2011 Seattle Symphony subscription season at a glance

    • 17 Comments

    Every year, I put together a little pocket guide to the Seattle Symphony subscription season for my symphony friends to help them decide which ticket package they want. As before, you might find it helpful, you might not, but either way, you're going to have to suffer through it. Here's the at-a-glance season guide for Gerard Schwarz's final season as the orchestra's music director.

    Week Program Comments 18 12 9A 9B 6AB 6CD 6EF 6G 4B BB MM RA RB BS SS
    09/23
    2010
    Foote: Francesca da Rimini
    Brahms: Symphony #3
    Prokofiev: Piano Concerto #2
    Okay?
    Awesome
    Good
                                 
    09/30
    2010
    Debussy: Pelléas et Mélisande Suite
    Kernis: Air
    Bloch: Baal Shem
    Dvořák: Symphony #7
    Okay
    Good?
    Nervous?
    Excellent
                         


     
         
    10/07
    2010
    Copland: Appalachian Spring Suite
    Gershwin: Rhapsody in Blue
    Ravel: Concerto for Left Hand
    Stravinsky: Symphony in Three Movements
    Excellent
    Awesome
    Excellent
    Okay
                                 
    10/15
    2010
    Bach: Orchestral Suite #1, BWV 1066
    Handel (arr. Schwarz): Concerto Grosso Op 6 No 9
    Bach: Brandenburg Concerto #1
    Handel: Water Music Suite #2
    Excellent
    Awesome
    Excellent
    Awesome
                                 
    10/23
    2010
    Gabrieli: Due Canzoni
    Bach: Toccata and Fugue in D minor, BWV 565
    Handel: Organ Concerto The Cuckoo and the Nightingale
    Widor: Symphony #6 Allegro, Op 42 No 2
    Hanson: Concerto for Organ and Harp
    Poulenc: Organ Concerto in G minor
    Excellent?
    Awesome
    Good?
    Good?
    Wildcard
    Nervous
                                 
    10/28
    2010
    Mozart: Symphony #33, K319
    Copland: Clarinet Concerto
    Schnittke: Moz-Art à la Haydn
    Haydn: Symphony #45 Farewell
    Awesome
    Nervous
    Nervous
    Excellent
                                 
    10/31 Debussy: La Mer (lecture-concert) Excellent                              
    11/04
    2010
    Yannatos: Ritual Images
    Debussy: La Mer
    Beethoven: Piano Concerto #5, Emperor
    Nervous
    Excellent
    Awesome
                                 
    11/11
    2010
    Liszt: Mephisto Waltz #1
    Prokofiev: Symphony #3
    Tchaikovsky: Piano Concerto #1
    Awesome
    Okay
    Awesome
                         
     

         
    11/18
    2010
    Rossini: Overture to Semiramide
    Glass: Violin Concerto
    Bizet: Symphony #1
    Ravel: Boléro
    Awesome
    Nervous
    Excellent
    Awesome
                                 
    12/09
    2010
    Roussel: Bacchus et Ariane Suite #2
    Lieberson: Neruda Songs
    Prokofiev: Romeo and Juliet Excerpts
    Good?
    Nervous
    Excellent
                         
     

     
         
    01/06
    2011
    Sheng: Shanghai Overture
    Bartók: Violin Concerto #2
    Borodin: Symphony #1
    Nervous
    Nervous
    Excellent
                                 
    01/20
    2011
    Mozart: Symphony #28, K189K [200]
    Mozart: Horn Concerto #2, K417
    Mozart: Requiem, K626
    Excellent
    Excellent
    Excellent
                                 
    01/27 Operatic highlights: Dramatic moments Excellent            
     
                   
    01/29 Operatic highlights: Comedic moments Excellent            
     
                   
    02/03
    2011
    Berlioz: Overture to Benvenutto Cellini
    Lalo: Symphonie espagnole
    Bruckner: Symphony #6
    Good
    Awesome
    Nervous
                                 
    02/10
    2011
    Debussy: Prélude à l'aprèes-midi d'un faune
    Messiaen: Oiseaux exotiques
    Mozart: Rondo for Piano in D, K382
    Brahms: Symphony #4
    Excellent
    Nervous
    Awesome
    Awesome
       
     


     
                     
     


     
       
    02/17
    2011
    Telemann: Viola Concerto in G, TWV 51:G9
    Brahms: Serenade #2
    Berlioz: Harold in Italy
    Good?
    Excellent
    Good
                                 
    02/27 Vivaldi: Four Seasons (lecture-concert) Awesome                              
    03/11
    2011
    Graun: Overture and Tra le procelle assorto from Cleopatra e Cesare
    Hasse: Morte, col fiero aspetto from Marc'Antonio e Cleopatra
    Handel: Water Music Suite #1
    Handel: Overture and Piangerò la sorte mia from Guilio Cesare
    Handel: Concerto Grosso in G, Op 6 No 1
    Matheson: The Death of Cleopatra from Cleopatra
    Excellent?
    Excellent?
    Awesome
    Good?
    Excellent
    Wildcard
                                 
    03/17
    2011
    Borodin: Polovtsian Dances
    Khachaturian: Violin Concerto
    Shostakovich: Symphony #5
    Excellent
    Okay?
    Excellent
       
     

     
                     
     

     
       
    03/24
    2011
    Hovhaness: Symphony #7, Nanga Parvat
    Hovhaness: Prelude and Quadruple Fugue
    Hovhaness: Symphony #2, Mysterious Mountain
    Dvořák: Cello Concerto
    Nervous
    Nervous
    Nervous
    Awesome
     



         
     



                       
    03/26
    2011
    Hovhaness: Symphony #14, Ararat
    Hovhaness: Symphony #50, Mount St. Helens
    Elgar: Cello Concerto
    Nervous
    Nervous
    Excellent
     


         
     


                       
    03/31
    2011
    Brahms: Schicksalslied
    R. Strauss: Also sprach Zarathustra
    Saint-Saëns: Symphony #3, Organ
    Excellent
    Polarizing
    Awesome
                                 
    04/07
    2011
    Ravel: Ma Mère L'Oye Suite
    Prokofiev: Violin Concerto #1
    Rachmaninov: Symphony #3
    Awesome
    Polarizing
    Good
       
     

     
                     
     

     
       
    04/21
    2011
    McTee: Double Play
    Gershwin: Concerto in F
    Tchaikovsky: Symphony #5
    Wildcard
    Awesome
    Awesome
                                 
    04/28
    2011
    Sibelius: Symphony #7
    Britten: Violin Concerto #1
    Bartók: Concerto for Orchestra
    Good
    Nervous
    Excellent
                                 
    05/05
    2011
    Martinů: Toccata e due canzoni
    Shostakovich: Piano Concerto #1
    Honegger: Pastorale d'été
    Haydn: Symphony #60, Il distratto
    Nervous
    Good
    Excellent?
    Excellent
                                 
    05/13
    2011
    CPE Bach: Symphony for String Orch. in G, Wq 183/4
    CPE Bach: Double Harpsichord Concerto in F, Wq 47
    CPE Bach: Symphony for String Orch. in D, Wq 183/1
    Bach: Sinfonia from Cantata 42 Am Abend aber desselbigen Sabbats
    Telemann: Tafelmusik III Suite and Conclusion
    Awesome
    Good?
    Excellent
    Good?
    Good?
                                 
    05/19
    2011
    Mendelssohn: The Hebrides
    Mozart: Violin Concerto #4, K218
    Beethoven: Symphony #8
    Excellent
    Excellent
    Excellent
                                 
    05/22 Dvořák: Symphony #9 (lecture-concert) Awesome                              
    06/02
    2011
    Jones: Symphonic Poem
    Liszt: Piano Concerto #2
    Shostakovich: Symphony #10
    Wildcard
    Excellent
    Nervous
                                 
    06/16
    2011§
    Schubert: Symphony #8, Unfinished
    Mahler: Symphony #2, Resurrection
    Awesome
    Polarizing
                                 
          18 12 9A 9B 6AB 6CD 6EF 6G 4B BB MM RA RB BS SS
    † Premiere
    § Schwarz farewell concert
    18 Masterworks 18AB
    12 Masterworks 12AB
    9A Masterworks 9A
    9B Masterworks 9B
    6AB Masterworks 6AB
    6CD Masterworks 6CD
    6EF Masterworks 6EF
    6G Masterworks 6G
    4B Masterworks 4B
    BB Baroque
    MM Mainly Mozart
    RA Rush Hour A
    RB Rush Hour B
    BS Beyond the Score
    SS Symphony Specials

    For those not familiar with the Seattle Symphony ticket package line-ups: Most of the ticket packages are named Masterworks nX where the number is the number of concerts in the package, and the letter indicates which variation. Ticket packages which are identical (or near-identical) have been combined. For example, 6C and 6D are the same concerts; the only difference is that 6C is for Thursday nights, while 6D is for Saturday nights. Split boxes are used for concert differences between near-identical series. (For example, the 18A series gets the Dvořák Cello Concerto whereas the 18B series gets the Elgar.) Some concerts (such as the Rush Hour series) are reduced-program; partially-filled boxes show which works are included.

    Changes from last season:

    • The Masterworks 18 series has two bonus concerts (for a total of 20), down from four bonus concerts last yet. (The 12, 9, and 6 series each have one bonus concert; same as last year.)
    • Discontinued series: 4A.
    • The Popular Classics series became the Rush Hour series (and there are now two of them).
    • The Musically Speaking series became the Beyond the Score series and has become a "one-off" series.
    • The Basically Baroque Series has been renamed the Baroque and Northwest Wine Series. (Tastings take place before the concerts.) It too has become a "one-off" series.

    This chart doesn't include "one-off" concert series such as the Visiting Orchestras or Distinguished Artists series. A "one-off" series is a concert series which shares no concerts with any other series. (Beyond the Score and Baroque and Northwest Wine are grandfathered in; I'll probably omit them in future years.)

    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 my symphony friends. Thus, I rated downward pieces that I personally like but which others might not and rated up pieces that I may not find musically satisfying but which nevertheless tend to be crowd-pleasers.

    These predictions have, of course, proven wrong in the past. Though I finally overcame my Bruckner jinx, and my symphony friends actually liked the Bruckner Fourth, except for the fact that it went on too long. One of my friends described it as "It's like a conversation that starts out really nice, but then it starts to drag on and get repetitive, and they just won't shut up." (How was I to know that Masur would not only use the Hass revision, but also take all the repeats? The work is already too long at 60 minutes; the right thing to do is to cut 20 minutes of it, not to add another 20!)

    Here's what the comments mean. Note that they do not indicate whether the piece is significant in a musicological sense; they're just my guess as to whether my friends are going to like it. (For example, I know that my friends hate minimalism, so I rated the Glass down even though I myself would enjoy it.)

    • 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.

    In many cases, 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

    For better performance, set all your monitors to the same color format

    • 29 Comments

    Pplu wonders why programs run more slowly when the system is running with multiple monitors.

    Well, for one thing, of course, when you have more than one monitor, there's more stuff on the screen for the system to keep track of. It's the same reason that programs run more slowly on a large monitor than on a small monitor.

    And if there's only one monitor, then functions like MonitorFromPoint become trivial if the flag is something like MONITOR_DEFAULTTONEAREST, because when there's only one monitor, answering questions like "What monitor is closest to this point"? becomes very easy.

    If your two monitors are not the same dimensions, then the union of the two monitors will not be rectangular, which makes clipping against the union of all monitors more complicated.

    But I suspect the big penalty for multiple monitors kicks in if you make the mistake of setting your monitors to different color formats, for example, if you set one monitor to 565 format and set another to 24bpp.

    If the two monitors do not use the same color format, then programs will be forced to use DIBs instead of DDBs for screen bitmaps, in case a window is moved to a window with a different color format (or worse, is positioned so it straddles two monitors with different color formats). In principle, programs need only use the "worst-case" DIB; for example, if one monitor is 555 and the other is 565, then a 565 DIB will suffice. In practice, however, most programs just fall back to a 24bpp or 32bpp DIB when faced with monitors with different color formats.

    (You query whether all monitors have the same color format by calling GetSystemMetrics(SM_SAMEDISPLAYFORMAT).)

    Since a format conversion takes place when a DIB is blitted to a device with a different color format, forcing a program to retain its bitmaps as DIBs means that for at least one of the monitors (and probably both), you're going to undergo a format conversion when that DIB is drawn to the screen. There are also a few miscellaneous optimizations which are disabled when not all your monitors use the same color format because the cost of using DIBs outweighs the savings from the optimization.

    So if you haven't already, go into your display settings and check that you set all your monitors to the same color depth. If you don't do this, then a large class of graphics optimizations is lost.

  • The Old New Thing

    A simple Venn diagram teaches you the difference between Norway and Sweden

    • 12 Comments

    Not sure it helps, though.

  • 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

    The Brits once again come up with a clever solution to the problem of the scatterbrained client

    • 11 Comments

    My friend :: Wendy :: got into a state where she kept misplacing her passport. (I guess she keeps moving it around.) The first time she misplaced her passport and gave up looking for it, she reported it missing and received a replacement. Then she misplaced the replacement, and while searching for it, she found the original. She reported the first passport as found; this keeps the issuing government happy since they can take it off their If Somebody Tries To Use a Passport with This Number, Arrest Her list. But they can't reactivate the original passport, because it takes time for the updated list to propagate all around the world, and it would be bad to be travelling through some remote country and find yourself thrown in prison because they didn't get the word that your passport number has been un-revoked.

    Anyway, she gave up looking for the second passport, and applied for another replacement. By this point, the government found itself in a bit of a quandary: Here's a citizen who is legally entitled to a passport but who has also demonstrated a bit of scatterbrainedness. Their solution: Issue a one-year passport. This allows them to fulfill their obligation to their citizens while limiting the damage if the passport is lost yet again.

    (Believe it or not, that's the short version of the story. Here's the long version.)

  • The Old New Thing

    Why doesn't the shell animation control tell me the dimensions of the animation it is displaying?

    • 12 Comments

    As we saw some time ago, the shell animation control suffers from many limitations because its job is to be a scaled-down animation control instead of one of its more full-featured counterparts.

    One customer wanted to know how to load an animation into the shell animation control and then query its dimensions. Well, there is no message that reveals the dimensions of the animation. Why not? Because you should already know.

    You can't use the shell animation control a general-purpose animation control because of those pesky limitations. You can only use animations that you yourself authored to conform to the control's rather stringent requirements. And since you authored those animations yourself, you already know what their dimensions are.

    If you don't know the dimensions of the animation you're putting into the shell animation control, then how do you know that it meets all the other criteria either? In other words, to know that the animation is suitable for the shell animation control you already had to know far more about the animation than its dimensions.

    Remember that the shell animation control supported only what the shell needed it to do when it was introduced in Windows 95. The shell team then figured, "Well, we wrote it, we may as well document it for others to use." Of course, no good deed goes unpunished, because this gift has turned into a liability: Even though Explorer stopped using the shell animation control years ago, the code for the control must remain in the product because it was documented to the public, and along with the code come all the support burdens.

  • The Old New Thing

    Long-term temporary parking?

    • 22 Comments

    On my way to work, I saw a Notice of Proposed Land Use Action. The proposed new use for the property was listed as long-term temporary parking.

    What the heck is long-term temporary parking?

Page 3 of 4 (35 items) 1234