<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Larry Osterman's WebLog : Fascinating geek stuff</title><link>http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx</link><description>Tags: Fascinating geek stuff</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Looking for new skillz (turning the blog around)…</title><link>http://blogs.msdn.com/larryosterman/archive/2009/10/20/looking-for-new-skillz-turning-the-blog-around.aspx</link><pubDate>Wed, 21 Oct 2009 00:31:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910273</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>40</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9910273.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9910273</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9910273</wfw:comment><description>&lt;p&gt;Just for giggles, I went looking at the various job listings within Microsoft and outside Microsoft (no, I’m not going anywhere, I was just curious).&amp;#160; While looking, I realized that I had absolutely no marketable skills :).&amp;#160; Nobody seems to be hiring an OS developer these days.&lt;/p&gt;  &lt;p&gt;To repeat and be even more clear: I’m *not* leaving Microsoft.&amp;#160; I’m *not* leaving Windows.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’m just looking for a book or two to read to improve my skills (I do this regularly – most of my recent reading has either been on Security or WPF and to be honest, I’m kinda bored of those topics so I’m interested in branching out beyond security and UI topics)…&lt;/p&gt;  &lt;p&gt;I could run out and browse the bookstores (and I might just do that) but I figured “Hey, I’ve got a blog, why don’t I ask the folks who read my blog?”.&amp;#160; So let me turn the blog around and ask: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If I wanted to go out and learn web development, which books should I read?&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’ve already read “&lt;a href="http://www.oreilly.com/catalog/9780596517748"&gt;Javascript: The ood Parts&lt;/a&gt;” and it was fascinating but it was more of a language book (and a very good language book), but it’s not a web development book.&amp;#160; So what books &lt;em&gt;should&lt;/em&gt; I read to learn web development?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910273" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>I can make it arbitrarily fast if I don’t actually have to make it work.</title><link>http://blogs.msdn.com/larryosterman/archive/2009/09/29/i-can-make-it-arbitrarily-fast-if-i-don-t-actually-have-to-make-it-work.aspx</link><pubDate>Wed, 30 Sep 2009 00:49:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9901016</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>26</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9901016.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9901016</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9901016</wfw:comment><description>&lt;p&gt;Digging way back into my pre-Microsoft days, I was recently reminded of a story that I believe was told to me by &lt;a href="http://en.wikipedia.org/wiki/Mary_Shaw_(computer_scientist)"&gt;Mary Shaw&lt;/a&gt; back when I took her Computer Optimization class at Carnegie-Mellon…&lt;/p&gt;  &lt;p&gt;During the class, Mary told an anecdote about a developer “Sue” who found a bug in another developer’s “Joe” code that “Joe” introduced with a performance optimization.&amp;#160; When “Sue” pointed the bug out to “Joe”, his response was “Oops, but it’s WAY faster with the bug”.&amp;#160; “Sue” exploded “If it doesn’t have to be correct, I can calculate the result in 0 time!” [1].&lt;/p&gt;  &lt;p&gt;Immediately after telling this anecdote, she discussed a contest that the CS faculty held for the graduate students every year.&amp;#160; Each year the CS faculty posed a problem to the graduate students with a prize awarded to the grad student who came up with the most efficient (fastest) solution to the problem.&amp;#160; She then assigned the exact same problem to us:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Given a copy of the “Declaration of Independence”, calculate the 10 most common words in the document”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We all went off and built programs to parse the words in the document, inserting them into a tree (tracking usage) and read off the 10 most frequent words.&amp;#160; The next assignment was “Now make it fast – the 5 fastest apps get an ‘A’, the next 5 get a ‘B’, etc.”&lt;/p&gt;  &lt;p&gt;So everyone in the class (except me :)) went out and rewrote their apps to use a hash table so that their insertion time was constant and then they optimized the heck out of their hash tables[2].&lt;/p&gt;  &lt;p&gt;After our class had our turn, Mary shared the results of what happened when the CS grad students were presented with the exact same problem.&lt;/p&gt;  &lt;p&gt;Most of them basically did what most of the students in my class did – built hash tables and tweaked them.&amp;#160; But a couple of results stood out.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The first one simply hard coded the 10 most common words in their app and printed them out.&amp;#160; This was disqualified because it was perceived as breaking the rules.&lt;/li&gt;    &lt;li&gt;The next one was quite clever.&amp;#160; The grad student in question realized that they could write the program much faster if they wrote it in assembly language.&amp;#160; But the rules of the contest required that they use Pascal for the program.&amp;#160; So the grad student essentially created an array on the stack and introduced a buffer overflow and he loaded his assembly language program into the buffer and used that as a way of getting his assembly language version of the program to run.&amp;#160; IIRC he wasn’t disqualified but he didn’t win because he circumvented the rules (I’m not sure, it’s been more than a quarter century since Mary told the class this story).&lt;/li&gt;    &lt;li&gt;The winning entry was even more clever.&amp;#160; He realized that he didn’t actually need to track all the words in the document.&amp;#160; Instead he decided to track only some of the words in the document in a fixed array.&amp;#160; His logic was that each of the 10 most frequent words were likely to appear in the first &amp;lt;n&amp;gt; words in the document so all he needed to do was to figure out what &amp;quot;”n” is and he’d be golden.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So the moral of the story is “Yes, if it doesn’t have to be correct, you can calculate the response in 0 time.&amp;#160; But sometimes it’s ok to guess and if you guess right, you can get a huge performance benefit from the result”.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[1] This anecdote might also come from Jon L. Bentley’s “Writing Efficient Programs”, I’ll be honest and say that I don’t remember where I heard it (but it makes a great introduction to the subsequent story).&lt;/p&gt;  &lt;p&gt;[2] I was stubborn and decided to take my binary tree program and make it as efficient as possible but keep the basic structure of the solution (for example, instead of comparing strings, I calculated a hash for the string and compared the hashes to determine if strings matched).&amp;#160; I don’t remember if I was in the top 5 but I was certainly in the top 10.&amp;#160; I do know that my program beat out most of the hash table based solutions.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901016" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Things+you+shouldn_2700_t+do_2E00_/default.aspx">Things you shouldn't do.</category></item><item><title>Fixing an accessibility bug with the trackbar common control</title><link>http://blogs.msdn.com/larryosterman/archive/2009/01/27/fixing-an-accessibility-bug-with-the-trackbar-common-control.aspx</link><pubDate>Wed, 28 Jan 2009 04:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9379302</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9379302.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9379302</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9379302</wfw:comment><description>&lt;P&gt;The trackbar common control is a strange beast.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The trackbar can be oriented either horizontally or vertically.&amp;nbsp; On LTR language machines, when the trackbar is horizontal, it works much as you’d expect it to: The minimum value of the trackbar is on the left, the maximum value is on the right (it’s reversed for RTL languages so it works consistently).&lt;/P&gt;
&lt;P&gt;When the trackbar is vertical, it’s a different beast entirely.&amp;nbsp; For whatever reason, the trackbar control designers set the minimum value of the trackbar at the top, the maximum value at the bottom.&amp;nbsp; If you think about how the trackbar designers actually implemented the trackbar this makes sense.&amp;nbsp; If you orient the trackbar so that the minimum value is at the top, then when you need to draw the trackbar you can use the same drawing code to draw the horizontal trackbar – you just swap the X and Y axis (I have absolutely no idea if that’s how it works internally, it just seems to make sense that way).&lt;/P&gt;
&lt;P&gt;While this works great for the implementer, for the &lt;EM&gt;consumer&lt;/EM&gt; of the trackbar, it’s a pain in the neck.&amp;nbsp; That’s because the users who interact with the control expect the maximum value to be at the top of the control, not the bottom.&lt;/P&gt;
&lt;P&gt;As a result, when you look at code that uses the trackbar control, you end up seeing a lot of:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=csharpcode&gt;LRESULT MyDialog::OnNeedTTText(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; idCtrl, LPNMHDR pnmh)
{
    LPTOOLTIPTEXT pTT = (LPTOOLTIPTEXT)pnmh;
    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (idCtrl == IDD_TRACKBAR)
    {
        &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; nPos = (&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt;)SendMessage(TBM_GETPOS, 0, 0);

        StringCchPrintf(pTT-&amp;gt;szText, ARRAYSIZE(pTT-&amp;gt;szText), TEXT(&lt;SPAN class=str&gt;"%d"&lt;/SPAN&gt;), 100 - nPos);
    }
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; 0;
}&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;
&lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;
In other words, retrieve the position from the trackbar, convert it from 0..100 to 100..0 and return that as a tooltip text.&lt;/P&gt;
&lt;P&gt;All of this works great – you have a lot of 100 - &amp;lt;n&amp;gt; scattered throughout your code, but it’s not the end of the world.&amp;nbsp; And then one day a tester comes to you and says that when he uses the narrator tool to read the contents of your tool, it reports that the value reported by the control is wrong – when the slider’s at the top (tooltip 100), it reports that the value is 0, when it’s at the 1/4 point (tooltip 75), it reports that the value is 25.&lt;/P&gt;
&lt;P&gt;Crud.&amp;nbsp; At this point many developers start scratching their heads and start thinking about subclassing the trackbar to replace the reported position.&amp;nbsp; However that’s way more work than they need to do.&lt;/P&gt;
&lt;P&gt;It turns out that the designers of the trackbar control thought of this problem.&amp;nbsp; If you’re using version 5.8 or higher of the common controls, you can specify the TBS_REVERSED &lt;A href="http://msdn.microsoft.com/en-us/library/bb760147(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb760147(VS.85).aspx"&gt;trackbar control style&lt;/A&gt; to your trackbar.&amp;nbsp; If you do, the visuals of the trackbar are unchanged as is the trackbar functionality, but the Microsoft accessibility framework will look for the presence of the TBS_REVERSED style and if it is found, it assumes that the control is “backwards” and it reports the position for the toolbar as if the maximum and minimum values were reversed.&lt;/P&gt;
&lt;P&gt;And no, I didn’t know about this before today.&amp;nbsp; But it was too good a trick not to share.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9379302" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Nifty+Win32+tricks_2E00_/default.aspx">Nifty Win32 tricks.</category></item><item><title>When you do UX work, sometimes you have to worry about the strangest things…</title><link>http://blogs.msdn.com/larryosterman/archive/2009/01/13/when-you-do-ux-work-sometimes-you-have-to-worry-about-the-strangest-things.aspx</link><pubDate>Tue, 13 Jan 2009 20:13:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9316088</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>31</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9316088.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9316088</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9316088</wfw:comment><description>&lt;p&gt;I recently got a bug reported to me about the visuals in the sound control panel applet not being aligned properly (this is from the UI for a new Windows 7 feature):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/WhenyoudoUXworksometimesyouhavetoworryab_816E/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/WhenyoudoUXworksometimesyouhavetoworryab_816E/image_thumb.png" width="415" height="237" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The problem as reported was that the microphone was aligned incorrectly w.r.t. the down arrow. – the microphone was too far to the right.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;But if you look carefully, you’ll see that that isn’t the case – drawing a box around the controls makes it clearer:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/WhenyoudoUXworksometimesyouhavetoworryab_816E/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/WhenyoudoUXworksometimesyouhavetoworryab_816E/image_thumb_1.png" width="416" height="238" /&gt;&lt;/a&gt;Nitpickers Corner: For those of you that love to count pixels, it’s entirely possible that the arrow might be off by a couple of pixels but fixing it wouldn’t fix the problem, because then the arrow would be off-center with respect to the speakers.&amp;#160; The real problem is that the microphone icon is visually weighted to the right – the actual icon resource was lined up with the arrow, but because the visual weight was to the right, it displayed poorly.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It turns out that there’s really no good way of fixing this – if we were to adjust the location of the icons, it wouldn’t help, because a different device would have a different visual center (as the speaker icon does)…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Instead, we looked at the visuals and realized that there was an alternative solution: Adjust the layout for the dialog and the problem more-or-less goes away:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/WhenyoudoUXworksometimesyouhavetoworryab_816E/newmonitor.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="newmonitor" border="0" alt="newmonitor" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/WhenyoudoUXworksometimesyouhavetoworryab_816E/newmonitor_thumb.png" width="416" height="215" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The problem still exists at some level because the arrow is centered with the icons but some icons (like the stalk microphone above) are bottom heavy.&amp;#160; But for whatever reason, the visuals aren’t as disconcerting when laid out horizontally.&lt;/p&gt;  &lt;p&gt;As I said in the title – sometimes you need to worry about the strangest things.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9316088" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Audio/default.aspx">Audio</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Fixing a customer problem: “No Audio Device is Installed” when launching sndvol on Windows Vista</title><link>http://blogs.msdn.com/larryosterman/archive/2009/01/06/fixing-a-customer-problem-no-audio-device-is-installed-when-launching-sndvol-on-windows-vista.aspx</link><pubDate>Tue, 06 Jan 2009 22:26:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9286006</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9286006.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9286006</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9286006</wfw:comment><description>&lt;p&gt;Yesterday someone forwarded me an email from one of our DirectShow MVPs – he was having problems playing audio on his Windows Vista machine.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Fortunately David (the MVP) had done most of the diagnostic work – the symptoms he saw were that he was receiving a “No Audio Device is Installed” error launching sndvol (and other assorted problems).&amp;#160; &lt;/p&gt;  &lt;p&gt;David tried the usual things (confirming that the driver for his audio solution was correctly installed (this probably fixes 99% of the problems)).&amp;#160; He also tried reinstalling the driver to no avail.&lt;/p&gt;  &lt;p&gt;He next ran the Sysinternals &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;Process Monitor tool&lt;/a&gt; to see what was going on.&amp;#160; He very quickly found the following line in the output from process monitor:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;RegOpenKey&amp;quot;, &amp;quot;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{e4ee1234-fc70-4925-94e9-4117395f7995}&amp;quot;, &amp;quot;&lt;b&gt;ACCESS DENIED&lt;/b&gt;&amp;quot;, &amp;quot;Desired Access: Write&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;With that information, he looked for the ACL on that registry key:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/FixingacustomerproblemNoAudioDeviceisIns_A0BB/clip_image002_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/FixingacustomerproblemNoAudioDeviceisIns_A0BB/clip_image002_thumb.jpg" width="381" height="458" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;He then looked at the configuration for the Windows Audio service:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/FixingacustomerproblemNoAudioDeviceisIns_A0BB/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/FixingacustomerproblemNoAudioDeviceisIns_A0BB/image_thumb_1.png" width="424" height="478" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Woah – the Windows Audio service doesn’t have access rights to that registry key – the Windows Audio service is running as LocalService and the LocalService account doesn’t have any access to the registry key.&lt;/p&gt;  &lt;p&gt;At this point he decided to contact Microsoft with his problem.&lt;/p&gt;  &lt;p&gt;I looked at his info and quickly realized that the problem was that somehow the ACL on the registry key had been corrupted: something had removed the entries for the audio services.&amp;#160; On a normal Windows Vista installation this registry key’s ACL should look something like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/FixingacustomerproblemNoAudioDeviceisIns_A0BB/endpointpermissions.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="endpointpermissions" border="0" alt="endpointpermissions" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/FixingacustomerproblemNoAudioDeviceisIns_A0BB/endpointpermissions_thumb.png" width="383" height="456" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Something that ran on David’s machines went in and reset the permissions for this registry key to the ACL that is on the root node of the HKEY_LOCAL_MACHINE\Software registry hive.&amp;#160; I have no idea what did this, but messing with the ACLs on the registry is a known cause of various compatibility problems.&amp;#160; That’s why &lt;a href="http://support.microsoft.com/kb/885409/"&gt;Microsoft KB 885409&lt;/a&gt; has such strong warnings about why it’s important to not apply blind modifications to files or registry keys in Windows.&amp;#160; It’s unfortunate, but the warnings in the KB articles that say that modifying registry keys or permissions can cause your machine to malfunction are absolutely right – it’s not hard to make modifications to registry keys that can really screw up a machine, if you make the right ones.&amp;#160; From the KB article:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;For example, modifications to registry ACLs affect large parts of the registry hives and may cause systems to no longer function as expected. Modifying the ACLs on single registry keys poses less of a problem to many systems. However, we recommend that you carefully consider and test these changes before you implement them. Again, we can only guarantee that you can return to the recommended out-of-the-box settings if you reformat and reinstall the operating system.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The good news is that it should be relatively simple to fix David’s problem – As far as I know, he has two options.&amp;#160; The first is to reinstall Windows Vista – that should reset the ACLs on the property key to their default values (because it will recreate the property keys), which should resolve the problem.&lt;/p&gt;  &lt;p&gt;The second solution is to add an ACL to the registry keys under the MMDevices registry key to allow the LocalService account to have permissions to modify this registry key.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9286006" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Things+you+shouldn_2700_t+do_2E00_/default.aspx">Things you shouldn't do.</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Nifty+Win32+tricks_2E00_/default.aspx">Nifty Win32 tricks.</category></item><item><title>I get spam :)</title><link>http://blogs.msdn.com/larryosterman/archive/2008/10/14/i-get-spam.aspx</link><pubDate>Tue, 14 Oct 2008 19:13:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8999685</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8999685.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8999685</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8999685</wfw:comment><description>&lt;p&gt;I just received this spam message the other day:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;From: Microsoft [mailto:customerservice@microsoft.com] &lt;/p&gt;    &lt;p&gt;Sent: Saturday, October 11, 2008 11:13 PM&lt;/p&gt;    &lt;p&gt;To: Larry Osterman&lt;/p&gt;    &lt;p&gt;Subject: Security Update for OS Microsoft Windows&lt;/p&gt;    &lt;p&gt;Dear Microsoft Customer,&lt;/p&gt;    &lt;p&gt;Please notice that Microsoft company has recently issued a Security Update for OS Microsoft Windows. The update applies to the following OS versions: Microsoft Windows 98, Microsoft Windows 2000, Microsoft Windows Millenium, Microsoft Windows XP, Microsoft Windows Vista.&lt;/p&gt;    &lt;p&gt;Please notice, that present update applies to high-priority updates category. In order to help protect your computer against security threats and performance problems, we strongly recommend you to install this update.&lt;/p&gt;    &lt;p&gt;Since public distribution of this Update through the official website &lt;a href="http://www.microsoft.com"&gt;http://www.microsoft.com&lt;/a&gt; would have result in efficient creation of a malicious software, we made a decision to issue an experimental private version of an update for all Microsoft Windows OS users.&lt;/p&gt;    &lt;p&gt;As your computer is set to receive notifications when new updates are available, you have received this notice.&lt;/p&gt;    &lt;p&gt;In order to start the update, please follow the step-by-step instruction:&lt;/p&gt;    &lt;p&gt;1. Run the file, that you have received along with this message.&lt;/p&gt;    &lt;p&gt;2. Carefully follow all the instructions you see on the screen.&lt;/p&gt;    &lt;p&gt;If nothing changes after you have run the file, probably in the settings of your OS you have an indication to run all the updates at a background routine. In that case, at this point the upgrade of your OS will be finished.&lt;/p&gt;    &lt;p&gt;We apologize for any inconvenience this back order may be causing you.&lt;/p&gt;    &lt;p&gt;Thank you,&lt;/p&gt;    &lt;p&gt;Steve Lipner&lt;/p&gt;    &lt;p&gt;Director of Security Assurance&lt;/p&gt;    &lt;p&gt;Microsoft Corp.&lt;/p&gt;    &lt;p&gt;-----BEGIN PGP SIGNATURE-----&lt;/p&gt;    &lt;p&gt;Version: PGP 7.1&lt;/p&gt;    &lt;p&gt;AN86DCS206WKI6IK8LIFD5S1VODA48SHXDCG6KT8V4C50MO21RUHP8O84T6P73YGX&lt;/p&gt;    &lt;p&gt;EO755U27OA5JVX3U51QF8N2E97FQQDOC6IRHH7T3TSQJRFYYPR3434M634A375LAO&lt;/p&gt;    &lt;p&gt;49ICIMQZ680BR307KVS857K6U9UYSBHE20RNI16HUB45SMTDF0DDMQZ4YIR2QIHLD&lt;/p&gt;    &lt;p&gt;UVPMVD54LRY8HNLDA020KWMIFYYD9B1A07AM1VWIA0YO8QZO2WLY27KAPXBFDN6DT&lt;/p&gt;    &lt;p&gt;48VYUVW7M7JZ5P2NIU7FGDRIGCM819WMKJ2==&lt;/p&gt;    &lt;p&gt;-----END PGP SIGNATURE-----&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Attached to the message was an attachment named &lt;a href="http://support.microsoft.com/kb/266311"&gt;“KB266311&lt;/a&gt;.exe”. &lt;/p&gt;  &lt;p&gt;I’ve heard that these before but I’ve never received one.&amp;#160; Apparently the email was sent from “koln-5d8184e2.pool.einsundeins.de (93.129.132.226)”, which I suspect is a trojaned machine in Germany.&amp;#160;&amp;#160; In this case I’m pretty impressed with the email – it’s in plain text with the name of a real Microsoft employee, it has a PGP signature (which tends to give credence to the email).&amp;#160; On the other hand it has some grammatical errors (“Please notice that Microsoft company has…”, “We apologize for any inconvenience this back order may be causing you”) that give the scam away.&amp;#160; I also don’t know what trojan was inside KB266311 because it was filtered by our email servers before it got to me.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For those that are wondering how I knew it came from koln-5d8184e2.pool.einsundeins.de, here’s what I did:&lt;/p&gt;  &lt;p&gt;I started with the raw email headers (some servers and IP addresses obscured):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Received: from XXX.microsoft.com (n.n.n.n) by     &lt;br /&gt; YYY.microsoft.com (m.m.m.m) with Microsoft SMTP      &lt;br /&gt; Server (TLS) id 8.2.83.0; Sat, 11 Oct 2008 23:13:52 -0700      &lt;br /&gt;Received: from koln-5d8184e2.pool.einsundeins.de (93.129.132.226) by      &lt;br /&gt; ZZZ.microsoft.com (o.o.o.o) with Microsoft SMTP Server id      &lt;br /&gt; 8.1.291.1; Sat, 11 Oct 2008 23:13:41 -0700      &lt;br /&gt;Received: from [93.129.132.226] by QQQ.hotmail.com; Sun, 12 Oct 2008 07:13:17      &lt;br /&gt; +0100      &lt;br /&gt;From: Microsoft &amp;lt;customerservice@microsoft.com&amp;gt;      &lt;br /&gt;To: &amp;lt;&amp;lt;Larry’s Email Address&amp;gt;&amp;gt;      &lt;br /&gt;Subject: Security Update for OS Microsoft Windows      &lt;br /&gt;Date: Sun, 12 Oct 2008 07:13:17 +0100      &lt;br /&gt;MIME-Version: 1.0      &lt;br /&gt;Content-Type: multipart/mixed;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; boundary=&amp;quot;----=_NextPart_000_000E_01C92C39.FF9CE480&amp;quot;      &lt;br /&gt;X-Mailer: Microsoft Office Outlook, Build 11.0.5510      &lt;br /&gt;Thread-Index: Aca6Q862Q89QD80AN22RHXR0U7WZ61==      &lt;br /&gt;X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700      &lt;br /&gt;Message-ID: &amp;lt;01c92c39$ff9ce480$e284815d@60GC7Q&amp;gt;      &lt;br /&gt;Return-Path: 60GC7Q@hotmail.com      &lt;br /&gt;X-MS-Exchange-Organization-PRD: microsoft.com      &lt;br /&gt;Received-SPF: TempError (XXX.microsoft.com: error in      &lt;br /&gt; processing during lookup of customerservice@microsoft.com: DNS timeout)      &lt;br /&gt;X-MS-Exchange-Organization-PCL: 2      &lt;br /&gt;X-MS-Exchange-Organization-Antispam-Report: DV:3.3.7011.600;SV:3.3.7011.1437;SID:SenderIDStatus      &lt;br /&gt; TempError;OrigIP:93.129.132.226      &lt;br /&gt;X-MS-Exchange-Organization-SCL: 0      &lt;br /&gt;X-MS-Exchange-Organization-SenderIdResult: TEMPERROR&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;RFC 2821 says that SMTP servers should prepend a Received: header to an email message whenever they process the email message.&amp;#160; In this case the last email server was XXX.microsoft.com.&amp;#160; XXX.microsoft.com received the message from YYY.microsoft.com which in turn received the message from koln-5d8184e2.pool.einsundeins.de (einsundeins.de appears to be a german ISP).&amp;#160;&amp;#160; The next bit of trace is confusing.&amp;#160; The machine at 93.129.132.226 says that it received the message from QQQ.hotmail.com.&amp;#160; &lt;/p&gt;  &lt;p&gt;It’s possible that this spam email originated from hotmail, but I don’t think so.&amp;#160; First off, as far as I know, you can’t relay through the hotmail SMTP servers and the sender of the email is “customerservice@microsoft.com” (the sender is included in the Received-SPF header which indicates that the “MAIL FROM” header in the SMTP exchange was &lt;a href="mailto:&amp;ldquo;customerservice@microsoft.com"&gt;“customerservice@microsoft.com&lt;/a&gt;”.&amp;#160; Secondly the hotmail servers don’t set the X-Mailer header, but this header indicates that it was sent from Outlook 2003.&amp;#160; Instead, I think that the bottom Received: header was forged to throw off people trying to figure out where the email came from.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Needless to say, Microsoft will never EVER send a security update to customers by mail, and customers should immediately delete any emails that claim to have security fixes from Microsoft.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8999685" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/It_2700_s+Funny+_3A002900_/default.aspx">It's Funny :)</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Things+you+shouldn_2700_t+do_2E00_/default.aspx">Things you shouldn't do.</category></item><item><title>THIS is what a Windows PC should look like…</title><link>http://blogs.msdn.com/larryosterman/archive/2008/08/05/this-is-what-a-windows-pc-should-look-like.aspx</link><pubDate>Tue, 05 Aug 2008 18:53:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8834320</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8834320.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8834320</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8834320</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;We had a neighborhood picnic on Saturday at our neighbors house.&amp;#160; While we were chatting in the kitchen, I noticed their new computer.&lt;/p&gt;  &lt;p&gt;They had an &lt;a href="http://www.shopping.hp.com/webapp/shopping/computer_can_series.do?storeName=computer_store&amp;amp;category=desktops&amp;amp;a1=Category&amp;amp;v1=All-in-One+PCs&amp;amp;series_name=IQ504t_series"&gt;HP TouchSmart computer&lt;/a&gt;, and I have to say that I was blown away by it.&amp;#160; I really liked the industrial design and the touch interface is really smooth.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="6-24-08-touchsmart-2" height="480" alt="6-24-08-touchsmart-2" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/THISiswhataWindowsPCshouldlooklike_7D19/6-24-08-touchsmart-2_3.jpg" width="538" /&gt; &lt;/p&gt;  &lt;p&gt;All in all a machine that I’d be happy put in my kitchen.&amp;#160; It wouldn’t work as a desktop PC for me (I prefer to have more customizability than you can get in an all-in-one), but for our kitchen PC (which we almost never upgrade) it would be absolutely perfect.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I wish more OEMs spent as much time as HP clearly has on making their machines beautiful.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8834320" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>Oh Wow, Dr. Horrible is AWESOME!</title><link>http://blogs.msdn.com/larryosterman/archive/2008/07/17/oh-wow-dr-horrible-is-awesome.aspx</link><pubDate>Thu, 17 Jul 2008 21:34:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8744705</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8744705.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8744705</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8744705</wfw:comment><description>&lt;p&gt;Someone just pointed me to &lt;a href="http://www.drhorrible.com"&gt;http://www.drhorrible.com&lt;/a&gt;, which is Joss Whedon’s newest epic.&lt;/p&gt;  &lt;p&gt;The first two acts are up on the web (the final act will go up on Saturday).&lt;/p&gt;  &lt;p&gt;They are spectacularly cool, especially to a musical nut.&amp;#160; I knew that Neil Patrick Harris had great musical chops (after all, he did Assassins on Broadway) but the rest was just fantastic.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Well worth checking out, there are some really funny bits.&amp;#160; They did a truly great job on it.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8744705" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/It_2700_s+Funny+_3A002900_/default.aspx">It's Funny :)</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Personal+Stuff/default.aspx">Personal Stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>Wow - We hired Crispin Cowan!!!</title><link>http://blogs.msdn.com/larryosterman/archive/2008/01/18/wow-we-hired-crispin-cowan.aspx</link><pubDate>Fri, 18 Jan 2008 21:31:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7151721</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/7151721.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=7151721</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=7151721</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/michael_howard"&gt;Michael Howard&lt;/a&gt; just announced that &lt;a href="http://blogs.msdn.com/michael_howard/archive/2008/01/17/crispin-cowan-joins-the-windows-security-team.aspx"&gt;we've hired Crispin Cowan&lt;/a&gt;! &lt;/p&gt; &lt;p&gt;This is incredibly awesome, I have a huge amount of respect for &lt;a href="http://crispincowan.com/~crispin/"&gt;Crispin&lt;/a&gt;, he's one of the most respected researchers out there.&lt;/p&gt; &lt;p&gt;Among other things, Crispin's the author and designer of &lt;a href="http://kerneltrap.org/mailarchive/linux-kernel/2007/11/8/397703"&gt;AppArmor&lt;/a&gt;, which adds sandboxing capabilities to Linux.&amp;nbsp; Apparently he's going to be working on the core Windows Security team, which is absolutely cool.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm totally stoked to hear this - I literally let out a whoot when I read Michael's blog post.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Welcome aboard Crispin :).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7151721" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Playing Librarian...</title><link>http://blogs.msdn.com/larryosterman/archive/2008/01/03/playing-librarian.aspx</link><pubDate>Fri, 04 Jan 2008 08:22:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6975474</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>24</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6975474.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6975474</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6975474</wfw:comment><description>&lt;p&gt;Those of you who know me (and my family) from beyond my blog know that among my our many passions, one of the biggest is books.&amp;nbsp; And we've got a lot of them.&lt;/p&gt; &lt;p&gt;A couple of years ago, &lt;a href="http://blogs.msdn.com/larryosterman/archive/2006/08/08/692649.aspx"&gt;Valorie got me a Flic barcode scanner and a copy of the program Book Collector&lt;/a&gt;.&amp;nbsp; I've been using it steadily since then adding the books from the biggest of the 4 different libraries in our house (yeah, we've got 4 separate libraries in the house, I did say we read a lot of books - they are: grown up fiction, kids fiction, non fiction and teaching materials).&lt;/p&gt; &lt;p&gt;Since I was fortunate enough to take the month of December off this year (one of the benefits of working at Microsoft for as long as I have is that I get a lot of vacation time, some of which was due to disappear), I decided to take on the project of working through the books in the big library.&lt;/p&gt; &lt;p&gt;Since I've been working on it pretty much every day off and on for the past 4 weeks, I've looked at a LOT of books recently.&lt;/p&gt; &lt;p&gt;I've developed a pretty good workflow (it could unquestionably be improved, but this one works) for the process of scanning books:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Start Book Collector.&lt;/li&gt; &lt;li&gt;Head into the library from my computer with the Flic scanner in hand.&lt;/li&gt; &lt;li&gt;Start where I last scanned.&lt;/li&gt; &lt;li&gt;Take a book off the shelf:&amp;nbsp; &lt;/li&gt; &lt;ol&gt; &lt;li&gt;If the back cover contains a UPC code, check the barcode - if it starts 978 or 979, scan it and go to step 5.&lt;/li&gt; &lt;li&gt;Open the book to the inside front flap.&amp;nbsp; If it contains a UPC code, scan it and go to step 5.&lt;/li&gt; &lt;li&gt;Put the book on the "to be scanned manually" pile.&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Take the books on the "to be scanned manually" pile back to the computer.&lt;/li&gt; &lt;li&gt;Plug the scanner into the computer, which will cause the UPC codes to be read in and let the program search for the books.&lt;/li&gt; &lt;li&gt;Add the books found by the scanner to the program.&lt;/li&gt; &lt;li&gt;For each book on the "to be scanned manually" pile:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;Check for an ISBN number on the back of the book (usually near the UPC code).&amp;nbsp; If it's there, enter it and go to step 9.&lt;/li&gt; &lt;li&gt;Check the spine of the book.&amp;nbsp; If one of the numbers there looks like an ISBN number, enter it and go to step 9 (I often combine step 8.1 and 8.2 together).&lt;/li&gt; &lt;ol&gt; &lt;li&gt;If the number on the spine looks like an ISBN number but is 1 digit too short, try typing it in but add an "X" for the last digit.&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Look at the page after the title page of the book - sometimes there's an ISBN number there, if so, enter it and go to step 9.&lt;/li&gt; &lt;li&gt;If no ISBN number is found, put the book on the "to be entered manually" pile.&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Have the program scan for the ISBN numbers you just entered, verifying each one as it's found, then add the books if they're correct.&lt;/li&gt; &lt;li&gt;For each book on the "to be entered manually" pile:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;Enter the title and author for the book manually&lt;/li&gt; &lt;li&gt;Search for the book.&lt;/li&gt; &lt;li&gt;Walk through the items found adding the best fit ("best fit" can be subjective, I try to find an entry with accurate cover art or an accurate publishers number - but the only books that fall into that final set of books are typically more than 20 years old, so your ability to find accurate information on those books is spotty).&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Pick up the books you took from the library and to back to step 2.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;That's it.&amp;nbsp; So far I'm up to just short of 3000 books scanned, and I'm in the middle of the letter "S" in the biggest of the 4 libraries.&amp;nbsp; I've added more than 2 thousand books to the program this&amp;nbsp; month (wow).&lt;/p&gt; &lt;p&gt;Some things I've noticed in the process...&lt;/p&gt; &lt;ul&gt; &lt;li&gt;We have a lot of books. &lt;/li&gt; &lt;li&gt;As far as the scanning process goes, books fall into roughly five categories:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;Those with ISBN numbers on their UPC code - this includes most graphic novels, hard cover books and trade books.&amp;nbsp; Many new paperback books have &lt;a href="http://www.bisg.org/isbn-13/for.dummies.html"&gt;ISBN13&lt;/a&gt; numbers on their UPC code, but some still don't.&lt;/li&gt; &lt;li&gt;Those with ISBN numbers in a bar code on the inside front cover - essentially this category contains all paperback books from some time in the early 1990s to the present.&lt;/li&gt; &lt;li&gt;Those without ISBN numbers in a bar code on the inside front cover, but with UPC codes that include the ISBN number.&amp;nbsp; Essentially this category contains all books from the mid 1980s to the early 1990s.&lt;/li&gt; &lt;li&gt;Those without a UPC code on the book, but with an ISBN number (or sometimes a SBN number) inside the book.&amp;nbsp; This includes most (but not all) books from the 1970s.&lt;/li&gt; &lt;li&gt;Those without ISBN numbers at all.&amp;nbsp; This includes most books before the early 1970s (yeah, I've got paperback books that date from the mid 1960s).&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;For books that have ISBN numbers, the amount of information available about the book depends highly on how new it is.&amp;nbsp; For those that post-date Amazon and Barnes&amp;amp;Noble (the primary data sources for Book Collector), the information available is quite good (including reasonably accurate book cover images).&amp;nbsp; For older books, the information available is spotty, usually dependant on the information that 3rd party sellers provide to the various online retailers.&lt;/li&gt; &lt;li&gt;We have an awful lot of books.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I'm only beginning the process of taming the book collection, and I've not even started thinking about dealing with how to maintain the library going forward (but I've got some ideas).&amp;nbsp; As I said, my workflow above could be improved (for instance, I should use a laptop and take the computer to the library to deal with the "to be scanned manually" pile instead of schlepping the pile back and forth.&lt;/p&gt; &lt;p&gt;But working through the piles has absolutely been an enjoyable process - I've also appreciated the opportunity to re-discover old friends, which is always a good thing.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6975474" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Personal+Stuff/default.aspx">Personal Stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>Every Domain Name tells a story, I wonder what this one's was.</title><link>http://blogs.msdn.com/larryosterman/archive/2008/01/01/every-domain-name-tells-a-story-i-wonder-what-this-one-s-was.aspx</link><pubDate>Wed, 02 Jan 2008 02:17:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6943915</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6943915.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6943915</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6943915</wfw:comment><description>&lt;p&gt;And I'd love to know the story behind this site: &lt;a title="http://www.modestapparelchristianclothinglydiaofpurpledressescustomsewing.com/choosing_your_fabric.htm" href="http://www.modestapparelchristianclothinglydiaofpurpledressescustomsewing.com/choosing_your_fabric.htm"&gt;http://www.modestapparelchristianclothinglydiaofpurpledressescustomsewing.com/choosing_your_fabric.htm&lt;/a&gt;.&amp;nbsp; I ran across it while shopping online the other day.&amp;nbsp; The root page of the domain (&lt;a href="http://www.modestapparelchristianclothinglydiaofpurpledressescustomsewing.com/index.htm"&gt;http://www.modestapparelchristianclothinglydiaofpurpledressescustomsewing.com/index.htm&lt;/a&gt;) is a 404, but there's a number of pages live under that domain.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I wonder how they ever chose that particular domain name - it's as if they were trying for a half a dozen names and messed them up when they were registering the domain name.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6943915" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/It_2700_s+Funny+_3A002900_/default.aspx">It's Funny :)</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>Hanselminutes</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/21/hanselminutes.aspx</link><pubDate>Wed, 21 Nov 2007 19:29:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6457456</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6457456.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6457456</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6457456</wfw:comment><description>&lt;p&gt;A couple of weeks ago, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; stopped by my office, and we chatted for almost an hour for his Hanselminutes&amp;nbsp; podcast.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;On Monday, he &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast89LarryOstermanMakesWindowsGoDing.aspx"&gt;posted&lt;/a&gt; the interview - it's mostly me rambling on about security and other stuff, but my ego requires that I mention it :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6457456" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>So Amazon brought out this "Kindle" thingy...  But I have one question for them...</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/19/so-amazon-brought-out-this-kindle-thingy-but-i-have-one-question-for-them.aspx</link><pubDate>Tue, 20 Nov 2007 10:25:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6424536</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6424536.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6424536</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6424536</wfw:comment><description>&lt;p&gt;Amazon just brought out a new eBook reader called "&lt;a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA/ref=sr_1_5?ie=UTF8&amp;amp;s=fiona-hardware&amp;amp;qid=1195543290&amp;amp;sr=1-5"&gt;Kindle&lt;/a&gt;".&amp;nbsp; It looks pretty cool, but I have one question:&amp;nbsp; "Where can I go to try one of these out before I fork over $399 for one of them?"&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I have a real problem with buying a new technology item (especially one where the form factor is as critical as an eBook reader) without actually having one in my hand before I purchase it.&amp;nbsp; So I'm sitting here wondering which retailers carry the Kindle.&amp;nbsp; For some strange reason, I can't seem to find it on Amazon's web site :).&lt;/p&gt; &lt;p&gt;Somehow I think that once again, I'm going to be waiting until one of my co-workers buys one before I can play with it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;See, there ARE some things that brick&amp;amp;mortar stores do better than electronic retailers - they let you touch the merchandise before you buy it.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6424536" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category></item><item><title>Think Geek Responds</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/19/think-geek-responds.aspx</link><pubDate>Mon, 19 Nov 2007 22:19:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6407736</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6407736.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6407736</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6407736</wfw:comment><description>&lt;p&gt;Valorie just received the following email from Think Geek (&lt;a href="http://blogs.msdn.com/larryosterman/archive/2007/11/15/how-to-lose-customers-without-really-trying.aspx"&gt;in response to our previous issue with them&lt;/a&gt;):&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;From: Caroline Offutt [mailto:&amp;lt;email address at thinkgeek.com&amp;gt;]&lt;br&gt;Sent: Sunday, November 18, 2007 7:05 PM&lt;br&gt;To: &amp;lt;valorie's email address&amp;gt;&lt;br&gt;Cc: Rob Patak &lt;p&gt;Subject: Issues with ThinkGeek order &lt;p&gt;Ms. Osterman, &lt;p&gt;I would like to apologize for all of ThinkGeek for the fraud issues you had with your recent order and the response you received from our customer service department. We are about to roll out our new fraud prevention program including implementing CVN this week (it is unfortunate that we didn't roll it out two weeks earlier). With our new program, most orders, like yours, will process without a hitch and we hope that only those orders that are truly fraud will be stopped. If you are interested, I would be happy to go into more detail of why your order was stopped and how we are changing the process. &lt;p&gt;If you decide to have your ThinkGeek order# &amp;lt;order number&amp;gt;processed, we would like to take $50 off it. Or if you rather, we will email you a $50 gift certificate to use towards a future order. Please let me know how your would like to proceed. Also, feel free to contact me directly if there is ever anything we can do for you. Because of the holidays, I will be at our warehouse much of the next month and not always available, so please contact Robert Patak, Customer Service Supervisor, if you are unable to reach me (&lt;a href="mailto:email@thinkgeek.com"&gt;&amp;lt;email address&amp;gt;@thinkgeek.com&lt;/a&gt;, &amp;lt;phone number&amp;gt;). &lt;p&gt;Sincerely,&lt;br&gt;Caroline Offutt &lt;p&gt;-- &lt;p&gt;Caroline Offutt, VP &amp;amp; GM &lt;p&gt;ThinkGeek, Inc. &lt;p&gt;Tel: &amp;lt;phone number&amp;gt;| Fax: &amp;lt;phone number&amp;gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;I'm glad to see that they realized that they have an issue - I don't know if they found my earlier whine, or if their internal processes picked up on the issue, but I'm very happy that they're attempting to address our annoyance.&lt;/p&gt; &lt;p&gt;We've still not decided what to do about this issue yet, but I do need to acknowledge that they are listening and are trying to resolve the issue.&amp;nbsp; Two points to Think Geek.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6407736" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Personal+Stuff/default.aspx">Personal Stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Things+you+shouldn_2700_t+do_2E00_/default.aspx">Things you shouldn't do.</category></item><item><title>How to lose customers without really trying...</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/15/how-to-lose-customers-without-really-trying.aspx</link><pubDate>Fri, 16 Nov 2007 02:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6279046</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>25</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6279046.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6279046</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6279046</wfw:comment><description>&lt;P&gt;Not surprisingly, Valorie and I both do some of our holiday season shopping at ThinkGeek.&amp;nbsp; But no longer.&amp;nbsp; Valorie recently placed a substantial order with them, but Instead of processing her order, they sent the following email: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;From: ThinkGeek Customer Service [mailto:custserv@thinkgeek.com]&lt;BR&gt;Sent: Thursday, November 15, 2007 4:28 AM&lt;BR&gt;To: &amp;lt;Valorie's Email Address&amp;gt;&lt;BR&gt;Subject: URGENT - Information Needed to Complete Your ThinkGeek Order&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Hi Valorie, 
&lt;P&gt;Thank you for your recent order with ThinkGeek, &amp;lt;order number&amp;gt;. We would like to process your order as soon as possible, but we need some additional information in order to complete your order. 
&lt;P&gt;To complete your order, we must do a manual billing address verification check. 
&lt;P&gt;If you paid for your order via Paypal, please send us a phone bill or other utility bill showing the same billing address that was entered on your order. 
&lt;P&gt;If you paid for your order via credit card, please send us one of the following: 
&lt;P&gt;- A phone bill or other utility bill showing the same billing address that was entered on your order 
&lt;P&gt;- A credit card statement with your billing address and last four digits of your credit card displayed 
&lt;P&gt;- A copy of your credit card with last four digits displayed AND a copy of a government-issued photo ID, such as a driver's license or passport. 
&lt;P&gt;To send these via e-mail (a scan or legible digital photo) please reply to &lt;A href="mailto:custserv@thinkgeek.com" mce_href="mailto:custserv@thinkgeek.com"&gt;custserv@thinkgeek.com&lt;/A&gt; or via fax (703-839-8611) at your earliest convenience. If you send your documentation as digital images via email, please make sure they total less than 500kb in size or we may not receive your email. We ask that you send this verification within the next two weeks, or your order may be canceled. Also, we are unable to accept billing address verification from customers over the phone. We must receive the requested documentation before your order can be processed and shipped out. 
&lt;P&gt;For the security-minded among you, we are able to accept PGP-encrypted emails. It is not mandatory to encrypt your response, so if you have no idea what we're talking about, don't sweat it. Further information, including our public key and fingerprint, can be found at the following 
&lt;P&gt;link: 
&lt;P&gt;&lt;A href="http://www.thinkgeek.com/help/encryption.shtml" mce_href="http://www.thinkgeek.com/help/encryption.shtml"&gt;http://www.thinkgeek.com/help/encryption.shtml&lt;/A&gt; 
&lt;P&gt;At ThinkGeek we take your security and privacy very seriously. We hope you understand that when we have to take extra security measures such as this, we do it to protect you as well as ThinkGeek. 
&lt;P&gt;We apologize for any inconvenience this may cause, and we appreciate your understanding. If you have any questions, please feel free to email or call us at the number below. 
&lt;P&gt;Thanks- 
&lt;P&gt;ThinkGeek Customer Service 
&lt;P&gt;1-888-433-5788 (phone) 
&lt;P&gt;1-703-839-8611 (fax)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Wow.&amp;nbsp; We've ordered from them in the past (and placed other large orders with them), but we've never seen anything as outrageous as this.&amp;nbsp; They're asking for exactly the kind information that would be necessary to perpetuate an identity theft of Valorie's identity, and they're holding our order hostage if we don't comply.&lt;/P&gt;
&lt;P&gt;What was worse is that their order form didn't even ask for the CVE code on the back of the credit card (the one that's not imprinted).&amp;nbsp; So not only didn't they follow the "standard" practices that most e-commerce sites follow when dealing with credit cards, but they felt it was necessary for us to provide exactly the kind of information that an identity thief would ask for.&lt;/P&gt;
&lt;P&gt;Valorie contacted them to let them know how she felt about it, and their response was:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Thank you for your recent ThinkGeek order. Sometimes, when an order is placed with a discrepancy between the billing and the shipping addresses, or with a billing address outside the US, or the order is above a certain value, our ordering system will flag the transaction. In these circumstances, we request physical documentation of the billing address on the order in question, to make sure that the order has been placed by the account holder. At ThinkGeek we take your security and privacy very seriously. We hope you understand that when we have to take extra security measures such as this, we do it to protect you as well as ThinkGeek.&lt;BR&gt;Unfortunately, without this documentation, we are unable to complete the processing of your order. If we do not receive the requested documentation within two weeks of your initial order date, your order will automatically be cancelled. If you can't provide documentation of the billing address on your order, you will need to cancel your current order and reorder using the proper billing address for your credit card. Once we receive and process your documentation, you should not need to provide it on subsequent orders. Please let us know if you have any further questions.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The good news is that we have absolutely no problems with them canceling the order, and we're never going to do business with them again.&amp;nbsp; There are plenty of other retailers out there that sell the same stuff that ThinkGeek does who are willing to accept our business without being offensive about it.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit to add:&amp;nbsp; Think Geek responded to our issues, their latest response can be found &lt;A class="" href="http://blogs.msdn.com/larryosterman/archive/2007/11/19/think-geek-responds.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/11/19/think-geek-responds.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6279046" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Personal+Stuff/default.aspx">Personal Stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Things+you+shouldn_2700_t+do_2E00_/default.aspx">Things you shouldn't do.</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item></channel></rss>