次の方法で共有


What would Feynman do?

No one I know at Microsoft asks those godawful "lateral-thinking puzzle" interview questions anymore. Maybe someone still does, I don't know. But rumour has it that a lot of companies are still following the Microsoft lead from the 1990s in their interviews. In that tradition, I present a sequel to Keith Michaels' 2003 exercise in counterfactual reasoning. Once more, we dare to ask the question "how well would the late Nobel-Prize-winning physicist Dr. Richard P. Feynman do in a technical interview at a software company? "

Interviewer: Now we come to the part of the interview where we test your creative thinking. Don't think too hard about it; just apply common sense and explain your reasoning. Here's the problem.

You are in a room with three switches that each control a different light fixture in another room. You cannot see from the switch room into the lamp room. Your task is to determine which switches control which light fixtures, but you may only go into the room with the lights once. How do you determine which switch controls which light?

RPF: That seems straightforward. I could obtain a number of large mirrors, and, if necessary, a telescope. I enter the room with the lights once and position the mirror so that it reflects all three lights out the door of the room.  I continue placing mirrors, aligning them as necessary to reflect the photons emitted by the lights until I am back in the room with the switches. Now I can see the lights, possibly through the telescope if the distance is large, and I can toggle the switches on and off so as to determine which light is controlled by which switch.

Interviewer: Um. Yeah, I suppose that would work. But what if you didn't have big mirrors, or couldn't align them well enough?

RPF: Then I could obtain an inexpensive digital video camera and put it on a dolly with a sufficiently long rope attached to it.  I could put the video camera in the room with the lights, turn it on, and then take the other end of the rope back to the room with the switches. I'd then play with the switches for a while and take notes on which switches I flipped at what time.  Then I'd haul the camera on its dolly back into the switch room and review the recording. By correlating my notes of what switches were flipped at what time with the recording of the lights, I could correlate lights to switches.

Interviewer: I forgot to mention that once you enter the room with the lights, you are not allowed to come back to the room with the switches.

RPF: That is an unusual constraint that perhaps you ought to have mentioned earlier, but I'll go with it. In that case I would take a different approach. But first I'll need more information. Can I assume that the lights and the switches are correctly wired according to the National Electric Code of the United States? That is, that the switches interrupt the hots, not the neutrals, that the switches are standard-duty switches rated to interrupt 15 amps of 120 volt alternating current, and so on?

Interviewer: Yeah, I guess so.

RPF: And these are single switches? Or is it possible that the switches are part of a multi-location switch, like you see in houses where there are two light switches for the same light, say, at the top and bottom of the stairs?

Interviewer: Does it matter?

RPF: Certainly it matters! You're asking me a question about correctly deducing the properties of a 120 volt electrical system. The resistance across a well-grounded human being is, I don't know, call it 1000 ohms, and we know that current is equal to voltage divided by resistance. That means that an accidental shock could put a current of 120 milliamps across that human, which is within the range that will stop someone's heart. I presume you know the details of the system you are asking me to diagnose; the safety precautions I'm going to describe will be different depending on the known and unknown aspects of the electrical system.

Interviewer: Right. Suppose they are just normal switches, nothing fancy.

RPF: Great. Are the three switches all in one triple-wide junction box, as those switches over there on your wall that control your lights in your office are, or are there three different junction boxes, one for each switch?

Interviewer: The former.

RPF: As I'm sure you know, there are two standard ways of wiring three single-location switches as you describe. The first is to bring the hot and neutral return wires from the power source to the triple-switch box, then split the hot into three to power each switch, and then run three switched hot wires and three unswitched neutral wires, one pair to each light. The second way is to do the opposite: run the hot and neutral from the panel to each light, and then run a pair of hot wires from each light to its switch. The switch joins together the two hot wires so that one of the hot wires is unswitched and the other is switched. The lights are then energized by the switched hot. Which of these two standard configurations did the electrician who wired this system use?

Interviewer: I don't think it matters. But I don't actually know how to wire a light switch.

RPF: It seems odd that you would ask me a question about deducing properties an electrical system but not know the details of that electrical system.

