<?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</title><link>http://blogs.msdn.com/larryosterman/default.aspx</link><description>Confessions of an Old Fogey</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>More fun with Amazon reviews.</title><link>http://blogs.msdn.com/larryosterman/archive/2009/11/04/more-fun-with-amazon-reviews.aspx</link><pubDate>Wed, 04 Nov 2009 22:35:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9917597</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9917597.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9917597</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9917597</wfw:comment><description>&lt;p&gt;A co-worker &lt;a href="http://www.amazon.com/Mobile-Office-WM-01-Laptop-Steering/product-reviews/B000IZGIA8/ref=dp_top_cm_cr_acr_txt?ie=UTF8&amp;amp;showViewpoints=1"&gt;sent this&lt;/a&gt; around and I just HAD to share it…&amp;#160;&amp;#160; It’s not nearly as geeky as “The Story of Ping”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For those that don’t want to follow the link, these are some of reviews for this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/MorefunwithAmazonreviews_CD09/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/MorefunwithAmazonreviews_CD09/image_thumb.png" width="644" height="272" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“I bought this review based on all of the positive reviews, but am having some issues with space. The desk is great shape and fit for my 2004 Chevy Caprice, but I am really having a heck of a time fitting the Chevy in the office. I put my printer/fax, coffee machine, shredder, and inappropriate family photos snugly in the backseat, yet I still don't have enough room to walk around the Chevy. And worse, I can barely open the door and squeeze in. Most of the time I squeeze in the passenger side and scramble into the driver seat. I tried leaving the window open and crawling through, but Scrappy hops in and hangs his head out the window. I just don't have the heart to tell him we aren't going to the dogpark and that I am still working.      &lt;br /&gt;When the contractor comes to tear out the adjoining wall to my living room, I know he will ask me &amp;quot;Why don't you just use the garage?&amp;quot; But has he actually *seen* the garage! It's filled with stuff I never use like my treadmill, ab-lounger, roto-till, lawnmower... I couldn't work in that kind of clutter! NO WAY!       &lt;br /&gt;Don't get me wrong! I LOVE THIS PRODUCT! Now I can turn my Neil Diamond up as loud as I want to and not have Sandra from Accounting peek over my cubical with those angry little eyes. And when I want to go to Starbucks or McDonalds I can work while I drive AND in the drive thru, too! It works perfectly with my &lt;a href="http://www.amazon.com/gp/product/B000JDWD2G/ref=cm_cr_asin_lnk"&gt;Universal Portable Urinal - Unisex&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/product/B000FIDZLI/ref=cm_cr_asin_lnk"&gt;Reliance Products Hassock Portable Lightweight Self-Contained Toilet&lt;/a&gt;      &lt;br /&gt;Working from my car, and home, has never been easier. I finally threw out that crappy IKEA desk and printer stand combo! Good riddance! Best of all now I don't have to &amp;quot;tele-commute&amp;quot; to work, I &amp;quot;auto-commute.&amp;quot; AWESOME.”&lt;/p&gt;    &lt;p&gt;“My 16 year old daughter just got her license a few weeks ago. Since then, she's been going out for drives a lot after school. Unfortunately, all the time spent in the car for her has meant less time for homework. Her grades have noticeably slipped, but instead of taking away her car privileges, I bought this steering wheel desk. It's perfect for young drivers with heavy academic loads! Now she can work on her homework and still be out driving, improving her road skills and staying on top of her grades. I couldn't be prouder and would encourage all parents with new drivers to set their kids up with this super-portable work station!”&lt;/p&gt;    &lt;p&gt;“My copilot and I both used these during our &amp;quot;daily grind&amp;quot; transcontinental flights from San Diego to Minneapolis. We had to modify them a bit to fit snug against the instrument panels (when we bought them we didn't realize the planes we fly don't have steering wheels!), but in the end it did the job. With our laptops firmly in place we were able to focus our attention on what really mattered, participating in raids with our WoW clan. During our last flight we were so immersed in trying to take down Eranikus that we overshot Minneapolis by a full hour and a half before some annoying flight attendant interrupted us, babbling something about &amp;quot;FAA and F16 fighters.&amp;quot;      &lt;br /&gt;We'll definitely use this product again at our next gig, whatever and whenever that happens to be...       &lt;br /&gt;Highly recommended! “ [Editors Note: A reference to &lt;a href="http://www.msnbc.msn.com/id/33483228/"&gt;this&lt;/a&gt;]&lt;/p&gt;    &lt;p&gt;“This is definitely one of the best products out there!      &lt;br /&gt;While commuting through downtown Seattle, I always had to make my sushi on the little center console in my Honda - try making a perfect California roll there! No way!       &lt;br /&gt;Now, I can safely make my California rolls, Spider rolls and Rainbow rolls - all while steering with my knee.       &lt;br /&gt;Downsides - it doesn't have a receptical for my egg drop soup bowl. Also, I have to keep my knife on the dashboard and my chopsticks tucked in my crotch. So, there are some flaws with this product. I would also recommend keeping your sake in a flask under the passengers seat.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The reviews go on and on in this vein.&amp;#160; Very funny.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9917597" 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></item><item><title>Why are they called “giblets” anyway?</title><link>http://blogs.msdn.com/larryosterman/archive/2009/10/26/why-are-they-called-giblets-anyway.aspx</link><pubDate>Mon, 26 Oct 2009 16:05:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9912997</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9912997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9912997</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9912997</wfw:comment><description>&lt;p&gt;&lt;img style="margin: 0px 15px 0px 0px; display: inline" align="left" src="http://photos-e.ak.fbcdn.net/hphotos-ak-snc1/hs260.snc1/10722_174480945344_708065344_2937574_248190_n.jpg" width="180" height="240" /&gt;&lt;/p&gt;  &lt;p&gt;Five years ago, I attended one of the initial security training courses as a part of the XP SP2 effort.&amp;#160; I wrote this up in one of my very first posts entitled “&lt;a href="http://blogs.msdn.com/larryosterman/archive/2004/05/04/126054.aspx"&gt;Remember the giblets&lt;/a&gt;” and followed it up last year with “&lt;a href="http://blogs.msdn.com/larryosterman/archive/2008/03/07/the-trouble-with-giblets.aspx"&gt;The Trouble with Giblets&lt;/a&gt;”.&amp;#160; I use the term “giblets” a lot but I’d never bothered to go out and figure out where the term came from.&lt;/p&gt;  &lt;p&gt;Well, we were talking about giblets in an email discussion today and one of my co-workers went and asked Michael Howard where the term came from.&amp;#160; Michael forwarded the question to &lt;a href="http://blogs.msdn.com/sdl/pages/about-us.aspx"&gt;Steve Lipner&lt;/a&gt; who was the person who originally coined the term and he came back with the origin of the term.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It turns out that “giblets” is a term that was used at Digital Equipment Corporation back in the 1980s.&amp;#160; DEC used to sell big iron machines (actually I used DEC machines exclusively until I started at Microsoft).&amp;#160; The thing about big machines is that you usually need more than just the machine to build a complete solution – things like Ethernet repeaters and adapters and other fiddly bits.&amp;#160; And of course DEC was more than willing to sell you all these fiddly bits.&amp;#160; It seems that some of the DEC marketing people liked to refer to these bits and pieces as “giblets”.&amp;#160; &lt;/p&gt;  &lt;p&gt;Over time Steve started using the term for the pieces of software that were incidental to the product but which weren’t delivered by the main development team – things like the C runtime library, libJPG, ATL, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;Later on, someone else (Steve wasn’t sure who, it might have been Eric Bidstrup) pointed out that the giblets that came from a turkey didn’t necessarily come from the actual turkey that you’re eating which makes the analogy even more apt.&lt;/p&gt;  &lt;p&gt;Thanks to Craig Gehre for the picture.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9912997" 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/Security/default.aspx">Security</category></item><item><title>Windows 7 Reflections…</title><link>http://blogs.msdn.com/larryosterman/archive/2009/10/23/windows-7-reflections.aspx</link><pubDate>Fri, 23 Oct 2009 17:53:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9912165</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9912165.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9912165</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9912165</wfw:comment><description>&lt;p&gt;Today[1] Microsoft formally launched Windows 7.&amp;#160; I can’t say how proud I am of the work we did in Windows 7 – it’s been an amazing journey.&amp;#160; This is the 4th version of Windows I’ve worked on and I have never felt this way about a release of Windows.&amp;#160; I have to admit that I get a bit weepy with pride whenever I see a Win7 commercial (Kylie is simply too cute :)).&amp;#160; &lt;/p&gt;  &lt;p&gt;I thought I’d write a bit about the WIn7 experience from my point of view.&amp;#160; I’ve written a bit of this stuff in &lt;a href="http://blogs.msdn.com/e7/archive/2008/10/15/engineering-7-a-view-from-the-bottom.aspx"&gt;my post on the Engineering 7 blog&lt;/a&gt; but that was more about the changes in engineering processes as opposed to my personal experiences in the process.&lt;/p&gt;  &lt;p&gt;For me, the Windows 7 work basically started just after we shipped Vista.&amp;#160; While the PMs and leads on the sound team were busy working on planning for Win7, I spent most of the time between Vista RTM and the start of the Win7 feature design cleaning up some of the Vista code I was responsible for.&amp;#160; During the final Vista testing, I realized that there were some architectural deficiencies in some of the sound code that caused some really subtle bugs (that I don’t believe anyone outside of the sound team has ever found) so I took the opportunity to clean up those deficiencies.&amp;#160; &lt;/p&gt;  &lt;p&gt;I also fixed an issue that occurred when someone called the wave APIs from their DLL entry point.&amp;#160; Yes I know that apps aren’t supposed to call any APIs from DllMain but anyone who’s read either my blog or Raymond Chen’s blog will realize that a lot of apps do stuff like that and get away with it.&amp;#160; This fix was actually first deployed in Vista SP1 – we had identified the DllMain problem before we shipped Vista and included a workaround for the problem but we also added some telemetry so we could determine the number of customers that were affected by the bug.&amp;#160; Based on that telemetry we decided that we had to include the fix in Vista SP1 of the number of users affected by the issue.&amp;#160; This is a perfect example of some of the ways that the customer experience improvement program directly leads to product improvements.&amp;#160; Before we had the CEIP, we would have had no way of knowing how much impact the bug had on customers, the CEIP gave us visibility into the severity of the problem that we wouldn’t have had before.&lt;/p&gt;  &lt;p&gt;During this interim time, I also worked on a number of prototype projects and helped the SDL tools team work on the current version of the &lt;a href="http://msdn.microsoft.com/en-us/security/dd206731.aspx"&gt;threat modeling tool&lt;/a&gt;.&amp;#160; played around with some new (to me) development strategies – RAII and exception based programming and test driven development.&amp;#160; &lt;/p&gt;  &lt;p&gt;In June of 2007, we started working on actual feature planning – the planning team had come up with a set of tentative features for Win7 and we started the actual design for the features – figuring out the user experience for the features, the internal implementation details, etc.&amp;#160;&amp;#160; During the first milestone, I worked on the &lt;a href="http://blogs.msdn.com/larryosterman/archive/2009/08/04/a-few-of-my-favorite-win7-sound-features-capture-monitor-aka-listen-to.aspx"&gt;capture monitor&lt;/a&gt; feature – I ended up writing the feature from start to finish.&amp;#160; This was my first time writing features using RAII and using TDD.&amp;#160; I’ve got to say that I like it – as I remember, there were only 2 or 3 bugs found in the capture monitor that weren’t found by my unit tests and I’m not aware of any bugs that were found outside the team (which might just be an indication of how little the feature is used :)).&lt;/p&gt;  &lt;p&gt;After the capture monitor work, I spent the next milestone working on UI features – I was on a feature crew of 2 developers working on enhancing sndvol to make it work better with multiple devices and to fix a number of accessibility issues with the UI.&amp;#160; This was the first time in my almost 25 years at Microsoft where I had an opportunity to do “real” UI development.&amp;#160; I know that there’s a lot of controversy about the UI choices we made but I’m pretty happy with the UI changes.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;The third milestone for Win7 I worked on the “&lt;a href="http://blogs.msdn.com/larryosterman/archive/2008/11/25/the-ducking-whitepaper-is-now-online.aspx"&gt;Ducking&lt;/a&gt;” feature.&amp;#160; Of all the features I worked on for WIn7, the ducking feature is the closest to a “&lt;a href="http://en.wikipedia.org/wiki/DWIM"&gt;DWIM&lt;/a&gt;” feature in Windows – the system automatically decreases the volume for applications when you start a communicating with other people (this feature requires some application changes to work correctly though which is why you don’t see it in use right now (although it has shown up in &lt;a href="http://forums.steampowered.com/forums/showthread.php?t=784346"&gt;at least one application&lt;/a&gt; by accident)).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The remarkable thing about Win7 development was that it was almost friction free.&amp;#160; During the Vista development process (and in every other product I’ve worked on) development was marked by a constant stream of new issues which were a constant drain on time an energy.&amp;#160; It felt like we moved from one crisis to another crisis.&amp;#160; For Win7 it was different.&amp;#160; I think it was some time during the second milestone that I realized that Win7 was “special”.&amp;#160; The newer development process that was deployed for Win7 was clearly paying off and my life was far less stressed.&amp;#160; In fact I don’t think I worked late or came in on weekends once during the entire 3 years that Win7 was under development – this was a HUGE change.&amp;#160; Every other product I’ve ever worked on has required late nights and weekends (sometime it required all-nighters).&amp;#160; But for Win7 it just didn’t happen.&amp;#160; Instead we set a set of goals that were reasonable with achievable schedules and we executed on those goals and delivered the features we promised.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’m so happy that customers are now going to be able to play with the stuff we’ve all worked so hard to deliver to you.&amp;#160; Enjoy :).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[1] I started writing this on the 22nd but didn’t finish it until today.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9912165" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Win7 Whoppers</title><link>http://blogs.msdn.com/larryosterman/archive/2009/10/21/win7-whoppers.aspx</link><pubDate>Thu, 22 Oct 2009 01:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911051</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9911051.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9911051</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9911051</wfw:comment><description>&lt;P&gt;Wow, one of my co-workers just sent this image out.&amp;nbsp; It’s totally awesome (IMHO)…&lt;/P&gt;
&lt;P&gt;&lt;A title=http://twitpic.com/mehp6/full href="http://twitpic.com/mehp6/full" mce_href="http://twitpic.com/mehp6/full"&gt;http://twitpic.com/mehp6/full&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit: The image tag didn't work for some reason so I removed it and just left the link...&lt;/P&gt;
&lt;P&gt;Bonus: The first Win7 ad: &lt;A href="http://video.nytimes.com/video/2009/10/21/multimedia/1247465293593/an-ad-for-windows-7-from-microsoft.html"&gt;http://video.nytimes.com/video/2009/10/21/multimedia/1247465293593/an-ad-for-windows-7-from-microsoft.html&lt;/A&gt;#&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911051" 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/Windows+7/default.aspx">Windows 7</category></item><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>36</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>25</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>Building a flicker free volume control</title><link>http://blogs.msdn.com/larryosterman/archive/2009/09/16/building-a-flicker-free-volume-control.aspx</link><pubDate>Thu, 17 Sep 2009 00:50:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9896072</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>30</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9896072.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9896072</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9896072</wfw:comment><description>&lt;p&gt;When we shipped Windows Vista, one of the really annoying UI annoyances with the volume control was that whenever you resized it, it would flicker.&amp;#160; &lt;/p&gt;  &lt;p&gt;To be more specific, the right side of the control would flicker – the rest didn’t flicker (which was rather strange).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Between the Win7 PDC release (what we called M3 internally) and the Win7 Beta, I decided to bit the bullet and see if I could fix the flicker.&amp;#160; It seems like I tried everything to make the flickering go away but I wasn’t able to do it until I ran into the &lt;a href="http://blogs.msdn.com/larryosterman/archive/2008/08/27/larry-s-new-favorite-windows-message-wm-printclient.aspx"&gt;WM_PRINTCLIENT&lt;/a&gt; message which allowed me to direct all of the internal controls on the window to paint themselves.&lt;/p&gt;  &lt;p&gt;Basically on a paint call, I’d take the paint DC and send a WM_PRINTCLIENT message to each of the controls in sndvol asking them each to paint themselves to the new DC.&amp;#160; This worked almost perfectly – I was finally able to build a flicker free version of the UI.&amp;#160; The UI wasn’t perfect (for instance the animations that faded in the “flat buttons” didn’t fire) but the UI worked just fine and looked great so I was happy that' I’d finally nailed the problem.&amp;#160; That happiness lasted until I got a bug report in that I simply couldn’t figure out.&amp;#160; It seems that if you launched the volume mixer, set the focus to another application then selected the volume mixer’s title bar and moved the mixer, there were a ton of drawing artifacts left on the screen.&lt;/p&gt;  &lt;p&gt;I dug into it a bunch and was stumped.&amp;#160; It appeared that the clipping rectangle sent in the WM_PAINT message to the top level message didn’t include the entire window, thus portions of the window weren’t erased.&amp;#160; I worked on this for a couple of days trying to figure out what was going wrong and I finally asked for help on one of our internal mailing lists.&lt;/p&gt;  &lt;p&gt;The first response I got was that I shouldn’t use WM_PRINTCLIENT because it was going to cause me difficulty.&amp;#160; I’d already come to that conclusion – by trying to control every aspect of the drawing experience for my app, I was essentially working against the window manager – that’s why the repaint problem was happening.&amp;#160; By calling WM_PRINTCLIENT I was essentially putting a band-aid on the real problem but I hadn’t solved the &lt;em&gt;real &lt;/em&gt;problem, all I’d done is to hide it. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So I had to go back to the drawing board.&amp;#160; Eventually (with the help of one of the developers on the User team) I finally tracked down the original root cause of the problem and it turns out that the root cause was somewhere totally unexpected.&lt;/p&gt;  &lt;p&gt;Consider the volume UI:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/Buildingaflickerfreevolumecontrol_D098/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/Buildingaflickerfreevolumecontrol_D098/image_thumb.png" width="493" height="353" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The UI is composed of two major areas: The “Devices” group and the “Applications” group.&amp;#160; There’s a group box control wrapped around the two areas.&lt;/p&gt;  &lt;p&gt;Now lets look at the group box control.&amp;#160; For reasons that are buried deep in the early history of Windows, a group box is actually a form of the “button” control.&amp;#160; If you look at the window styles for a button in SpyXX, you’ll see: &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/Buildingaflickerfreevolumecontrol_D098/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/Buildingaflickerfreevolumecontrol_D098/image_thumb_1.png" width="400" height="302" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Notice the CS_VREDRAW and CS_HREDRAW window class styles.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx#class_styles"&gt;MSDN documentation for class styles&lt;/a&gt; says:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;CS_HREDRAW - Redraws the entire window if a movement or size adjustment changes the width of the client area.     &lt;br /&gt;CS_VREDRAW - Redraws the entire window if a movement or size adjustment changes the height of the client area.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In other words every window class with the CS_HREDRAW or CS_VREDRAW style will &lt;em&gt;always &lt;/em&gt;be fully repainted whenever the window is resized (including all the controls inside the window).&amp;#160; And ALL buttons have these styles.&amp;#160; That means that whenever you resize &lt;em&gt;any&lt;/em&gt; buttons, they’re going to flicker, and so will all of the content that lives below the button.&amp;#160; For most buttons this isn’t a big deal but for group boxes it can be a big issue because group boxes contain other controls.&lt;/p&gt;  &lt;p&gt;In the case of sndvol, when you resize the volume control, we resize the applications group box (because it’s visually pinned to the right side of the dialog).&amp;#160; Which causes the group box and all of its contained controls to repaint and thus flicker like crazy.&amp;#160; The only way to fix this is to remove the CS_HREDRAW and CS_VREDRAW buttons from the window style for the control.&lt;/p&gt;  &lt;p&gt;The good news is that once I’d identified the root cause, the solution to my problem was relatively simple.&amp;#160; I needed to build my own custom version of the group box which handled its own painting and didn’t have the CS_HREDRAW and CS_VREDRAW class.&amp;#160; Fortunately it’s really easy to draw a group box – if themes are enabled a group box can be drawn with &lt;a href="http://social.msdn.microsoft.com/Search/en-US?query=drawthemebackground&amp;amp;ac=3"&gt;DrawThemeBackground&lt;/a&gt; API with the &lt;a href="http://msdn.microsoft.com/en-us/library/bb773210(VS.85).aspx"&gt;BP_GROUPBOX&lt;/a&gt; part and if theming is disabled, you can use the &lt;a href="http://msdn.microsoft.com/en-us/library/dd162477(VS.85).aspx"&gt;DrawEdge&lt;/a&gt; API to draw the group box.&amp;#160; Once I added the new control that and dealt with a number of other clean-up issues (making sure that the right portions of the window were invalidated when the window was resized for example), making sure that my top level control had the WS_CLIPCHILDREN style and that each of the sub windows had the WS_CLIPSIBLINGS style I had a version of sndvol that was flicker free AND which let the window manager handle all the drawing complexity.&amp;#160; There are still some minor visual gotchas in the UI (for example, if you resize the window using the left edge the right side of the group box “shudders” a bit – this is apparently an artifact that’s outside my control – other apps have similar issues when resized on the left edge) but they’re acceptable.&lt;/p&gt;  &lt;p&gt;As an added bonus, now that I was no longer painting everything manually, the fade-in animations on the flat buttons started working again!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;PS: While I was writing this post, I ran into this &lt;a href="http://www.catch22.net/tuts/flicker"&gt;tutorial on building flicker free applications&lt;/a&gt;, I wish I’d run into it while I was trying to deal with the flickering problem because it nicely lays out how to solve the problem.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9896072" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Nifty+Win32+tricks_2E00_/default.aspx">Nifty Win32 tricks.</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>The story behind the mysterious “Ding” in Windows Vista.</title><link>http://blogs.msdn.com/larryosterman/archive/2009/09/03/the-story-behind-the-mysterious-ding-in-windows-vista.aspx</link><pubDate>Fri, 04 Sep 2009 03:29:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9891148</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9891148.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9891148</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9891148</wfw:comment><description>&lt;p&gt;I just ran into this fairly old post on Channel 9.&amp;#160; mstefan &lt;a href="http://channel9.msdn.com/forums/Coffeehouse/256901-Stop-the-Ding/"&gt;reported&lt;/a&gt; that his applications played a “Ding” noise when selecting an item in a listview (or tree) control.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It turns out that I’d had the problem independently reported to me by one of the people here at Microsoft.&amp;#160; Here were his reproduction steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Clean Install Windows&lt;/li&gt;    &lt;li&gt;Open the sounds control panel&lt;/li&gt;    &lt;li&gt;Set the “Select” sound to a value&lt;/li&gt;    &lt;li&gt;Clear the “Select” sound (set it to “(None)”).&lt;/li&gt;    &lt;li&gt;Change the selection in a listview&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Complicating matters is that this didn’t occur with many apps, just a couple of Windows Forms applications that the person at Microsoft had.&amp;#160; So I dug into it a bit.&lt;/p&gt;  &lt;p&gt;I quickly realized that the problem was that the application was calling PlaySound without the “SND_NODEFAULT” flag.&amp;#160; I’ve written about this flag &lt;a href="https://blogs.msdn.com/larryosterman/archive/2008/09/25/why-specify-snd-nodefault-when-calling-playsound.aspx"&gt;before&lt;/a&gt; (in fact I wrote that post shortly after investigating this issue, so that post contains part of the story).&lt;/p&gt;  &lt;p&gt;Digging in deeper, I realized that the application was using version 5 of the common controls (there are two versions in Windows, v5 and v6).&amp;#160; The problem didn’t occur in the version 6 common controls (this is why most applications didn’t reproduce the problem).&lt;/p&gt;  &lt;p&gt;So why did the problem occur?&lt;/p&gt;  &lt;p&gt;The common controls have a single routine which calls PlaySound and that code attempts to be somewhat clever.&amp;#160; Instead of simply calling PlaySound, the code instead read the HKEY_CURRENT_USER\AppEvents\Schemes\.Default\CCSelect registry key.&amp;#160; If the key didn’t exist, it skipped calling PlaySound.&amp;#160; If the CCSelect registry key existed, it would call PlaySound specifying the CCSelect alias.&lt;/p&gt;  &lt;p&gt;I’ve actually run into this pattern a bunch in WIndows – teams decided that calling PlaySound was “too slow”, or had “too much overhead” so they tried to avoid the call to PlaySound if the call to PlaySound wasn’t going to do anything (once upon a time it was important to avoid calling PlaySound because it could sometimes hang your application for several seconds – this isn’t the case any more if you specify SND_ASYNC).&lt;/p&gt;  &lt;p&gt;The problem is that when you hit step 2 above (setting the “Select” sound), the control panel created the CCSelect registry key with a default value of the sound file you’re setting.&amp;#160; When you set it to “None” the control panel cleared the value of the sound contained under the key.&amp;#160; But the key itself wasn’t deleted.&amp;#160; So the check above that checked for the registry key’s existence succeeded and it called PlaySound.&amp;#160; But because the call didn’t specify SND_NODEFAULT, the PlaySound API decided to play the default sound when it realized that there wasn’t a sound associated with the CCSelect alias.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I wanted to understand how this bug was introduced so I looked back at the source history of the file containing the bug.&amp;#160; It turns out that this was actually a bug fix made to Windows XP that wasn’t incorporated into Windows Server 2003.&amp;#160; When Windows Vista was created, the team started with the Windows Server 2003 code base and incorporated all the bug fixes made since Windows XP forked into the Win2K3 code base.&amp;#160; For whatever reason, this particular fix was missed when the team did the merge.&amp;#160; Because the behavior was so subtle (to trigger the change you MUST go through steps 2 through 4 to get the registry key created and your app must use the v5 of the common controls).&lt;/p&gt;  &lt;p&gt;Needless to say, it’s fixed in WIndows 7.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9891148" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Microsoft+History/default.aspx">Microsoft History</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>What’s the difference between GetTickCount and timeGetTime?</title><link>http://blogs.msdn.com/larryosterman/archive/2009/09/02/what-s-the-difference-between-gettickcount-and-timegettime.aspx</link><pubDate>Thu, 03 Sep 2009 00:31:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890595</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>26</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9890595.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9890595</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9890595</wfw:comment><description>&lt;p&gt;I’ve always believed that the most frequently used multimedia API in winmm.dll was the PlaySound API.&amp;#160; However I recently was working with the results of some static analysis tools that were run on the Windows 7 codebase and I realized that in fact the most commonly used multimedia API (in terms of code breadth) was actually the timeGetTime API.&amp;#160; In fact almost all the multimedia APIs use timeGetTime which was somewhat surprising to me at the time.&lt;/p&gt;  &lt;p&gt;The MSDN article for &lt;a href="http://msdn.microsoft.com/en-us/library/aa912626.aspx"&gt;timeGetTime&lt;/a&gt; says that timeGetTime “retrieves the system time, in milliseconds. The system time is the time elapsed since the system started.”.&lt;/p&gt;  &lt;p&gt;But that’s almost exactly what the &lt;a href="http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx"&gt;GetTickCount&lt;/a&gt; API returns “the number of milliseconds that have elapsed since the system was started, up to 49.7 days.” (obviously timeGetTime has the same 49.7 day limit since both APIs return 32bit counts of milliseconds).&lt;/p&gt;  &lt;p&gt;So why are all these multimedia APIs using timeGetTime and not GetTickCount since the two APIs apparently return the same value?&amp;#160; I wasn’t sure so I dug in a bit deeper.&lt;/p&gt;  &lt;p&gt;The answer is that they don’t.&amp;#160; You can see this with a tiny program:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; _tmain(&lt;span class="kwrd"&gt;int&lt;/span&gt; argc, _TCHAR* argv[])&lt;/pre&gt;

    &lt;pre&gt;{&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; i = 100;&lt;/pre&gt;

    &lt;pre&gt;    DWORD lastTick = 0;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    DWORD lastTime = 0;&lt;/pre&gt;

    &lt;pre&gt;    &lt;span class="kwrd"&gt;while&lt;/span&gt; (--i)&lt;/pre&gt;

    &lt;pre class="alt"&gt;    {&lt;/pre&gt;

    &lt;pre&gt;        DWORD tick = GetTickCount();&lt;/pre&gt;

    &lt;pre class="alt"&gt;        DWORD time = timeGetTime();&lt;/pre&gt;

    &lt;pre&gt;        printf(&lt;span class="str"&gt;&amp;quot;Tick: %d, Time: %d, dTick: %3d, dTime: %3d\n&amp;quot;&lt;/span&gt;, tick, time, tick-lastTick, time-lastTime);&lt;/pre&gt;

    &lt;pre class="alt"&gt;        lastTick = tick;&lt;/pre&gt;

    &lt;pre&gt;        lastTime = time;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        Sleep(53);&lt;/pre&gt;

    &lt;pre&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;/pre&gt;

    &lt;pre&gt;}&lt;/pre&gt;
  &lt;/div&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;If you run this program, you’ll notice that the difference between the timeGetTime results is MUCH more stable than the difference between the GetTickCount results (note that the program sleeps for 53ms which usually doesn’t match the native system timer resolution):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Tick: 175650292, Time: 175650296, dTick:&amp;#160; 46, dTime:&amp;#160; 54
    &lt;br /&gt;Tick: 175650355, Time: 175650351, dTick:&amp;#160; 63, dTime:&amp;#160; 55

    &lt;br /&gt;Tick: 175650417, Time: 175650407, dTick:&amp;#160; 62, dTime:&amp;#160; 56

    &lt;br /&gt;Tick: 175650464, Time: 175650462, dTick:&amp;#160; 47, dTime:&amp;#160; 55

    &lt;br /&gt;Tick: 175650526, Time: 175650517, dTick:&amp;#160; 62, dTime:&amp;#160; 55

    &lt;br /&gt;Tick: 175650573, Time: 175650573, dTick:&amp;#160; 47, dTime:&amp;#160; 56

    &lt;br /&gt;Tick: 175650636, Time: 175650628, dTick:&amp;#160; 63, dTime:&amp;#160; 55

    &lt;br /&gt;Tick: 175650682, Time: 175650683, dTick:&amp;#160; 46, dTime:&amp;#160; 55

    &lt;br /&gt;Tick: 175650745, Time: 175650739, dTick:&amp;#160; 63, dTime:&amp;#160; 56

    &lt;br /&gt;Tick: 175650792, Time: 175650794, dTick:&amp;#160; 47, dTime:&amp;#160; 55

    &lt;br /&gt;Tick: 175650854, Time: 175650850, dTick:&amp;#160; 62, dTime:&amp;#160; 56&lt;/p&gt;

  &lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s because GetTickCount is incremented by the clock tick frequency on every clock tick and as such the delta values waver around the actual time (note that the deltas average to 55ms so on average getTickCount returns an accurate result but not with spot measurements) but timeGetTime’s delta is highly predictable.&lt;/p&gt;

&lt;p&gt;It turns out that for isochronous applications (those that depend on clear timing) it is often important to be able to retrieve the current time in a fashion that doesn’t vary, that’s why those applications use timeGetTime to achieve their desired results.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890595" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Nifty+Win32+tricks_2E00_/default.aspx">Nifty Win32 tricks.</category></item><item><title>Digging into the history bin (AKA: Microsoft Developer says that Windows is useless)</title><link>http://blogs.msdn.com/larryosterman/archive/2009/09/01/digging-into-the-history-bin-aka-microsoft-developer-says-that-windows-is-useless.aspx</link><pubDate>Tue, 01 Sep 2009 21:49:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890021</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9890021.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9890021</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9890021</wfw:comment><description>&lt;p&gt;As I was writing my “25 years of Larry’s history at Microsoft in 1 year chunks” blog posts, I spent a fair amount of time digging through my email archives (trying to figure out exactly what happened at what time).&amp;#160; During this, I ran into a &lt;a href="http://groups.google.com/group/comp.sys.ibm.pc.digest/browse_thread/thread/4e17fc2b0f65305f/e51090ae7795400f?q=larry+osterman&amp;amp;_done=%2Fgroups%3Fq%3Dlarry+osterman%26start%3D50%26&amp;amp;_doneTitle=Back+to+Search&amp;amp;&amp;amp;d"&gt;link to a post&lt;/a&gt; I’d made on the Info-IBMPC mailing list mailing list back in 1992:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Date: Thu, 12 Mar 92 12:44:39 PST      &lt;br /&gt;From: lar&lt;a href="http://groups.google.com/groups/unlock?_done=/group/comp.sys.ibm.pc.digest/browse_thread/thread/4e17fc2b0f65305f/e51090ae7795400f%3Fq%3Dlarry%2Bosterman%26_done%3D%252Fgroups%253Fq%253Dlarry%2Bosterman%2526start%253D50%2526%26_doneTitle%3DBack%2Bto%2BSearch%26%26d&amp;amp;msg=e51090ae7795400f"&gt;...&lt;/a&gt;@microsoft.com       &lt;br /&gt;Subject: What do you do with your windows? (V92 #36) &lt;/p&gt;    &lt;p&gt;|| &amp;gt;From: m&lt;a href="http://groups.google.com/groups/unlock?_done=/group/comp.sys.ibm.pc.digest/browse_thread/thread/4e17fc2b0f65305f/e51090ae7795400f%3Fq%3Dlarry%2Bosterman%26_done%3D%252Fgroups%253Fq%253Dlarry%2Bosterman%2526start%253D50%2526%26_doneTitle%3DBack%2Bto%2BSearch%26%26d&amp;amp;msg=e51090ae7795400f"&gt;...&lt;/a&gt;@Violin.CC.MsState.Edu (Mubashir Cheema) &lt;/p&gt;    &lt;p&gt;||&amp;#160;&amp;#160; I recently acquired Windows 3.0 and I don't seem to understand one      &lt;br /&gt;|| thing.&amp;#160; What is it for?&amp;#160; What do I do with it?&amp;#160; What major advantage       &lt;br /&gt;|| does it have over Dos?&amp;#160; (I don't see any except being able to use mouse       &lt;br /&gt;|| and also the thing is bit more colorful) I think it was made for lazy       &lt;br /&gt;|| people who couldn't learn couple of DOS commands. &lt;/p&gt;    &lt;p&gt;||&amp;#160;&amp;#160; Don't tell me I could multi-task with it. I've been using Amigas      &lt;br /&gt;|| extensively &lt;/p&gt;    &lt;p&gt;I've got to jump in here, even though I suspect that there will probably be some form of an &amp;quot;official&amp;quot; response from MS if anyone in the DOS/Windows group is listening...... :) &lt;/p&gt;    &lt;p&gt;I'm going to be brutally honest about this one. &lt;strong&gt;Basically, Windows by itself IS pretty useless.&lt;/strong&gt; The thing that makes Windows great is the same thing that has made DOS the most popular operating system in history. It's the applications that are available for it. &lt;/p&gt;    &lt;p&gt;GUI's (Graphical User Interfaces) have been proven to be significantly easier for users to understand for beginning users, and are arguably the wave of the future. I don't know of a significant operating system being introduced for the PC market that doesn't have a GUI available on it, be it PM, X, GEM, or Windows. Windows is arguably the best GUI available for DOS based on what I consider the most significant criteria: What applications are available for the platform. &lt;/p&gt;    &lt;p&gt;Consider the list of available windows apps: Excel, WinWord, PageMaker, Corel Draw, WordPerfect, Lotus 123, etc just to name a couple off the      &lt;br /&gt;top of my head. &lt;/p&gt;    &lt;p&gt;You also hit on one of the significant reasons to use Windows - Multi-tasking. &lt;/p&gt;    &lt;p&gt;Windows is a non pre-emptive multi-tasking operating system.&amp;#160; On a 386, it does an ok job of multi-tasking multiple DOS applications, but on a      &lt;br /&gt;286 it functions as a simple task switcher like DOS 5 does.&amp;#160; It really shines when multi-tasking Windows applications however. &lt;/p&gt;    &lt;p&gt;In addition, when you couple the multi-tasking capabilities of Windows with a windows mechanism known as DDE (for Dynamic Data Exchange), you      &lt;br /&gt;can generate some truly incredible synergy between Windows applications. With Win 3.0/Win 3.1 Microsoft has introduced a concept       &lt;br /&gt;known as OLE (Open Linking and Embedding) which allows you to cut and past from multiple &amp;quot;applets&amp;quot; allowing applications to take advantage of       &lt;br /&gt;the capabilities of other shipped applications.&amp;#160; This allows an applet like an equation editor to manage all the information about formatting       &lt;br /&gt;an equation even when the equation is embedded in a word document. With OLE, you can simply double-click on the object and bring up the       &lt;br /&gt;&amp;quot;agent&amp;quot; that manages it (in my example, the equation editor). &lt;/p&gt;    &lt;p&gt;For application developers, Windows gives developers the ability to develop their applications without knowing anything about the      &lt;br /&gt;underlying hardware of the machine - a windows application that runs on a machine with a CGA adapter will also run on a machine with a graphics       &lt;br /&gt;accelerator that runs in 1024x1024 with 24 bits of color. &lt;/p&gt;    &lt;p&gt;In addition, when you write an application for windows, your application instantly will support literally hundreds of printers      &lt;br /&gt;transparently - Windows does all the work for you. &lt;/p&gt;    &lt;p&gt;To re-iterate, Windows as a stand-alone product is not extraordinarily interesting - there are lots of productivity packages that provide      &lt;br /&gt;similar functionality to users, the real benefit of Windows is the applications that run on it. &lt;/p&gt;    &lt;p&gt;I will also point out that there are more than 5000 Windows applications available today and still more will come out with Win 3.1.      &lt;br /&gt;The available windows applications span all ranges of applications from games (Microsoft's Entertainment pack, Berkley-Soft's After Dark, and       &lt;br /&gt;Sierra's Laffer Utilities for Windows) to Spreadsheets (Microsoft Excel, Lotus 1-2-3) to Word processors (Microsoft Word For Windows,       &lt;br /&gt;Lotus Ami), to Desktop publishing (Aldus Pagemaker, Microsoft Publisher), to presentation graphics (Microsoft Powerpoint), to       &lt;br /&gt;development tools (Microsoft Visual Basic) etc...... &lt;/p&gt;    &lt;p&gt;&lt;b&gt;Larry &lt;/b&gt;&lt;b&gt;Osterman&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;Disclaimer:&amp;#160; The opinions above are my own.&amp;#160; They are not necessarily the same as those of Microsoft.&amp;#160; I only work here. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Remember that this was written back in 1992 after Windows 3.0 had come out but before Windows 3.1.&amp;#160; There was no Win32, no web browser, no multimedia support, none of the things that we all take for granted in a modern system.&amp;#160; Back then a display card that supported 1Kx1K with 24bit color was considered a monster display card (and hard disks still came in “megabytes” – I remember buying a 2G hard disk back then for about a thousand dollars).&lt;/p&gt;  &lt;p&gt;Reading this again, I find it vaguely funny that in many ways my feelings about Windows haven’t really changed that much in 18 years – the value of the Windows platform is STILL the applications available for that platform (although the number of applications has grown from the 5000 or so back in 1992 to several million applications).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890021" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Microsoft+History/default.aspx">Microsoft History</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Software+Engineering/default.aspx">Software Engineering</category></item><item><title>25 Years Ago Today (August 27th, 1984)</title><link>http://blogs.msdn.com/larryosterman/archive/2009/08/27/25-years-ago-today-august-27th-1984.aspx</link><pubDate>Fri, 28 Aug 2009 00:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9887491</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>19</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9887491.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9887491</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9887491</wfw:comment><description>&lt;P&gt;I got up in the morning from temporary housing and put on my 3 piece business suit to start my first day of work at a relatively small computer company near Seattle called “Micro-Soft” or something like that.&amp;nbsp; Within a day I’d been ridiculed for my choice of dress (“You’re wearing a ne-ne-ne-ne-necktie?”) and had to sign a dozen or more forms, been handed an employee directory and shown to my new window office – a converted conference room, but still a window office.&amp;nbsp; I shared the office with Joe King (yeah, that was his real name) for about 2 weeks until I got my own office.&lt;/P&gt;
&lt;P&gt;I’ve spent the past 25 days giving a year-by-year recap of my career at Microsoft, today’s been a bit of a whirlwind.&amp;nbsp; I was originally going to recap the highlights of the past 25 years but instead I think I’ll just write about some of the events of the day.&lt;/P&gt;
&lt;P&gt;My group had a lunch where we celebrated with a “Windows Mixer” cake decorated by Steve Ball:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(3).jpg" mce_href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(3).jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="LarryO-25YearAnniversary (3)" border=0 alt="LarryO-25YearAnniversary (3)" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(3)_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(3)_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;I received my 25 year service award – the thing weighs about 30 pounds (it comes in a footlocker!).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(8).jpg" mce_href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(8).jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="LarryO-25YearAnniversary (8)" border=0 alt="LarryO-25YearAnniversary (8)" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(8)_thumb.jpg" width=184 height=244 mce_src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(8)_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And if you’ve seen the sound team, you know that we almost always have a video that goes with every event…&lt;/P&gt;
&lt;P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/VrlZxqdqFH4&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/VrlZxqdqFH4&amp;amp;hl=en&amp;amp;fs=1" mce_src="http://www.youtube.com/v/VrlZxqdqFH4&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/P&gt;
&lt;P&gt;EHO and Kristin Carr, two of my co-workers wearing their “Larry Look-Alike Kits”:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(5).jpg" mce_href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(5).jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="LarryO-25YearAnniversary (5)" border=0 alt="LarryO-25YearAnniversary (5)" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(5)_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(5)_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;My boss, Noel Cross with &lt;EM&gt;his&lt;/EM&gt; Larry Look-Alike Kit:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(4).jpg" mce_href="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(4).jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="LarryO-25YearAnniversary (4)" border=0 alt="LarryO-25YearAnniversary (4)" src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(4)_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/larryosterman/WindowsLiveWriter/25YearsAgoTodayAugust27th1984_D1F5/LarryO-25YearAnniversary%20(4)_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;I also was fortunate to have several of my co-workers from years gone by come by and share in the celebration, it was amazing seeing them again after several years.&lt;/P&gt;
&lt;P&gt;Today’s been an awesome day, and I’m really looking forward the next 25 years!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit: Ok, blogging while slighly intoxicated is a bad idea.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9887491" width="1" height="1"&gt;</description></item><item><title>24 years ago today (1985)</title><link>http://blogs.msdn.com/larryosterman/archive/2009/08/26/24-years-ago-today-1985.aspx</link><pubDate>Wed, 26 Aug 2009 20:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9885668</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9885668.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9885668</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9885668</wfw:comment><description>&lt;P&gt;Way back in 1985 I was busy working on MS-DOS 4.0.&amp;nbsp; MS-DOS 4.0 was a multitasking derivative of MS-DOS 2.0 (during 1985 we integrated the changes for MS-DOS 3.1 to MS-DOS 4.1).&lt;/P&gt;
&lt;P&gt;It’s important to remember the difference between MS-DOS and PC-DOS.&amp;nbsp; PC-DOS was an IBM OS offering which was largely written by Microsoft.&amp;nbsp; MS-DOS was Microsoft OEM version of PC-DOS (sold to companies like Compaq and DEC).&amp;nbsp; The MS-DOS releases always lagged behind the PC-DOS releases.&lt;/P&gt;
&lt;P&gt;Back in the mid 1980s IBM called the shots in the development of DOS – DOS releases were directly tied to IBM hardware offerings because IBM wanted a new version of PC-DOS for each new piece of hardware they shipped.&amp;nbsp; For example, when IBM shipped the PC/XT, they added a hard disk (with a whopping 10M storage capacity) and they asked Microsoft to add support for hard disks.&amp;nbsp; The MS-DOS team decided that the best way to support a hard disk wasto add a *nix style hierarchical filesystem with PC-DOS 2.0.&amp;nbsp; When IBM created the PC/AT, they also delivered PC-DOS 3.1 which added support for the IBM PC Lan Adapter, a broadband networking adapter that IBM shipped at the same time as the PC/AT.&amp;nbsp; It’s also important to remember that MS-DOS wasn’t a complete PC OS experience.&amp;nbsp; Instead Microsoft provided the core OS and the command interpreter and a couple of utilities.&amp;nbsp; Other utilities (like mode.com) were provided by the OEM.&amp;nbsp; This changed with MS-DOS 3.2 which included a full set of the utilities that were provided by IBM.&amp;nbsp; For MS-DOS 3.3, we were working with IBM under the Joint Development Agreement and as such we were finally able to ship the actual binaries that shipped with PC-DOS thus making MS-DOS identical to PC-DOS in functionality – but that didn’t happen until 1987.&lt;/P&gt;
&lt;P&gt;MS-DOS 4.0 was unique because it was developed “on spec” – IBM didn’t see a need for a multitasking version MS-DOS and didn’t have a new hardware offering on which to attach the product.&amp;nbsp; But IBM &lt;EM&gt;did&lt;/EM&gt; have the PC/AT which was an 80286 based processor and it didn’t have an OS that took advantage of that hardware.&amp;nbsp; So IBM and Microsoft started negotiations to take the MS-DOS 4.0 code base and turn it into what eventually turned into OS/2.&amp;nbsp; I ended up not working on the OS/2 effort, instead I worked on finishing up MS-DOS 4.0 for the OEM partners who had licensed MS-DOS 4.0.&lt;/P&gt;
&lt;P&gt;For MS-DOS 4.0 I worked on the BIOS (IO.SYS or IBMBIO.COM on PC-DOS).&amp;nbsp; In MS-DOS terms the BIOS was basically the binary which contained all the built-in drivers – keyboard, screen, printer, serial port.&lt;/P&gt;
&lt;P&gt;Edit: Removed extra "Z" introduced because I wrote this with my laptop balanced on my knee and the "Z" kept creeping in especially when typing IZBM.&lt;/P&gt;
&lt;P&gt;Over the summer of 1985, Valorie came out to visit me for an extended summer – she worked as a tester on the Windows and Word team testing printer drivers until she left in December.&amp;nbsp; And in December I proposed to her and she accepted my proposal, we got married in January 1987 (cue violins at this point :)).&lt;/P&gt;
&lt;P&gt;Tomorrow: 1984.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9885668" 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/Microsoft+History/default.aspx">Microsoft History</category></item><item><title>23 years ago today (1986)</title><link>http://blogs.msdn.com/larryosterman/archive/2009/08/25/23-years-ago-today-1986.aspx</link><pubDate>Tue, 25 Aug 2009 22:56:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9884040</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9884040.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9884040</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9884040</wfw:comment><description>&lt;p&gt;23 years ago, I was working on finishing MS-DOS 4.0 and transitioning to work on MS-DOS 4.1.&amp;#160; We also moved from the original Northup campus to the brand new 4 building campus herein Redmond.&amp;#160; At the time the company mandated that we give up our President’s Day holiday and instead replace it with the day we moved to the new campus.&amp;#160; Needless to say this did &lt;em&gt;not&lt;/em&gt; go over well.&amp;#160; I still remember one of my co-workers sending an email comparing John Shirley (president at the time) with Pope Gregory.&lt;/p&gt;  &lt;p&gt;For me this didn’t matter because a co-worker and I ended up spending the move time in France working with Goupil to finalize a number of bugs that they had with MS-DOS 4.0 (for instance MS-DOS 4.0’s floppy driver didn’t work correctly on machines with more than 2 floppy drives (we weren’t able to test this because none of the machines we had access to had 4 floppy drives, but Goupil had a machine with 4 drives on it – if I remember correctly the issue was a confusion as to how the drive select bits on the uPD765 worked).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9884040" 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/Microsoft+History/default.aspx">Microsoft History</category></item><item><title>20, 21 and 22 years ago (1987-1989)</title><link>http://blogs.msdn.com/larryosterman/archive/2009/08/24/20-21-and-22-years-ago-1987-1989.aspx</link><pubDate>Mon, 24 Aug 2009 22:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9882899</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9882899.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9882899</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9882899</wfw:comment><description>&lt;P&gt;Ok, at this point it should be blindingly obvious where this series is going :).&lt;/P&gt;
&lt;P&gt;In early&amp;nbsp;1987 I was still working on MS-DOS 4.1, a custom version of DOS for ICL in the UK.&amp;nbsp; I also got married to my wonderful wife Valorie in January.&amp;nbsp; We returned from our honeymoon and I wandered into work after getting off the plane (I’d parked my car at work and took the shuttle to the airport from work).&amp;nbsp; That was a HUGE mistake because I learned that the entire MS-DOS 4.1 team was going on a plane to the UK in 36 hours.&amp;nbsp; These days, I’d never do what I did next: I left my bride of a week at home (with a car with a manual transmission that she didn’t really know how to drive) for a week while I flew to the UK and met with customers (these days, I’d have insisted that Valorie come with me to the UK so we’d at least be together in the evenings and weekend).&amp;nbsp; I spent a huge amount of time in the UK that year finishing up MS-DOS 4.1.&lt;/P&gt;
&lt;P&gt;Between 1988 and 1990 I spent most of the time working on the Lan Manager family of products, starting with Lan Manager 1.1 and continuing through Lan Manager 2.0 (I left the Lan Manager team for NT OS/2 after Lan Manager 2.1).&lt;/P&gt;
&lt;P&gt;LanMan was a hoot – LanMan was when I first started working with Brian Valentine (and later for Brian Valentine).&amp;nbsp; Brian was maybe the most inspirational manager I’ve ever worked for, working for him was always a blast.&amp;nbsp; This was also where Danny Glasser gave me the nickname “DOS Vader” – at one point in the very late 1980s, I probably knew as much about the internals of MS-DOS than any other developer in the world.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In Lan Manager, I was the developer for the DOS version of the Lan Manager client.&amp;nbsp; It’s also when I had the “&lt;A href="http://blogs.msdn.com/larryosterman/archive/2004/04/30/123910.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2004/04/30/123910.aspx"&gt;8 F**ING BASICS&lt;/A&gt;” meeting with Bill Gates.&amp;nbsp; I started with a version of the messenger service for MS-DOS and then moved onto the network client – eventually I’d added support for a fully asynchronous programming model running under MS-DOS which was pretty cool (there were some limitations but in general it worked great).&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9882899" 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/Microsoft+History/default.aspx">Microsoft History</category></item><item><title>Nineteen years ago today (1990)</title><link>http://blogs.msdn.com/larryosterman/archive/2009/08/21/nineteen-years-ago-today-1990.aspx</link><pubDate>Sat, 22 Aug 2009 00:58:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9879383</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9879383.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9879383</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9879383</wfw:comment><description>&lt;p&gt;In 1990 I joined the WIndows NT OS/2 team after working on Lan Manager for several years.&amp;#160; I was one of about 4-5 developers who moved from the Lan Manager team to join the much storied NT OS/2 developers.&amp;#160; I still have my copy of the NT OS/2 workbook in my office – it’s a collection of the specs that make up Windows NT (astonishingly many of the aspects of the workbook are still valid even after almost 20 years).&amp;#160; In my office, I have a copy of the “NT Plan” which was the original schedule for NT.&amp;#160; Some of the entries on the “NT OS/2 Issues” page were:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“Install operating system – who will write?” [Back then, setup was an afterthought]&lt;/li&gt;    &lt;li&gt;Programming editor – what editor will we have?&amp;#160; Need better than a simple system editor (Better than VI!)&amp;#160; [They ended up with “M”, the “Microsoft Editor” which was a derivative of the &lt;a href="http://www.texteditors.org/cgi-bin/wiki.pl?Z"&gt;“Z” editor&lt;/a&gt;]. &lt;/li&gt;    &lt;li&gt;1024 byte sectors for system files.&amp;#160; Needed?&amp;#160; Needed for Japanese floppies? How needed&amp;#160; [floppy support was critical back in the 1990s]&lt;/li&gt;    &lt;li&gt;LAN: Who owns the&amp;#160; redirector.&amp;#160; Need two developers [they got one: me :)]&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The original schedule for NT OS/2 was that it would be demoed at Comdex in November showing off 4 “exciting 32 bit OS/2 applications” with no network filesystem support.&amp;#160; The plan was for an SDK release in the 4th quarter of 1990.&amp;#160; I also have the initial NT schedule for 1991-1993 which indicates that the plan was for 5 separate releases staged from 1991 to 1993, it ended up that none of the individual releases were made but the 5th release pretty closely aligns with the final Windows NT 3.1 project (which is pretty cool given how much changed in the NT project over that time).&lt;/p&gt;  &lt;p&gt;In all honesty, I was in over my head on the NT project – I was trying to build a component that was intended for use in a multithreaded/multiprocessing environment having never previously written code for such an environment – before that all my programming had been in assembly on MS-DOS.&amp;#160; I learned a staggering amount during my 4 years on the NT team and while it was extraordinarily painful, I came out of the experience a far better developer.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9879383" 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/Microsoft+History/default.aspx">Microsoft History</category></item></channel></rss>