<?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>The Galactic Patrol : Microsoft</title><link>http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx</link><description>Tags: Microsoft</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Interested in Indigo?</title><link>http://blogs.msdn.com/bwill/archive/2005/03/22/400744.aspx</link><pubDate>Wed, 23 Mar 2005 02:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:400744</guid><dc:creator>bwill</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bwill/comments/400744.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=400744</wfw:commentRss><description>&lt;p&gt;I've been posting some comments about Indigo on &lt;a href="http://galactic-patrol.blogspot.com/"&gt;my other blog&lt;/a&gt; - feel free to subscribe if you're interested in Indigo.&amp;nbsp; Here are some of the Indigo entries I've written:&lt;/p&gt; &lt;p&gt;&lt;a href="http://galactic-patrol.blogspot.com/2005/02/indigo-is-re-released-into-wild.html"&gt;http://galactic-patrol.blogspot.com/2005/02/indigo-is-re-released-into-wild.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://galactic-patrol.blogspot.com/2005/02/to-indigo-clr-contract-is-not.html"&gt;http://galactic-patrol.blogspot.com/2005/02/to-indigo-clr-contract-is-not.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://galactic-patrol.blogspot.com/2005/02/serviceoperation-wheres-message.html"&gt;http://galactic-patrol.blogspot.com/2005/02/serviceoperation-wheres-message.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://galactic-patrol.blogspot.com/2005/03/indigo-testing-take-pretty-things-and.html"&gt;http://galactic-patrol.blogspot.com/2005/03/indigo-testing-take-pretty-things-and.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://galactic-patrol.blogspot.com/2005/03/got-indigo-questions.html"&gt;http://galactic-patrol.blogspot.com/2005/03/got-indigo-questions.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://galactic-patrol.blogspot.com/2005/03/whats-right-way-to-dispose-channel.html"&gt;http://galactic-patrol.blogspot.com/2005/03/whats-right-way-to-dispose-channel.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Fair warning, I do occasionally blog about non-technical topics.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=400744" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Web+Services/default.aspx">Web Services</category></item><item><title>fetching you a bottle of water does *not* motivate me</title><link>http://blogs.msdn.com/bwill/archive/2004/06/24/164463.aspx</link><pubDate>Thu, 24 Jun 2004 13:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:164463</guid><dc:creator>bwill</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/bwill/comments/164463.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=164463</wfw:commentRss><description>&lt;div class="Section1"&gt; &lt;p&gt;This is the story of an inspirational speech that, well &amp;ndash; wasn&amp;rsquo;t.&lt;/p&gt; &lt;p&gt;I went to a divisional meeting recently &amp;ndash; lots of people, lots of powerpoint.&amp;nbsp;The topics were a bit dry, and the last speaker was clearly trying to drum up some excitement and enthusiasm.&amp;nbsp; He started telling us a story about Lance Armstrong.&amp;nbsp; &amp;ldquo;People think of him as this amazing solo performer,&amp;rdquo; he said, &amp;ldquo;but he relies on his team to make him a success.&amp;rdquo;&amp;nbsp; He goes on to tell us about the nine other people on the tour-de-france bike team with Lance.&amp;nbsp; They are so motivated.&amp;nbsp; They are so dedicated.&amp;nbsp; He tells us how they let Lance draft behind them.&amp;nbsp; He tells us how they sprint ahead to tire out all the other competitors.&amp;nbsp; He goes into this long sequence about how one of Lance&amp;rsquo;s teammates, tired as hell, still turned around, went back down the hill, grabbed eight bottles of water, and then sprinted back up the hill to give the water to Lance.&amp;nbsp; I have to tell you, the whole presentation left me flat &amp;ndash; if anything, it unmotivated me.&lt;/p&gt; &lt;p&gt;Its possible I was just in a bad mood that day.&amp;nbsp; Its possible that I&amp;rsquo;m just not a big cycling fan.&amp;nbsp; (Heresy for a Redmond resident, I know.)&amp;nbsp; But really &amp;ndash; if you want to motivate me, tell me that I can be Lance Armstrong &amp;ndash; not just his waterboy.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=164463" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>How well do you know your Microsoft acronyms?</title><link>http://blogs.msdn.com/bwill/archive/2004/06/22/163020.aspx</link><pubDate>Wed, 23 Jun 2004 05:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:163020</guid><dc:creator>bwill</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/bwill/comments/163020.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=163020</wfw:commentRss><description>&lt;P class=Section1&gt;&amp;nbsp;I made the following challenge &lt;A href="http://channel9.msdn.com/ShowPost.aspx?PostID=9994"&gt;over on Channel 9&lt;/A&gt; &amp;#8211; anyone care to take up the gauntlet?&lt;/P&gt;
&lt;P class=Section1 style="MARGIN-LEFT: 0.5in"&gt;&lt;SPAN&gt;&amp;#8220;That takes me back - when I started at Microsoft eight years ago, I worked in the Windows build lab.&amp;nbsp; This was back when we were working on SUR, and IIS 1.0.&amp;nbsp; We used SLM instead of SD, and there were no VBLs.&amp;nbsp; Working in the neck of the software development funnel was quite an experience back then - and I'm sure the challenges of the job have not decreased over the past eight years.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Section1 style="MARGIN-LEFT: 0.5in"&gt;&lt;SPAN&gt;10 points to anyone who can identify all the acronyms I used above.&amp;nbsp; (Ok, only 5 points if you are an MS employee.)&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;[UPDATE: Kevin Dente got them all right - I suggest guessing before reading the comments on this entry if you want to play along.]&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=163020" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Pat Helland blogging</title><link>http://blogs.msdn.com/bwill/archive/2004/03/12/88808.aspx</link><pubDate>Sat, 13 Mar 2004 04:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:88808</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/88808.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=88808</wfw:commentRss><description>&lt;DIV class=Section1&gt;
&lt;P&gt;&amp;nbsp;Wow, &lt;A href="http://blogs.msdn.com/pathelland/archive/2004/03/11/88050.aspx"&gt;Pat Helland is blogging&lt;/A&gt; &amp;#8211; that&amp;#8217;s too cool.&lt;/P&gt;
&lt;P&gt;Update: for those who don't know of Pat - he is very knowledgeable about distributed architecture issues, and also has a wonderful way of explaining them.&amp;nbsp; If you ever get a chance to hear him talk, I recommend it.&amp;nbsp; Recently, for example, he coined the great acronym HST:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.developingstorm.com/2004_02_01_archive.php#107642035307250461"&gt;http://www.developingstorm.com/2004_02_01_archive.php#107642035307250461&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=88808" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>how to contact me</title><link>http://blogs.msdn.com/bwill/archive/2003/12/12/42989.aspx</link><pubDate>Fri, 12 Dec 2003 08:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:42989</guid><dc:creator>bwill</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/bwill/comments/42989.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=42989</wfw:commentRss><description>&lt;div class="Section1"&gt; &lt;p&gt;I published this info when I started my &lt;span class="SpellE"&gt;GotDotNet&lt;/span&gt; &lt;span class="SpellE"&gt;blog&lt;/span&gt;; with the move, now is a good time to re-present the info:&lt;/p&gt; &lt;p&gt;Bruce Williams&lt;/p&gt; &lt;p&gt;I am a test developer for Indigo &amp;ndash; current and future Web Services technology at Microsoft.&lt;/p&gt; &lt;p&gt;&lt;span class="GramE"&gt;&lt;span style=''&gt;e-mail&lt;/span&gt;&lt;/span&gt;: &lt;a href="mailto:bwill@microsoft.com"&gt;bwill@microsoft.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;IM: &lt;a href="mailto:domanite@hotmail.com"&gt;domanite@hotmail.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=42989" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/bwill/archive/tags/COM/default.aspx">COM</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Web+Services/default.aspx">Web Services</category></item><item><title>Be verwy verwy quiet - we're hunting bugs!</title><link>http://blogs.msdn.com/bwill/archive/2003/09/26/51216.aspx</link><pubDate>Fri, 26 Sep 2003 09:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51216</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51216.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51216</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            &lt;a href="http://blogs.gotdotnet.com/ericli/"&gt;Eric Lippert&lt;/a&gt; has &lt;a href="http://blogs.gotdotnet.com/ericli/permalink.aspx/2b34d26e-d46b-436f-9c8d-8a9e68bf469e"&gt;a
            great post&lt;/a&gt; describing some of his adventures with security issues in VBScript.&amp;#160;
            I particularly liked this segment: 
        &lt;/p&gt;
        &lt;p&gt;
            “Of course, it could be worse.&amp;#160; There was a bug in early versions of the CLR
            (which I believe was fixed before the first beta shipped, fortunately) where you could
            get an error message something like 
        &lt;/p&gt;
        &lt;p style="MARGIN-LEFT: 0.5in"&gt;
            &lt;span&gt;Path discovery security exception: You are not allowed to determine the name
            of directory 'c:\foo\bar'&lt;/span&gt; 
        &lt;/p&gt;
        &lt;p&gt;
            Super! Thanks for letting me know!”&amp;#160; 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51216" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>old (and long) e-mail ramble about agent technology and other trivia</title><link>http://blogs.msdn.com/bwill/archive/2003/09/26/51212.aspx</link><pubDate>Fri, 26 Sep 2003 08:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51212</guid><dc:creator>bwill</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51212.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51212</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            &lt;a href="http://blogs.gotdotnet.com/bwill/commentview.aspx/55658de5-eb9c-4743-b49c-d6903f9b5dce"&gt;Peter’s
            response to my TiVo post&lt;/a&gt; for some reason reminded me of a rambling e-mail conversation
            I had several months ago; for your amusement I repeat it below.&amp;#160; Incidentally,
            mail threads like this are reason #128 why I like working at Microsoft… 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;From:&lt;/span&gt;&lt;/b&gt; Ken&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Sent:&lt;/span&gt;&lt;/b&gt; Thursday, July 17, 2003 12:12
            PM&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;To:&lt;/span&gt;&lt;/b&gt; Barry; Michael; Wade; Richard; Mark;
            John; Keven; Praveen; Bruce&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Subject:&lt;/span&gt;&lt;/b&gt; How many lines of code can
            fit on the head of a pin?&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Importance:&lt;/span&gt;&lt;/b&gt; Low 
        &lt;/p&gt;
        &lt;p&gt;
            Discussion that arose questioning how many lines of code there are in the world. 
        &lt;/p&gt;
        &lt;p&gt;
            We were discussing Feynman and his thoughts on miniaturization, nano-tech, etc….many
            years ago he put forward a challenge to reduce a page of text to 1/2500&lt;sup&gt;th&lt;/sup&gt; of
            it’s original size. At the time he made this challenge, all of the books in the world
            would be able to be “printed” on a sheet 3 meters on each side (9m^2 area). Note that
            this was not encoding, but actually forming all letters, pictures, etc. The original
            challenge was met (to make this a bit more “real”, think of the 30 volume Encyclopedia
            Britannica…at 1/2500 it would all of the pages would fit on the head of a pin). 
        &lt;/p&gt;
        &lt;p&gt;
            So, to us geeks, the natural question arises, how big of an area to print all the
            code? What if you didn’t print it, but encoded it (I would guess that you’d want at
            least 3 atoms/bit to make retrieving it a bit easier.) Of course you could use single
            atoms to represent more than a bit, one carbon atom might represent ‘0’, gold atom
            for ‘1’, platinum for ‘2’, lead for ‘3’…just right there we’ve reduced the size of
            a two-dimension printout by a factor of four. 
        &lt;/p&gt;
        &lt;p&gt;
            My initial “quick-thought” below. 
        &lt;/p&gt;
        &lt;p&gt;
            K. 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &amp;#160;A co-worker and I were discussing this today: 
        &lt;/p&gt;
        &lt;p&gt;
            ·&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; How many lines of code (LOC) are
            there in the world? 
        &lt;/p&gt;
        &lt;p&gt;
            ·&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; What if you limit it to 'active'
            code? 
        &lt;/p&gt;
        &lt;p&gt;
            ·&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; What's the ratio of total lines
            to active lines? 
        &lt;/p&gt;
        &lt;p&gt;
            ·&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Are there more LOCs than lines in
            books? 
        &lt;/p&gt;
        &lt;p&gt;
            I'd guess somewhere in the realm (within a couple orders of magnitude) of 10 Billion
            LOC (which is based somewhat on how many LOC I think are at Microsoft), with the Total/Active
            ratio somewhere around [2-3]:1. 
        &lt;/p&gt;
        &lt;p&gt;
            Based on an older, but probably still "right ballpark", figure of 30 million books
            in the world (taken from Feynman's &lt;i&gt;&lt;span style="FONT-STYLE: italic"&gt;The Pleasure
            of Finding Things Out&lt;/span&gt;&lt;/i&gt;) and supposing that an average book has 750 pages
            with 50 lines each we'd get 1,125,000,000,000 lines (a bit over a trillion lines).
            As this is several orders of magnitude above my guess, I’d bet that books have the
            lead. 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            PS: Why the strange “To:” line? Figured I’d include the folks that worked on the horrid
            LOC project, some of the stranger thinkers I know, a tried and true researcher (who
            probably also fits in the previous category), the man whose initials are found in
            BILLIONS of executables. No “deep-thought” answers required, but if you’d like to
            chime in let me know if I can include your thoughts on my web page. 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;From:&lt;/span&gt;&lt;/b&gt; Mark&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Sent:&lt;/span&gt;&lt;/b&gt; Thursday, July 17, 2003 2:54 PM&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;To:&lt;/span&gt;&lt;/b&gt; Ken; Barry; Michael; Wade; Richard;
            John; Keven; Praveen; Bruce&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Subject:&lt;/span&gt;&lt;/b&gt; RE: How many lines of code
            can fit on the head of a pin? 
        &lt;/p&gt;
        &lt;p&gt;
            Rambles: 
        &lt;/p&gt;
        &lt;p&gt;
            I think there are way more than 30M books.&amp;#160; Harvard’s library has 11M+.&amp;#160;
            What does LOC (Library of Congress) have in it? 
        &lt;/p&gt;
        &lt;p&gt;
            Feynman was merely talking about taking the existing representation (aka print) and
            shrinking it.&amp;#160; Clearly, printing code and then shrinking it will have the same
            set of issues. 
        &lt;/p&gt;
        &lt;p&gt;
            Certainly, we can &lt;i&gt;&lt;span style="FONT-STYLE: italic"&gt;encode&lt;/span&gt;&lt;/i&gt; the book in
            atoms, but thermal, chemical, and quantum issues make &lt;i&gt;&lt;span style="FONT-STYLE: italic"&gt;reading&lt;/span&gt;&lt;/i&gt; the
            data interesting. &amp;#160;If reading wasn’t interesting, then I could encode it all
            in one bit.&amp;#160; 0 means not the entire set of code. 1 means the entire set of code.&amp;#160;
            If you valued reading, then the issue of specifying the decoding algorithm should
            be brought in.&amp;#160; With the single bit interpretation above, you could end up with
            a mighty complex decoding algorithm. 
        &lt;/p&gt;
        &lt;p&gt;
            Thermal issues: 
        &lt;/p&gt;
        &lt;p&gt;
            Atoms move about unless really close to absolute zero, even in solids.&amp;#160; Trying
            to measure single atoms might be fairly difficult; 
        &lt;/p&gt;
        &lt;p&gt;
            Chemical issues: 
        &lt;/p&gt;
        &lt;p&gt;
            OK, are we talking one-time encoding or an encoding that can be used for archival?&amp;#160;
            The former is easy, but things like oxidation, photochemistry, etc. will impact just
            how dense we can make things. 
        &lt;/p&gt;
        &lt;p&gt;
            Quantum issues: 
        &lt;/p&gt;
        &lt;p&gt;
            Yes, atoms are quantum beasts.&amp;#160; Measuring them in a non-destructive fashion might
            also be difficult. 
        &lt;/p&gt;
        &lt;p&gt;
            Backing out of physics, from the standpoint of encoding, you could simply encode the
            ASCII representation (what do you do about those EBCDIC Cobol and RPG programs?).&amp;#160;
            But code is also notoriously compressible (ala LZW). LZW is nice because it’s dictionary-free;
            the dictionary is the previously input data.&amp;#160; You can do even better with Markov
            modeling of the code, but you’d have to include the size of the Markov tables as well
            in the size. The Markov models could be for individual characters or for lexical items.&amp;#160;
            You could also do something along the lines of encoding the &lt;i&gt;&lt;span style="FONT-STYLE: italic"&gt;parse
            tree&lt;/span&gt;&lt;/i&gt; of the source file (suitably annotated with comments).&amp;#160; Handling
            .h files might be dicey. 
        &lt;/p&gt;
        &lt;p&gt;
            Enough with rambles… 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;From:&lt;/span&gt;&lt;/b&gt; Ken&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Sent:&lt;/span&gt;&lt;/b&gt; Thursday, July 17, 2003 3:59 PM&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;To:&lt;/span&gt;&lt;/b&gt; Mark; Barry; Michael; Wade; Richard;
            John; Keven; Praveen; Bruce&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Subject:&lt;/span&gt;&lt;/b&gt; RE: How many lines of code
            can fit on the head of a pin?&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Importance:&lt;/span&gt;&lt;/b&gt; Low 
        &lt;/p&gt;
        &lt;p&gt;
            11M is the number that Feynman quoted for Lib o’ Congress…I think he gave the speech
            where quoted 30M in the late 60’s, but the book I’m “reading” (listening to) jumps
            around from childhood right up to the late 80’s. During the speech he actually describes
            a method for reading the “small print”…but at the time the technology hadn’t gone
            far enough to print it yet. With the rise of the Internet/PC/easy publishing, I’d
            be surprised if the number was not at least around 60M these days (double the number
            in the 60’s)…while I’d be surprised if it was in the 100M or above, I don’t see even
            that sort of number as inconceivable. 
        &lt;/p&gt;
        &lt;p&gt;
            As we approach the means to really make good on some of Feynman’s “plenty of room
            at the bottom” dreams (Cornell made a 1-atom wide transistor a bit over a year ago),
            I find myself looking at things like this more and more. Due to my sordid past, the
            notion of a coming up with a good (and defensible) estimate for the number of LOC
            in existence strikes me as a fun exercise. The real meat isn’t there, nor is it, other
            than as a “perspective exercise”, in figuring out how big (small) of a piece of something
            you would need to hold it. 
        &lt;/p&gt;
        &lt;p&gt;
            Granting that there will be a host of new difficulties when we start getting components
            that are made at the atomic level, I think that we will live to see the truly tiny
            become reality. As we creep into nano-tech, the processes and research will (I hope
            and believe) begin to build on each other. While we may not be part of the world of
            physics (and chemistry, and bio-chem, and…) that will be building these gadgets straight
            out of the most far-fetched science fiction, it will be up to us to help define at
            least how some of this stuff will benefit the “common man”. What changes do we make
            to the operating system, to Office, etc when a person can have a couple of terabytes
            of storage with them all the time? How soon before it’s not only feasible but practical
            to record everything we read (&lt;a title="http://sis/" href="http://sis/"&gt;http://SIS&lt;/a&gt; is
            close on this front), hear, say, or see…index it all while we sleep, and “auto-fill”
            details the next day when we start writing a report? 
        &lt;/p&gt;
        &lt;p&gt;
            I used to chuckle when I read old Robert A. Heinlein books and he had a character
            load terabytes of information onto a small cube. 
        &lt;/p&gt;
        &lt;p&gt;
            Thermal, Quantum, Chemical…and the list goes on, but I do think the world has the
            set of minds as well as the preparation of the giants of the last century to beat
            these problems (actually, in some ways the thermal might work for us). Anyone want
            to adopt me so I can head back to college…thinking I’d enjoy a decade or two back
            in school. 
        &lt;/p&gt;
        &lt;p&gt;
            K. 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;From:&lt;/span&gt;&lt;/b&gt; Bruce&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Sent:&lt;/span&gt;&lt;/b&gt; Thursday, July 17, 2003 6:55 PM&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;To:&lt;/span&gt;&lt;/b&gt; Ken; Mark; Barry; Michael; Wade;
            Richard; John; Keven; Praveen&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Subject:&lt;/span&gt;&lt;/b&gt; RE: How many lines of code
            can fit on the head of a pin? 
        &lt;/p&gt;
        &lt;p&gt;
            We are moving to a world where there is more information than a single person can
            process.&amp;#160; People will have to become more and more selective in the data they
            choose to read.&amp;#160; (or see, or hear, or taste…)&amp;#160; As a computer person, I view
            this as a problem to be solved, and my first instinct is to hypothesize a solution
            involving a software agent that can selectively choose and display only those facts
            and media that fit some criteria we give it. 
        &lt;/p&gt;
        &lt;p&gt;
            However, I see this as bringing us to a more devided and insular world.&amp;#160; Democrats
            will have agents that spin things they way they want to see them; Republicans likewise.&amp;#160;
            I’m sure the sci-fi fans will continue to form their own strange sub-culture.&amp;#160;
            Ones entire world view will be shaped by what one chooses to experience, and when
            there is a surfeit of information that does appeal, folks will be less and less inclined
            to view that which does not. 
        &lt;/p&gt;
        &lt;p&gt;
            In some sense, our choice of agent will decide who we are, and who we become.&amp;#160;
            (At least to the extent that one believes in nurture over nature.)&amp;#160; Could one
            then change oneself by altering the agent programming?&amp;#160; In any kind of serious,
            personality-altering way?&amp;#160; What happens if some hacker gets into your agent,
            or the men in the black helicopters do? 
        &lt;/p&gt;
        &lt;p&gt;
            Beware – here there be dragons 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;From:&lt;/span&gt;&lt;/b&gt; Richard&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Sent:&lt;/span&gt;&lt;/b&gt; Friday, July 18, 2003 2:36 PM&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;To:&lt;/span&gt;&lt;/b&gt; Bruce; Ken; Mark; Barry; Michael;
            Wade; John; Keven; Praveen&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Subject:&lt;/span&gt;&lt;/b&gt; RE: How many lines of code
            can fit on the head of a pin? 
        &lt;/p&gt;
        &lt;p&gt;
            Everyone reading this thread is the product of a lifetime of agents choosing and biasing
            what media we consume. 
        &lt;/p&gt;
        &lt;p&gt;
            It starts with our parents and families, and churches, friends, Television, the so
            called “mass-media”, then later teachers in school, employers, and government, etc. 
        &lt;/p&gt;
        &lt;p&gt;
            These agents also already have their hackers, which can be though of as agents themselves.&amp;#160;
            These are the same form as the agents that affect us.&amp;#160; Though they may be different
            TV shows, different media, different teachers, and different employers. 
        &lt;/p&gt;
        &lt;p&gt;
            Every time you hear of censorship, political correctness, and boycott are examples
            of agents attempting to restrict the exposure of content. 
        &lt;/p&gt;
        &lt;p&gt;
            Every time you hear of praise and awards agents are promoting content. 
        &lt;/p&gt;
        &lt;p&gt;
            Other things like reviews and bias reporting can swing either way. 
        &lt;/p&gt;
        &lt;p&gt;
            But it is all affecting the perceived worth of consuming the target content and ideas. 
        &lt;/p&gt;
        &lt;p&gt;
            Its all a tight feedback system.&amp;#160; It would seem that the truest “individuals”
            would live in the wilderness with no outside influence.&amp;#160; But if we met someone
            like that we’d likely not enjoy their company nor would they enjoy ours.&amp;#160; We
            enjoy being with people more when we can communication and have thoughts and topics
            to share.&amp;#160; This is one of the feedbacks. 
        &lt;/p&gt;
        &lt;p&gt;
            We choose our agents when we choose our books, schools, subscriptions, employer, clubs,
            homepage, and program our Tivo. 
        &lt;/p&gt;
        &lt;p&gt;
            No doubt this does affect who we become. 
        &lt;/p&gt;
        &lt;p&gt;
            I wonder if agent selection will ever become as sophisticated as allowing me to choose
            what personal traits I’d like to make stronger. 
        &lt;/p&gt;
        &lt;p&gt;
            You turn up your agent’s sensitivity dial and Tivo starts recording “Little House
            and the Prairie” and “Touched by an Angel” 
        &lt;/p&gt;
        &lt;p&gt;
            Ramble on… 
        &lt;/p&gt;
        &lt;div style="TEXT-ALIGN: center" align="center"&gt;
            &lt;hr align="center" width="100%" size="2" /&gt;
        &lt;/div&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;From:&lt;/span&gt;&lt;/b&gt; John&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Sent:&lt;/span&gt;&lt;/b&gt; Friday, July 18, 2003 2:36 PM&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;To:&lt;/span&gt;&lt;/b&gt; Bruce; Ken; Mark; Barry; Michael;
            Wade; Richard; Keven; Praveen&lt;br /&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Subject:&lt;/span&gt;&lt;/b&gt; RE: How many lines of code
            can fit on the head of a pin? 
        &lt;/p&gt;
        &lt;p&gt;
            &amp;#160;(This thread is getting pretty far a field.) 
        &lt;/p&gt;
        &lt;p&gt;
            As Richard points out knowledge is already being filtered by "agents" (many of which
            are not user configurable.) So at the end of the day we have to examine the trust
            relationship between ourselves and those agents. 
        &lt;/p&gt;
        &lt;p&gt;
            Some of the things I have noticed: 
        &lt;/p&gt;
        &lt;p&gt;
            - The less interested you are in a topic, the more you are willing to trust the agent.
            The more you are interested (and experienced) in a topic the more scrutiny you will
            give to the agent. 
        &lt;/p&gt;
        &lt;p&gt;
            - Once an agent has seriously disappointed you never trust the agent again. 
        &lt;/p&gt;
        &lt;p&gt;
            - The more you are exposed to agents as a class&amp;#160;the less you trust them. 
        &lt;/p&gt;
        &lt;p&gt;
            Think about really, really good internet trolls: they contain enough fact, wit, and
            divisiveness to cause chaos amongst the most well ordered communities. What about
            trolls that build a trust relationship first? 
        &lt;/p&gt;
        &lt;p&gt;
            Think about what&amp;#160;makes a trust relationship.&amp;#160;Generally you have seen some
            objective&amp;#160;demonstration that convinces you, and you are willing to believe the
            demonstrator on related subjects without objective proof. Perhaps the objective demonstration
            is abstracted through a certification authority, like a drivers license: you&amp;#160;didn't
            see me take the test, but I can show you&amp;#160;my license. Think about all of the points
            of failure in this trust system. Having or not having a drivers license doesn't prove
            or disprove ability to drive. 
        &lt;/p&gt;
        &lt;p&gt;
            While you could certainly manipulate people through media collection&amp;#160;agents,
            There is still (and always will be) informal agents with a disproportionate amount
            of trust. If your grandmother told you something you would probably believe her, unless
            you had objective proof, or special knowledge. Grandma is an informal agent that gets
            a huge amount of trust, and it is very difficult to erode that trust (unless she drinks
            or something) 
        &lt;/p&gt;
        &lt;p&gt;
            The concept of tweaking your agents for "self-improvement" is interesting&amp;#160;(assuming
            a direct correlation between watching lots of Lifetime TV and being more sympathetic)
            although you would also have to tweak your informal agents as well. Basically you
            watch all of the Oprah in the world but until you quit the Hell's Angels I don't think
            you are going to start crying at movies. 
        &lt;/p&gt;
        &lt;p&gt;
            - John 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51212" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Fault injection tools from Microsoft</title><link>http://blogs.msdn.com/bwill/archive/2003/09/24/51210.aspx</link><pubDate>Wed, 24 Sep 2003 18:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51210</guid><dc:creator>bwill</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51210.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51210</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            In a response to &lt;a href="http://blogs.gotdotnet.com/bwill/commentview.aspx/2db3e3a7-fa76-401a-964b-9f2639d5848a"&gt;my
            recent post on fault injection&lt;/a&gt;, Mark asks if I know of any publicly-available
            fault-injection frameworks.&amp;#160; Yes!&amp;#160; In fact, much of the fault-injection
            work done at Microsoft is built on top of work done by Microsoft Research, and you
            can also take advantage of their work.&amp;#160; In particular, look at the &lt;a href="http://research.microsoft.com/sn/detours/"&gt;Detours&lt;/a&gt; tool
            for injecting code into an existing binary.&amp;#160; 
        &lt;/p&gt;
        &lt;p&gt;
            Unfortunately, Detours only does native code, not managed code.&amp;#160; We do have managed
            code injection tools internally, but I don’t see them on the research site, so I guess
            they are ‘top secret’.&amp;#160; You are in luck, however; I’ve also heard of a well-known
            fault-injection tool called &lt;a href="http://www.sisecure.com/holodeck/"&gt;Holodeck&lt;/a&gt;,
            that does do managed code.&amp;#160; This also has the advantage of providing a nice user
            interface and support tools – a point-n-click operation.&amp;#160; Detours is a bit more
            low-level, and requires some coding and work on your part.&amp;#160; Unfortunately Holodeck
            does appear to be pretty pricy - $5000 for a single license.&amp;#160; Let’s keep looking… 
        &lt;/p&gt;
        &lt;p&gt;
            A &lt;a href="http://www.google.com/search?hl=en&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;q=fault+injection"&gt;google
            search on fault injection&lt;/a&gt; finds a bazillion hits – take a look there and see if
            you can find a tool that meets your needs. 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51210" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Code Name: "Avalon"</title><link>http://blogs.msdn.com/bwill/archive/2003/09/23/51178.aspx</link><pubDate>Tue, 23 Sep 2003 23:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51178</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51178.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51178</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            I noticed &lt;a href="http://wesnerm.blogs.com/net_undocumented/2003/09/learn_about_ava.html"&gt;this
            link&lt;/a&gt; to Wesner Moise’s comments on Microsoft’s “Avalon” technology, to be debuted
            at PDC.&amp;#160; I’m certainly no Avalon expert, but I’ve been to their internal web
            site, and saw a demo once.&amp;#160; This is killer stuff.&amp;#160; Not wanting to be fired,
            I probably shouldn’t discuss it too much, but I will say that it’s a large project,
            and it covers a lot of different areas of functionality.&amp;#160; Whenever we have something
            that big, and new – we really, really want to get lots of good feedback, so we can
            make it useful (or, dare I say it, indispensable) by the time we actually ship it.&amp;#160;
            And, its really, really cool. 
        &lt;/p&gt;
        &lt;p&gt;
            So if you have the opportunity, go see the Avalon presentations, and let us know what
            you think. 
        &lt;/p&gt;
        &lt;p&gt;
            (After you go to the Indigo presentations, of course!&amp;#160; &amp;lt;grin&amp;gt;)&amp;#160; 
        &lt;/p&gt;
        &lt;p&gt;
            (Link found at &lt;a href="http://www.simplegeek.com/"&gt;SimpleGeek&lt;/a&gt;.) 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51178" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>For a good time, call 1-800-FAULT-INJECTION-TESTING</title><link>http://blogs.msdn.com/bwill/archive/2003/09/23/51169.aspx</link><pubDate>Tue, 23 Sep 2003 08:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51169</guid><dc:creator>bwill</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51169.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51169</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            We have occasional debates here at Microsoft on the value of ‘white-box’ testing.&amp;#160;
            (For the sake of this discussion, ‘white-box’ testing means testing that takes advantage
            of internal product knowledge, while ‘black-box’ testing relies solely on the published
            API and behavior.) 
        &lt;/p&gt;
        &lt;p&gt;
            On the one hand, if the person who developed code writes the test for it, or if the
            tester was intimately involved in the design of the feature, then the test design
            is often blinded by the dev design.&amp;#160; For example, if the development of the feature
            goes to great lengths to ensure that the threading and locking behavior is correct,
            then the tester may spend a majority of their test effort there.&amp;#160; This is a problem
            if, for example, there are major flaws in the way the feature interacts with its config
            files.&amp;#160; You don’t want a certain focus in product development dictating a similar
            focus in test development. 
        &lt;/p&gt;
        &lt;p&gt;
            On the other hand, there are some kinds of bugs that can *&lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;only&lt;/span&gt;&lt;/b&gt;*
            be found with white-box testing.&amp;#160; If code has an off-by-one error that only kicks
            in at the exact buffer size that switches between the fast-path algorithm and the
            slow-path algorithm, there is every possibility that even well-designed equivalence
            classes against the published API won’t find the problem.&amp;#160; A quick peek at the
            code, however, can tell you exactly what buffer size to use, if you want to give the
            product a conniption fit. 
        &lt;/p&gt;
        &lt;p&gt;
            However, there is one kind of white-box testing that is pretty much universally seen
            as useful – fault injection testing.&amp;#160; This is where you inject code at compile-
            or run-time to force faults that would not normally occur.&amp;#160; These are great!&amp;#160;
            Once you have a fault-injection test framework set up, a fault scenario that might
            ordinarily require an IBM mainframe database and a female goat can be duplicated in
            a few couple minutes, with a few simple lines of code.&amp;#160; If you are hard-core
            about testing error handling in your program, you owe it to yourself to investigate
            fault-injection schemes.&amp;#160; It is similarly good for increasing code-coverage numbers,
            if you use that metric. 
        &lt;/p&gt;
        &lt;p&gt;
            Now, there are a lot of different ways you can do fault injection.&amp;#160; Recently
            I’ve seen some work done injecting faults at the protocol level during SOAP message
            transmission.&amp;#160; It is interesting to send SOAP messages from one place to another,
            and have a little bitty guy who sits in between and drops, alters, or otherwise interferes
            with the messages flowing by.&amp;#160; (Would that be an example of MaXMLwell’s Demon?)&amp;#160;
            Going further back in the past, I’ve seen a system that systematically generated every
            possible memory allocation fault while running our test suite. 
        &lt;/p&gt;
        &lt;p&gt;
            Now, that last example brings up the ‘dark side’ of fault injection testing.&amp;#160;
            You see, there were a couple problems with that memory allocation testing.&amp;#160; Here
            is how it worked: 
        &lt;/p&gt;
        &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;![if !supportLists]&gt;
            &lt;span style="mso-list: Ignore"&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt; Pick
            a single test variation from your test suite, and run it.&amp;#160; Keep a count of the
            number of memory allocations executed. 
        &lt;/p&gt;
        &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;![if !supportLists]&gt;
            &lt;span style="mso-list: Ignore"&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt; Run
            the variation again.&amp;#160; Fail the first memory allocation, and all subsequent ones. 
        &lt;/p&gt;
        &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;![if !supportLists]&gt;
            &lt;span style="mso-list: Ignore"&gt;3.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt; Run
            the variation again.&amp;#160; Fail the second memory allocation, and all subsequent ones. 
        &lt;/p&gt;
        &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;![if !supportLists]&gt;
            &lt;span style="mso-list: Ignore"&gt;4.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt; Keep
            doing this until you’ve gone through the entire set of memory allocations that a successful
            variation run does. 
        &lt;/p&gt;
        &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;![if !supportLists]&gt;
            &lt;span style="mso-list: Ignore"&gt;5.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt; Go
            to the next test variation. 
        &lt;/p&gt;
        &lt;p&gt;
            Now, the most obvious problem is that this test takes *&lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;forever&lt;/span&gt;&lt;/b&gt;*
            to run.&amp;#160; It literally took weeks to run through a simple set of COM tests.&amp;#160;
            (Oops, did I accidentally reveal the product in question?)&amp;#160; You really have to
            look at the bugs you find with this method, and ask yourself “is finding these bugs
            worth the cost of the testing?”&amp;#160; There might be other testing you could be doing
            that would find better bugs, or find bugs more efficiently.&amp;#160; So if you are doing
            ‘high-volume’ fault injection, you really need to balance the cost of the testing
            against its value to you. 
        &lt;/p&gt;
        &lt;p&gt;
            Another problem, really more of a nit, is that while this method seems comprehensive,
            there are many cases it doesn’t hit.&amp;#160; What if the memory allocations are only
            failing intermittently?&amp;#160; If something fails only on the pattern “allocation failed,
            allocation succeeded, allocation succeeded again, allocation now fails again”, then
            the test above won’t find it.&amp;#160; I don’t have an answer to this one, except to
            give the sad truth that you can always think of more things to test, than you could
            possibly actually write (or run) tests for. 
        &lt;/p&gt;
        &lt;p&gt;
            Another, much more significant problem, is this: how do you know if it failed?&amp;#160;
            We took the easy way out, and said “if it AV’s, blue-screens, or otherwise crashes
            – it failed.”&amp;#160; So if it appears to succeed; or if it returns a wrong error code;
            or if the behavior of the program is just wrong, in a non-crashing way – we would
            not detect it.&amp;#160; Why did we do this?&amp;#160; Well, remember our discussion of costs
            and tradeoffs.&amp;#160; I’ll give you a million lines of test code, developed over ten
            years by 40 different people.&amp;#160; Are you gonna track through that and fix it so
            it reports errors correctly *&lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;for every possible
            memory allocation failure path&lt;/span&gt;&lt;/b&gt;*?&amp;#160; Note that I’m not claiming that
            level of detailed testing isn’t useful – it just wasn’t feasible in that case, on
            the scale of the entire test suite.&amp;#160; Picking a set of core functionality and
            writing some exceptionally robust test code specifically for this type of fault injection
            scenario might be a useful endeavor.&amp;#160; We’ll see.&amp;#160; &amp;lt;grin&amp;gt; 
        &lt;/p&gt;
        &lt;p&gt;
            For those concerned about Microsoft code quality, note that these days we do also
            have some static analysis tools that will churn through a reasonable subset of possible
            call graphs in our programs, and report possible problems in error paths.&amp;#160; It
            even files bugs automatically – the Windows folks love that, I’m sure! 
        &lt;/p&gt;
        &lt;p&gt;
            Some of my readers may be familiar with Microsoft’s stress-testing efforts, where
            we often hammer a machine with tests to the point of program failure.&amp;#160; While
            stress testing is useful, don’t be fooled into thinking that it is an adequate replacement
            for fault-injection testing.&amp;#160; The biggest problem with stress testing is the
            “early exit” problem.&amp;#160; If you are crushing a machine to the point that memory
            allocations are failing, then most programs are just going to die immediately when
            you run them.&amp;#160; You are only going to end up testing the first 10% of the program,
            which presumably is not&amp;#160; the intent.&amp;#160; Another issue is that stress test
            failures tend to be non-deterministic; you don’t necessarily know when (or if) a particular
            failure will occur, and it can be very difficult to determine the actions that led
            up to the failure.&amp;#160; This makes debugging a stress failure much more, well, stressful;
            than debugging an equivalent failure in a fault injection test. 
        &lt;/p&gt;
        &lt;p&gt;
            Lastly, note that (as with so many of the topics I write about), there is much, much,
            more to it than I have written.&amp;#160; For example, there are many different kinds
            of faults that you can inject.&amp;#160; We talked about memory faults and protocol faults;
            but there are also file access faults, security faults (a biggie!), system object
            access faults (events, mutexes, etc), registry faults – you can even feel free to
            inject faults into your own internal product code – what happens when your lower-level
            stuff throws an exception to the higher-level stuff? 
        &lt;/p&gt;
        &lt;p&gt;
            It is really not that hard to get started with, however; and I highly recommend it. 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51169" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Test tracing - it is not optional!</title><link>http://blogs.msdn.com/bwill/archive/2003/09/20/51165.aspx</link><pubDate>Sun, 21 Sep 2003 02:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51165</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51165.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51165</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            I’d like to talk about one of the first lessons I learned as a tester at Microsoft: 
        &lt;/p&gt;
        &lt;p&gt;
            &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Anticipate failure investigations, and log everything.&lt;/span&gt;&lt;/b&gt; 
        &lt;/p&gt;
        &lt;p&gt;
            Let me tell you a fairly rambling tale of my early days at Microsoft: 
        &lt;/p&gt;
        &lt;p&gt;
            We’d just shipped Windows NT 4.0 (and IIS 1.0).&amp;#160; I’d recently moved from a contract
            position in the Windows build lab; to a full-time position (aka FTE, aka ‘blue-badge’)
            in the COM test team. 
        &lt;/p&gt;
        &lt;p&gt;
            In those days, the COM team was just beginning its transition from a consumer, drag-n-drop,
            linking-and-embedding technology; to a distributed computing, enterprise-application
            sort of focus.&amp;#160; This was all before COM+; DCOM was the new thing.&amp;#160; Given
            that history, it is perhaps not surprising that we had a bunch of old tests covering
            a variety of those aforementioned consumer-oriented applications of COM.&amp;#160; Linking
            and embedding, COM common dialogs, and more; these were tests that had been lovingly
            handed down from tester to tester over the years. 
        &lt;/p&gt;
        &lt;p&gt;
            You’ll recall I mentioned a transition.&amp;#160; Now, those who have been in the industry
            for a while know what it means when the product changes focus like that.&amp;#160; Resources
            shift.&amp;#160; Things happen, like taking these “upper layer” tests from the five experienced
            testers who owned them, and giving them to a new, green tester fresh from the build
            lab.&amp;#160; Sink or swim, as they say.&amp;#160; Let me tell you, taking over maintenance
            of a large test suite (written by a number of different people, in a number of different
            styles &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;*ping*&lt;/span&gt;&lt;/b&gt;) is a great way to learn
            some valuable lessons about test code design. 
        &lt;/p&gt;
        &lt;p&gt;
            For example, there was a test for the OLE common dialogs, used for inserting OLE objects
            and other operations.&amp;#160; This test basically ran a large script (&lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;*ping*&lt;/span&gt;&lt;/b&gt;)
            that iterated through a bunch of scenarios exercising these dialogs.&amp;#160; In total
            the scripts performed thousands of operations – click that button, move that window,
            select this other menu option, etc.&amp;#160; Now, any time you have one program executing
            a script like that, you basically have one program running another program.&amp;#160;
            This means it is particularly difficult to figure out, from a debugger, what the dang
            thing is doing.&amp;#160; When you break in, the stack just shows you what the script
            interpreter is doing, and it requires some investigation of the program variables
            to figure out where you are in the script being interpreted. 
        &lt;/p&gt;
        &lt;p&gt;
            Now, the test had a log file output, but unfortunately when I acquired the test this
            output was fairly minimal.&amp;#160; Let me tell you, debugging a failure in this test
            was an adventure!&amp;#160; It was time-consuming, and technically challenging.&amp;#160;
            (Technically educational, too, I will say.)&amp;#160; So I went into the interpreter and
            did something very simple – I just logged each unique operation as it executed: 
        &lt;/p&gt;
        &lt;p&gt;
            LOG TRACE: Menu Select ‘File Open’ 
        &lt;/p&gt;
        &lt;p&gt;
            The logs got a lot bigger, and the test ran marginally more slowly (those UI tests
            tended to be dog slow, anyway), but now when something failed, I could look at the
            log and see the precise script actions that led up to the failure. 
        &lt;/p&gt;
        &lt;p&gt;
            So what I learned is that it is really, really important in a test to log *&lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;everything&lt;/span&gt;&lt;/b&gt;*.&amp;#160;
            Log your inputs; log your outputs; log all the program variables that seem even halfway
            interesting.&amp;#160; It will make your life so much easier.&amp;#160; It will make the life
            of the next test maintainer so much better.&amp;#160; If it causes a severe performance
            hit, *&lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;then&lt;/span&gt;&lt;/b&gt;* you can perhaps think about
            placing some of the trace output under a switch, that you can enable or disable as
            needed for debugging purposes.&amp;#160; Even there, make sure you can turn on the trace
            output without having to recompile the program – you’ll thank yourself later. 
        &lt;/p&gt;
        &lt;p&gt;
            On a side note, in the last couple years I’ve noticed a trend in Microsoft product
            design to add this kind of detailed tracing to our products.&amp;#160; Debug level tracing,
            in the production code – something you can enable or disable with a program or registry
            entry.&amp;#160; I know that DTC has done this for a while, and I believe it has been
            standard practice in the mainframe world for decades.&amp;#160; Of course, for performance
            reasons the tracing is typically turned off in normal execution – but it is there,
            and it doesn’t require a re-compile to enable. 
        &lt;/p&gt;
        &lt;p&gt;
            PSS loves this – it really helps them track down and solve customer problems. 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51165" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Pre-PDC checklist</title><link>http://blogs.msdn.com/bwill/archive/2003/09/20/51159.aspx</link><pubDate>Sat, 20 Sep 2003 23:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51159</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51159.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51159</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            I’ve never been to an industry conference (yet; I keep trying to convince my management
            to send me…), but to my uneducated eye, &lt;a href="http://www.adamc.com/EntryView.aspx?63"&gt;this
            pre-flight PDC checklist&lt;/a&gt; by Adam Cartwright looks eminently useful…&amp;#160; 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51159" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>more Scoble stuff - there are many parts, but only one Microsoft</title><link>http://blogs.msdn.com/bwill/archive/2003/09/20/51158.aspx</link><pubDate>Sat, 20 Sep 2003 23:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51158</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51158.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51158</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            Again, while reading &lt;a href="http://radio.weblogs.com/0001011/2003/09/20.html#a4701"&gt;this
            same Scoble post&lt;/a&gt;, it got me thinking about my role at Microsoft.&amp;#160; When I
            tell people what I do at Microsoft, I say "I do software testing.&amp;#160; If you find
            a bug in a Microsoft product, it is my fault." 
        &lt;/p&gt;
        &lt;p&gt;
            Of course, that is a vast oversimplification.&amp;#160; I work on one part of one product,
            that isn't even released yet.&amp;#160; I could easily disclaim responsibility for the
            particular problems people are having.&amp;#160; But that’s not the kind of person I want
            to be.&amp;#160; That’s not the kind of company I want to be part of.&amp;#160; And if I don’t
            take the responsibility, who will? 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51158" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Scoble talks about "us" at Microsoft</title><link>http://blogs.msdn.com/bwill/archive/2003/09/20/51157.aspx</link><pubDate>Sat, 20 Sep 2003 23:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51157</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51157.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51157</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            I was reading &lt;a href="http://radio.weblogs.com/0001011/2003/09/20.html#a4701"&gt;this
            recent post on Scoble’s blog&lt;/a&gt;, where he talks about how he refers to “we” and “us”
            when talking about Microsoft.&amp;#160; A friend of mine told me once that they found
            it unusual that I say "we" and "us" when referring to stuff that Microsoft does. Apparently
            that isn't the habit where they work. They tell me that its cool that I like my work
            enough to talk about it that way. I think its cool too.&amp;#160; 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51157" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>I'm going to miss the company meeting!</title><link>http://blogs.msdn.com/bwill/archive/2003/09/20/51156.aspx</link><pubDate>Sat, 20 Sep 2003 08:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:51156</guid><dc:creator>bwill</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/bwill/comments/51156.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bwill/commentrss.aspx?PostID=51156</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;div class="Section1"&gt;
        &lt;p&gt;
            Damn!&amp;#160; I just found out that the Microsoft Company Meeting, a yearly event, is
            on October 30&lt;sup&gt;th&lt;/sup&gt;, and I will be out of town!&amp;#160; Its hard to describe
            these meetings; but let me try. 
        &lt;/p&gt;
        &lt;p&gt;
            You walk into SafeCo field, Seattle’s new baseball stadium, and look around, admiring
            the sheer size of the place.&amp;#160; The sliding retractable roof, with its shell-like
            design and bright red struts and wheels is particularly eye-catching.&amp;#160; You probably
            came together with some other folks from your team; there is a good chance you are
            all wearing the same shirt.&amp;#160; On your way in, you pass through some security –
            check that blue badge, please!&amp;#160; And open your bag – no cameras at this event;
            top-secret demos coming up.&amp;#160; Grab a drink – a water or soda – on your way to
            your seat; you’ll need it.&amp;#160; There are some snacks too, although they tend to
            be a bit on the healthy side for a true junk-food junky like myself. 
        &lt;/p&gt;
        &lt;p&gt;
            You make your way to your seat – its assigned seating, and your whole team is sitting
            together.&amp;#160; You chat with your teammates while waiting for the show to start –
            or perhaps watch interesting historical facts about Microsoft flash by on the enormous
            video screens that flank the temporary stage plopped on top of the pitcher’s mound
            like an encroaching amoeba.&amp;#160; At some point, the inevitable happens, and those
            on the upper decks begin to make paper airplanes out of various maps, instructions,
            and other hand-outs.&amp;#160; The airplanes float down, in curves and lines, bouncing
            against the occasional wall or head.&amp;#160; Nobody says it, but the challenge is clear;
            to construct an airplane so honest and true that it flies long, and flies straight,
            and manages to actually land on the stage.&amp;#160; Oh!&amp;#160; That one was close; it
            hit one of the large video screens, and dropped on top of a smaller (60”?) TV close
            to the stage. 
        &lt;/p&gt;
        &lt;p&gt;
            The PA system crackles, and soon the show will start – the minutes tick by, and the
            crowd quiets.&amp;#160; Then it begins.&amp;#160; The first Microsoft executive steps up on
            stage, and begins to talk.&amp;#160; It’s the Chief Operating Officer, and he’s giving
            us a status update on the plan.&amp;#160; Here is how the divisions are doing.&amp;#160; Here
            are the financials.&amp;#160; Some slides, and charts.&amp;#160; A little bit of inspirational
            chat – we think we can grow the server business by XX percent over the next three
            years!&amp;#160; We are investing heavily in mobile technologies!&amp;#160; A thunderous cheer
            erupts from the WinCE contingent, and confetti blizzards down onto those fortunate
            enough to sit below.&amp;#160; For the most part, though, the talk is fairly factual and
            dry. 
        &lt;/p&gt;
        &lt;p&gt;
            Then the parade of Vice Presidents begins – Jim Allchin, Jeff Raikes, Paul Maritz,
            and more.&amp;#160; They discuss the challenges and successes of the various parts of
            the company.&amp;#160; Some plans are discussed, although this tends to be a bit vague;
            perhaps they don’t think they can really keep every nosy reporter out of the stadium,
            if that reporter had a serious mind to sneak in.&amp;#160; They do show demos, though;
            really, really cool demos.&amp;#160; You lean forward in your seat – its one of the highlights
            of the show.&amp;#160; In past years, in the late 90’s, they would bring in comedians
            or other acts to liven things up; but recently it has been a bit more business-like.&amp;#160;
            Still a show, though.&amp;#160; And you really like the demos. 
        &lt;/p&gt;
        &lt;p&gt;
            Intermission comes; time to stand in line.&amp;#160; Get a snack, go to the bathroom –
            grab another couple bottles of water.&amp;#160; Some silly baseball cheering game is on
            the video monitor; see which side of the stadium can make their boat go faster.&amp;#160;
            You don’t really care, but it’s a good opportunity to stretch, talk with teammates,
            and return your wife’s call on the cell phone.&amp;#160; More airplanes float down from
            the upper deck, but somehow they seem sloppier, and none comes close to the stage. 
        &lt;/p&gt;
        &lt;p&gt;
            Intermission ends, and to a dramatic fanfare, Bill Gates steps on stage.&amp;#160; Deep
            analysis of technological trends follow.&amp;#160; A big picture emerges.&amp;#160; Some of
            the stranger technological bets that Microsoft has made, start to make sense.&amp;#160;
            A vision arises, of computing and the future.&amp;#160; You wonder if he writes his own
            speeches.&amp;#160; He finishes, to great applause, and steps down. 
        &lt;/p&gt;
        &lt;p&gt;
            Then flashing lights begin, the music cranks up a notch, and Steve Ballmer jaunts
            on-stage.&amp;#160; The man has unnatural levels of energy and enthusiasm.&amp;#160; He jumps
            around the stage, almost dancing or skipping.&amp;#160; He roams the seats and takes high-fives.&amp;#160;
            He waves his hands, encouraging and exhorting applause.&amp;#160; He also talks directly,
            and seems to address some of the deep concerns of the employees directly: What kind
            of company are we?&amp;#160; What kind of people are we?&amp;#160; What do we want to accomplish?&amp;#160;
            It is inspirational; sometimes deep, sometimes silly – but always passionate, always
            heart-felt.&amp;#160; You want to believe this man, and you want to follow him.&amp;#160;
            It is really, really cool. 
        &lt;/p&gt;
        &lt;p&gt;
            When Ballmer leaves, you know you’ve been treated to a good show.&amp;#160; Everyone stands
            up, and begins to file out of the stadium.&amp;#160; Many people go directly to the busses,
            and head back to campus.&amp;#160; You, however, go across the street to the convention
            center.&amp;#160; More food, there, and booths set up by many of the teams from inside
            the company.&amp;#160; They are showing off their latest and greatest stuff – more nifty
            demos, and lots of trinkets to pick up.&amp;#160; Pens, pads, software.&amp;#160; Lucky you
            brought a bag with you.&amp;#160; In the center, an Xbox tournament is underway, giant
            video screens blazing the action out.&amp;#160; Office is on display, mobile computing
            too.&amp;#160; Research has a corner – they always have fascinating stuff.&amp;#160; Soon
            the crowd grows wearisome, however; after a last run through the food line, you get
            on the bus and head home.&amp;#160; Another year at Microsoft.&amp;#160; Another company meeting. 
        &lt;/p&gt;
        &lt;p&gt;
            Time flies when you are having fun – how long until the next company meeting? 
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=51156" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bwill/archive/tags/Microsoft/default.aspx">Microsoft</category></item></channel></rss>