As a simplifying assumption let's suppose that the system is wired with the first configuration I described. That is, there are "line" hot and neutral wires in the switch box, and that the hot is interrupted by the three switches. This means that when I remove the cover of the light switch, I can easily determine which hot wire is coming from the panel, and which switched hot wires are going to the fixtures. Before I remove the cover of course I would find the electrical panel and de-energize the circuit that powers the switch.  If necessary, I could simply de-energize every circuit, if for some reason I could not reliably determine which breaker corresponded to the circuit I was about to work on. I would also inform everyone in the vicinity that there was a breaker switched off and that I was working on the mains. I'd probably post a sign that said to not turn the power back on, and if it was equipped with a lock, I'd lock the breaker in the off position and pocket the key. I've been shocked enough times already in this life; I'd rather not take a chance on being electrocuted for the purposes of your exercise.

At this point I note that the problem you pose is, in a trivial sense, solved.

Interviewer: What on earth are you talking about?

RPF: The problem was to determine which switch controls which lights. With the mains power turned off, in a sense none of the switches control any of the lights. Any of the switches can be in any position and none of the lights will go on. But I think that's not the sort of solution you had in mind.

Interviewer: You are correct; that's not where I was going with this.

RPF: Now that the power is off I can safely disassemble the light switch junction box and disconnect the three switched hot wires from their switches. I would obtain a piece of standard NM-14/3 copper wire long enough to go from the switch room to the lamp room. Attach the white conductor to the disconnected switched hot wire of the first switch, the black conductor to the second and the red conductor to the third. I'd then carry the other end of my wire to the room with the lights, which should all be off. I'd remove the lamps from the fixtures, and then use the conductor as a continuity tester. By using a nine-volt battery and a DC volt meter, I can determine when each of the three conductors completes a circuit with the hot portion of the light fixture. I'd then know which lamp corresponds to which switch.

Interviewer: What if it was infeasible to obtain a piece of conductor that long?

RPF: By the statement of the problem there already are at least three conductors that long going between the switches and the lights, so it was feasible for someone already. Unless you are implying that the light switches are actually part of some sort of radio control system. Again, this seems like a fact about the system that you ought to have mentioned earlier; you did say that these were "nothing fancy" 120 volt AC switches.

Interviewer: They're just normal switches. But I think you've forgotten something else.

RPF: Yes, I see your objection. I asked earlier if the switches were rated to 15 amps at 120 volts but I did not ask if the light fixtures were. If the light fixtures are low-voltage fixtures then there is an AC transformer sitting between the high-voltage switched hot that I've got my continuity tester on and the low-voltage fixtures. My nine volt direct current continuity tester isn't going to give me a good result in that case.

Interviewer: Actually I was going to say that since you're not allowed to go back into the room with the switches, you'll be leaving this scenario with the switches disassembled and the breaker locked in the off position.

RPF: You make an excellent point. I should come up with a solution that leaves the switches assembled, since I'm not allowed to come back.

Interviewer: Yes, you should. Can you?

RPF: Suppose instead of attaching a continuity tester after I disassemble the light switches, I simply swap out all of the light switches for dimmers. I set the first dimmer to low, the second dimmer to medium and the third dimmer to high. I restore the power, and now when I go to the other room, I know which light corresponds to which switch by observing their relative brightness.

Interviewer, relieved: Now you're getting somewhere. But...

RPF: Yes, again I see the problem you're about to point out. If the lamps are fluorescent then two of them will be off or flickering, only the one on "high" will be on, so I have possibly only determined which light is the "high" dimmer switch. And if the lamps are incandescent, then their brightness could be different depending on their wattage. It was not a condition of the problem scenario that the three lamps all be incandescent bulbs of the same voltage and wattage. I haven't actually solved the problem. Instead I could remove the lamps and test each fixture's hot-to-neutral potential with an AC volt meter to see which one has the high, medium or low voltage. Though that again is assuming that there aren't transformers in there that are changing the voltages.

Interviewer: Forget about measuring the voltage already! Suppose you can't reach the fixture to measure its voltage.

RPF: Again, I must point out that it seems very odd to ask a question about diagnosis of an electrical system while not allowing the diagnostician to use common electrical tools. But anyway, you said that I was on the right track, so let's go with that. We know that modern dimmers do not put a variable resistance across the AC signal; rather, they selectively "cut out" a variable-sized portion of the wave and leave the rest of the cycle in its normal size and shape. We could build a device that works analogously to a dimmer, but much slower. The device could have a couple of rotating cams that flip a switch on and off once a second. Now we need not disassemble any of the switches, or cut the power at the panel. We attach the device to the first switch, flip the second switch off, and the third switch on. Since we have already established that the switches are single-location switches that have been wired correctly according to the NEC, we know that the switch in the "up" position is energizing its lamp and the one in the down position is off.  Now we go into the other room. The lamp that is off is controlled by the third switch, the lamp that is on is controlled by the second, and the one that is flipping on and off every second is controlled by the first. This system will work no matter what kind of lamps are in the fixtures, provided of course that they are good lamps, not burned out.

Interviewer: Well I suppose that would work. All of your solutions so far require some kind of equipment. Could you solve the problem without building anything or using special tools, by taking advantage of some other factor?

RPF: Like what?

Interviewer: Like, that lamps produce effects other than lighting a room.

RPF: For example?

Interviewer, exasperated: You could turn two switches on and one off. Then wait a minute, and turn the third switch off. When you go to the other room, the lamp controlled by the first switch will be on, the lamp controlled by the second switch will be off and cold, and the lamp controlled by the third switch will be off and hot. That seems a lot easier than all this rigamarole about disassembling the switches or building custom equipment.

RPF: How am I to measure the heat of the lamps without special equipment? You just said that I couldn't reach them.

Interviewer: Um. Yes, I suppose I did say that.

RPF: I can see a number of additional problems with your heuristic. You haven't specified how far it is between the rooms, but have several times implied that it is a considerable distance; I can't see the light from the switch room, I can't align my mirrors and I can't bring a conductor that long for continuity testing all imply considerable distance between the switch room and the light room. The time it takes me to get from one room to another can give the third lamp time to cool. The third lamp might not be very hot to begin with; if the fixtures are fluorescent bulbs, as they are in this building, or modern LED bulbs, then their heat output is far lower than an incandescent bulb. We also haven't specified where this scenario takes place. If it is in a very hot climate, like Los Alamos in the summer, both de-energized lamps could reasonably be warm to the touch, and if it is in Alaska in the winter in an uninsulated room then both could reasonably be cool by the time I get there. Your proposed heuristic depends upon a number of conditions that were not given in the problem. And it is in general a bad idea to test whether something is extremely hot by touching it.

Interviewer: Well I think that concludes this portion of the interview. Before we let you go for the day do you have any questions for me about this company, this team or the job?

RPF: Yes. When you build software algorithms, do you build systems using well-established software engineering principles to produce software that conforms to industry standards and practices?

Interviewer: Of course.

RPF: And do you use software analysis tools, like profilers, debuggers, theorem provers, and so on, to facilitate detection and diagnosis of flaws?

Interviewer: Yes, again, of course we do.

RPF: Then why would you ask an interview question that tests my willingness to abandon industry-standard, well-established techniques that use common electrician's tools to determine continuity of a portion of an electrical system? And why is the solution you were clearly driving me towards one which takes advantage of an undocumented and unreliable epiphenomenon? Does your team usually write code whose correctness relies upon undocumented and unreliable correlations, correlations whose magnitudes can vary widely as a result of implementation details?

Interviewer: Thanks for coming in Dr. Feynman. We'll be in touch.

Comments

  • Anonymous
    February 13, 2011
    The comment has been removed

  • Anonymous
    February 13, 2011
    Ha ha! I loved reading "Surely You're Joking, Mr. Feynman!" and I've listened to a few recordings of his lectures... this piece really captures his voice. The last paragraph is what really counts. I think we need a tl;dr   ;)

  • Anonymous
    February 14, 2011
    Ha ha, perfect timing for a Monday afternoon (well, it is where I am anyway)

  • Anonymous
    February 14, 2011
    Absolutely brilliant.  Thank you, Eric.

  • Anonymous
    February 14, 2011
    Bravo Eric!  That was brilliant :-)

  • Anonymous
    February 14, 2011
    This might be the funniest piece ever written that contains the word "epiphenomenon".

  • Anonymous
    February 14, 2011
    This was absolutely fantastic! Many thanks Eric.

  • Anonymous
    February 14, 2011
    My first software interview I was asked "What is the purpose of art?".  The first response was "Is it necessary for art to have a purpose?".  Tedium ensued and shortly after that point, I gave up on the company. That's a great comeback. I would have probably asked a different clarifying question: before I can describe the purpose of 'art' I'll need a clear definition of what art is, and how to know when a particular thing is 'art'. So, give me a precise definition of 'art' and then we can talk about its purpose. But what a ridiculous question. Any reason why it would be asked in a technical interview? -- Eric My tactic leans more toward having the candidate recast a problem they've solved before (or should have) into a technology they're unfamiliar in. One of my best hires was a person who'd worked on heart monitors -- I taught him the basics of writing IEnumerable methods, and had him write one that took the input stream and returned the time-stamped pulse peaks.

  • Anonymous
    February 14, 2011
    Awesome..  Well written Eric.

  • Anonymous
    February 14, 2011
    Hilarious! I hate these kinds of questions. My answer would have been "If I can only go into the room once, why should I care what each switch does? If the knowledge gained is not reusable, then the ROI of the system is zero and the project should be abandoned."

  • Anonymous
    February 14, 2011
    I think in many cases these types of questions are still useful and this dialogue, while hilarious, is a great example of why.   The interviewer is clearly of the type of interviewer who is only interested in "right" answers and is completely ignoring the fact that the interviewee has a vast array of technical knowledge.  The interviewee is clearly a bad fit for this company, assuming that the interviewer is an actual developer, not some HR person with a list of questions. At every point in this dialogue could more interesting discussions had been spun off to discuss the interviewer experience, and approach to solving problems.  Given RPF's depth of knowledge it would have been smart to realize this right away, give away the answer, and then compare and contrast the "clever" (generally accepted answer) with other methods that RPF proposed.  Instead, by the time a conversation had started (at the very end), the interviewer had already formed a negative opinion, and the interviewee was clearly annoyed. When I interview, I keep the puzzles to a minimum, and if any, I preface them with a statement that my goal is not to see if a right answer can be reached, but simply to discuss problem solving in a more free-form manner.  It is a good way to lighten the mood after "tell me about a situation when..." type questions.

  • Anonymous
    February 14, 2011
    Simply amazing!

  • Anonymous
    February 14, 2011
    The comment has been removed

  • Anonymous
    February 14, 2011
    Excelent! But now let's change the topic to round manhole covers: hebig.org/.../003029.php

  • Anonymous
    February 14, 2011
    Not all lamps emit heat... It was funny though..

  • Anonymous
    February 14, 2011
    Did he get the job?

  • Anonymous
    February 14, 2011
    The comment has been removed

  • Anonymous
    February 14, 2011
    Gabe: Feynman might say, "So the Facilities guy works there; he probably knows which switches work which lights. I ask him. If he doesn't know, I'll give him $40 to hang around for ten minutes while we figure it out. Then I'll help him label the switches, and everyone will be happy."

  • Anonymous
    February 14, 2011
    The comment has been removed

  • Anonymous
    February 14, 2011
    The comment has been removed

  • Anonymous
    February 14, 2011
    Simply brilliant... I almost rolled off my chair reading and laughing...

  • Anonymous
    February 14, 2011
    The comment has been removed

  • Anonymous
    February 14, 2011
    Thumbs up! Haven't laughed so much at a joke in a long time...

  • Anonymous
    February 14, 2011
    I assume Feynman was hired. In marketing.

  • Anonymous
    February 14, 2011
    Anyway, concerning: "No one I know at Microsoft asks those godawful "lateral-thinking puzzle" interview questions anymore. Maybe someone still does, I don't know." - I was asked the same question only 2 years ago at Microsoft (Denmark), so the question is still popular there.. :)

  • Anonymous
    February 14, 2011
    The comment has been removed

  • Anonymous
    February 14, 2011
    Ignoring the fact that the interviewer is horrible and not actually engaged with RPF, I will provide a rebuttal to RPF's final comment: If this is a one-off problem and the goal is to solve it quickly, a quick and dirty "hacky" solution relying on the heating properties of the lights would not be so unreasonable.  The RPF solutions might be more robust, but they are also more time consuming. There are plenty of real-world problems where some sort of security-related concern (or bureaucracy) will result in arbitrary "stupid" requirements like only entering the room once.

  • Anonymous
    February 15, 2011
    The comment has been removed

  • Anonymous
    February 15, 2011
    When asked this question first ask - "Is there any documentation?"  - good software should be well documented (electrical diagram) - maybe even comments on the switches themselves ("north wall lights", "Middle lights", etc.) If there's no documentation: "Has anybody else done this before that I can ask?" - A good programmer wouldn't reinvent the wheel - chances are somebody else in the office had to work with this before and knows the answer so that you don't have to waste time on it. If nobody else worked on it: "Is there a standard?  I.E. the left most switch controls the leftmost lights, etc.?"  - Good programming follows standards which are not only easy to find, but intuitive, so that learning an API doesn't require the same amount of specialized knowledge that knowing a language requires. If there are no standards: "Are there similar light switches I can work with? Maybe there are three switches controlling three lights in the room I'm in?" - often if there's no documentation and nobody else knows the answer and there aren't obvious standards then looking at other similar code can help get a grasp of what you need to do for your own work. If there's nothing similar, no standards, no experts, and no documentation: "It would probably be best to be rewired, documented, and brought up to standard specifications.  It'll cost more up front, but you'll save a lot in the long run."  

  • Anonymous
    February 15, 2011
    Bravo.  I'll disagree with an earlier commenter: I think the voice is spot on--not how Feynman talked, but how he might have while putting someone on. This is so well done that I'm going to speculate that within 6 weeks it will be circulated by chain letter, attributed to the man himself.  You might as well send a note to Snopes right now.

  • Anonymous
    February 15, 2011
    The comment has been removed

  • Anonymous
    February 15, 2011
    This reminds me of a question I was presented with during an interview last May. It was to the effect of: "You're given 9 items and a scale. 1 item weighs more than the others, which are identical. How many inspectiions are required to find the 1 item?" The programmer in me said, well, just loop over the items and when I find a heavier item, return. Done. I went through a couple versions of that but they eventually said "forget programming, use the scale, focus on least number of inspections." Eventually I arrived at the answer they were looking for. I realize they were just seeing how I would think about the problem. Yet, even today, I know that if I were presented with the same challenge in code, I would simply loop. The algorithm they desired simply does not translate well to code, but I am willing to admit that maybe it does translate and I'm simply not knowledgable enough to do it. I will leave it as an exerice as to what the accepted algorithm and answer was.

  • Anonymous
    February 15, 2011
    And, oh, how I long to be able to edit my typos.

  • Anonymous
    February 15, 2011
    Brilliant.

  • Anonymous
    February 15, 2011
    Who else but you could have invented such an intricate and complex dialogue. I would need a parser just to validate the syntax of the text, and an English dictionary to understand it all. And I am an electrical engineer... I think people like you Eric have a huge machine in their brains, full of memory and cpu, and, sometimes, you need to put it all out, in posts like this one! Any way, I love your blog...

  • Anonymous
    February 15, 2011
    @above commenter And it runs OS X. @Eric Serves you right for asking such a stereotyped question. ;)

  • Anonymous
    February 16, 2011
    I am reminded of the story of the exam question: - Given a barometer, how would you measure the height of a very tall building. The answer given was marked wrong because the examiner was expecting an answer comparing barometric pressures. When the student protested the result, he pointed out that there were many answers to the question, up to and including using the barometer as a bribe to the building caretaker to tell him the height of the building. Moral: not only interviwers ask dumb questions, so do apparently intelligent teachers and professors!

  • Anonymous
    February 16, 2011
    The comment has been removed

  • Anonymous
    February 16, 2011
    I would have just gone outside the house and walked around to the other room and looked in the window twice to see which switch turns off the first two bulbs.

  • Anonymous
    February 16, 2011
    I would have instructed someone to turn one light off, one light off, and flick the other one off and on. Then I would have walked into the room and observed which light was on, which light was flickering, and which light was off.

  • Anonymous
    February 16, 2011
    "The algorithm they desired simply does not translate well to code, but I am willing to admit that maybe it does translate and I'm simply not knowledgable enough to do it." It does translate to code fine. The problem is A) the situation is heavily contrived [you're not looking for the heaviest item, you're looking for the one different item among otherwise identical ones], and B) the rest of the setup violates our usual assumptions about algorithm complexity [for it to translate to code in a reasonable way, we have to at the very least assume that addition of the weights is free but comparison is expensive]

  • Anonymous
    February 16, 2011
    Funny and learned the answer

  • Anonymous
    February 16, 2011
    The comment has been removed

  • Anonymous
    February 18, 2011
    The comment has been removed

  • Anonymous
    February 19, 2011
    According to Larry Wall, the linguist who invented/designed the programming language Perl, there are three cardinal virtues of a good programmer. I presume this applies to software engineers. 1: Laziness;   2:Impatience;   3: Hubris. Think about it.

  • Anonymous
    February 19, 2011
    My solution to the 9 objects, of identical weight except one heavier than the others, is essentially a binary search. Assuming it's a balance scale, not graduated: put four objects on one side, four on the other. If they balance, the heavy one is the one left over. If not, it's one of the four on the heavy side. .split these into two sides of two, compare again. One more stage and you're done. Three steps, right?

  • Anonymous
    February 19, 2011
    the resistance of a human body is 50 to 100 ohms if anyone is curious

  • Anonymous
    February 20, 2011
    @Albert, under your methodology, you can get lucky and find the oddball on the first try, otherwise you'll have to use the 3 steps as you mentioned. Can you think of a way to do it in a guaranteed number of steps less than that?

  • Anonymous
    February 21, 2011
    @Anthony, except for the weight difference, is the one object otherwise physically identical to the rest?

  • Anonymous
    February 21, 2011
    @John, yes, assume the only discernible difference to normal senses is the weight.

  • Anonymous
    February 21, 2011
    @Anthony - In that case, since the heavier object is otherwise identical to the others - including density - then it would be the largest one of the nine

  • Anonymous
    February 21, 2011
    This is one of the greatest blog posts I have ever written.  Feynman is a personal hero of mine, and exactly this sort of thinking is the perfect antidote to these terrible interview questions.

  • Anonymous
    February 21, 2011
    And of course that last rhetorical question was not so rhetorical after all :-)

  • Anonymous
    February 21, 2011
    Anthony, do we know how much heavier the "heavy" object is compared to the others? Is it just a wee bit heavier, twice as heavy or much heavier than the others?

  • Anonymous
    February 21, 2011
    Identifying the heaviest object of 9 can be done with two weighting steps. SPOILER ALERT in the first step we weigh triplet 1,2,3 against triplet 4,5,6. Thus we find in which of the "triplets" has heaviest object. If the triplets weigh the same, then the heavier object is in the third, unweighed tripled, otherwise it's in the heavier one. in the second step we weigh objects A and B from the triplet which was found in step 1, and thus determine, whether A, B or C is the heavier object, using the same reasoning as in step 1.

  • Anonymous
    February 21, 2011
    That's correct.

  • Anonymous
    February 22, 2011
    Very funny, this reminded me of this...e-clecticism.blogspot.com/.../think.html

  • Anonymous
    February 23, 2011
    >Not all lamps emit heat... Sure they do - they have to...

  • Anonymous
    February 23, 2011
    >Not all lamps emit heat... >> Sure they do - they have to... What about a magic lamp?  Given an appropriate incantation, it emits genies, supposedly.   Since I don't believe in genies, and we have no proof they exist, I'd have a hard time believing they emit much body heat.

  • Anonymous
    February 26, 2011
    Not all lamps emit heat... today. This riddle was invented a good long while ago. All lamps emitted heat back then.

  • Anonymous
    March 01, 2011
    Brilliant!

  • Anonymous
    March 09, 2011
    Ha ha, perfect timing for a Monday afternoon (well, it is where I am anyway)

  • Anonymous
    March 10, 2011
    The comment has been removed

  • Anonymous
    March 10, 2011
    The comment has been removed

  • Anonymous
    March 10, 2011
    amazing....do more questions man...

  • Anonymous
    March 10, 2011
    Reminds me a bit of Dr. Sheldon Cooper. ^^

  • Anonymous
    March 11, 2011
    The comment has been removed

  • Anonymous
    March 15, 2011
    The comment has been removed

  • Anonymous
    March 20, 2011
    That was AWESOME!!!!

  • Anonymous
    March 24, 2011
    What about having someone else enter the room and do the job

  • Anonymous
    March 24, 2011
    What about having someone else enter the room and do the job

  • Anonymous
    March 26, 2011
    Why do you still use 8pt sized fonts at Microsoft? Do you still use 14" monitors? That font size used to make sense back in the 90's when people used 14" monitors. Today I have to increase the font size of my browser in order to read these msdn pages in my 21" monitor. Otherwise I get a headache.

  • Anonymous
    July 09, 2011
    Good stuff, but kind of confusing...