<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dan Swearingen&#039;s Tech Stuff Blog &#187; Campfire Stories</title>
	<atom:link href="http://www.polyweb.com/blog/index.php/archives/category/campfire-stories/feed" rel="self" type="application/rss+xml" />
	<link>http://www.polyweb.com/blog</link>
	<description>Technical things I think about</description>
	<lastBuildDate>Mon, 22 Feb 2010 03:07:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>End of an Era</title>
		<link>http://www.polyweb.com/blog/index.php/archives/161</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/161#comments</comments>
		<pubDate>Tue, 16 Feb 2010 00:30:04 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=161</guid>
		<description><![CDATA[In the 1970&#8242;s I remember the first cable box sitting on top of our TV in San Francisco and I&#8217;ve basically had cable almost everywhere I&#8217;ve lived since then &#8212; call it 35 years of cable TV. Almost four years ago I asked Do we watch TV anymore? Analyzing our TV viewing at that time [...]]]></description>
			<content:encoded><![CDATA[<p>In the 1970&#8242;s I remember the first cable box sitting on top of our TV in San Francisco and I&#8217;ve basically had cable almost everywhere I&#8217;ve lived since then &#8212; call it 35 years of cable TV. Almost four years ago I asked <a title="Permanent Link: Do we watch TV anymore?" rel="bookmark" href="http://www.polyweb.com/blog/index.php/archives/13">Do we watch TV anymore?</a> Analyzing our TV viewing at that time I found that of the 100 channels we only really watched four (4) channels and occasionally watched another nine for a whopping 13 channels needed.</p>
<p>We have (had) over 500 channels on our current service and over 100 HD channels and you know what: we never watch anything beyond 30 minutes of local news each morning. We&#8217;re paying over $170 a month and there&#8217;s nothing we bother watching.</p>
<p>We have a 46&#8243; screen in the living-room that has never seen a cable connection. Kids are way ahead of old folks like me. Hulu, Boxee, YouTube, Blu Ray, DVD: these are how we watch things now. When I asked our son if it was ok to get rid of cable TV he actually asked &#8220;what&#8217;s that?&#8221;</p>
<p>That killed my last doubt: it&#8217;s a waste of money, we&#8217;re pulling it all out.</p>
<p><a title="End of an era by dan_swearingen, on Flickr" href="http://www.flickr.com/photos/dan_swearingen/4361034170/"><img src="http://farm5.static.flickr.com/4043/4361034170_dd886a38fd.jpg" alt="End of an era" width="400" height="300" /></a></p>
<p>The money saved in 10 months by getting rid of cable TV will buy two really nice media PCs so we&#8217;re keeping our cable-provider based internet connectivity. We&#8217;ve had 24/7 high-speed Internet in our house since 1995.</p>
<p>The land-line phone is probably next. Six months of saved phone bills will pay for a nice signal amplifier so our mobile phones will work great indoors.</p>
<p>Can you hear me now?</p>
<p>Update 2/21/2010 &#8212; I&#8217;m weak. I ended up cutting down to $16.95 &#8220;basic cable.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/161/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reduced to reblogging: a short Internet history</title>
		<link>http://www.polyweb.com/blog/index.php/archives/138</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/138#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:43:45 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=138</guid>
		<description><![CDATA[I loved this post by Cameron Chapman at the Six Revisions blog. I&#8217;m reblogging &#8217;cause I&#8217;m busy but I&#8217;ll have my media PC build and description up soon.]]></description>
			<content:encoded><![CDATA[<p>I loved <a href="http://sixrevisions.com/resources/the-history-of-the-internet-in-a-nutshell/" target="_blank">this post by Cameron Chapman</a> at the Six Revisions blog.</p>
<div class="wp-caption alignnone" style="width: 510px"><a href="http://sixrevisions.com/resources/the-history-of-the-internet-in-a-nutshell/"><img class=" " title="ARPANET" src="http://upload.wikimedia.org/wikipedia/en/6/6e/Arpnet-map-march-1977.png" alt="ARPANET in 1977" width="500" height="358" /></a><p class="wp-caption-text">ARPANET in 1977</p></div>
<p>I&#8217;m reblogging &#8217;cause I&#8217;m busy but I&#8217;ll have my media PC build and description up soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/138/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teaching programming &#8211; part 2: how I tried it</title>
		<link>http://www.polyweb.com/blog/index.php/archives/127</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/127#comments</comments>
		<pubDate>Wed, 10 Jun 2009 18:02:57 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[The Art of Programming]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=127</guid>
		<description><![CDATA[So I&#8217;m teaching a kid to program. &#8220;A kid&#8221; to me meaning anyone born after 1980 &#8211; &#8217;cause I&#8217;m old. Here are the choices I made. Start with C++ If you want to be a professional programmer for the rest of your days, you should be an expert in C++. It&#8217;s all there: pointers, Object [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m teaching a kid to program. &#8220;A kid&#8221; to me meaning anyone born after 1980 &#8211; &#8217;cause I&#8217;m old.</p>
<p>Here are the choices I made.</p>
<h3>Start with C++</h3>
<p>If you want to be a professional programmer for the rest of your days, you should be an expert in C++. It&#8217;s all there: pointers, Object Oriented Programming, complex build issues: all the experience you&#8217;ll need.</p>
<h3>Get a book to structure the &#8220;class&#8221;</h3>
<p>All books suck to some extent. Just pick one and go. I chose <a title="link to amazon" href="http://www.amazon.com/Sams-Teach-Yourself-One-Hour/dp/0672329417" target="_blank">Sams Teach Yourself C++ in One Hour a Day (6th Edition)</a>. It is big on C++ syntax, light on Computer Science topics.</p>
<h3>Assign outside projects</h3>
<p>I&#8217;m assigning tasks like a console Hangman game, The Game Of Life, things like that. Nothing makes concepts concrete like actually building a program that does something.</p>
<h3>Teach Computer Science as taught at a great university</h3>
<p>To be a professional programmer you need to be literate in computer science. Like any other self respecting astrophysicist (and therefore professional know-it-all) I tried for years to avoid it but finally gave in and learned CS.</p>
<p>After my student makes a pass through the Sams book above, I&#8217;ll start using the curriculum available free online at <a title="link to MIT" href="http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm" target="_blank">MIT&#8217;s Open Courseware</a>. We&#8217;ll be starting with <a title="link to MIT" href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-00Fall-2007/CourseHome/index.htm" target="_blank">6.00 Introduction to Computer Science and Programming</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/127/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teaching programming &#8211; part 1: how I learned</title>
		<link>http://www.polyweb.com/blog/index.php/archives/116</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/116#comments</comments>
		<pubDate>Thu, 14 May 2009 21:34:12 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[The Art of Programming]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=116</guid>
		<description><![CDATA[A young person asked me recently: &#8220;Could you teach me how to write programs?&#8221; Could I ever! I don&#8217;t know. Could I?? I&#8217;m old. I&#8217;m not so sure I&#8217;m a good example. The generations of my programming learning: 1. 1970&#8242;s &#8212; Poking around using BASIC on pre-PC microcomputers. 2. 1980&#8242;s &#8212; Writing a fair bit [...]]]></description>
			<content:encoded><![CDATA[<p>A young person asked me recently: &#8220;Could you teach me how to write programs?&#8221;</p>
<p>Could I ever! I don&#8217;t know.<em> Could I??</em></p>
<p>I&#8217;m old. I&#8217;m not so sure I&#8217;m a good example. The generations of my programming learning:</p>
<p>1. 1970&#8242;s &#8212; Poking around using BASIC on pre-PC microcomputers.</p>
<p>2. 1980&#8242;s &#8212; Writing a fair bit of software on my Timex ZX-18 using their BASIC.</p>
<p>3. 1980&#8242;s &#8212; Fortran 77 on PC and SunOS.</p>
<p>4. 1980&#8242;s &#8212; Writing a fair bit of software on PCs running DOS with Turbo Pascal.</p>
<p>5. late 1980&#8242;s &#8212; FTP, lots of ftp. Starting to use email. Writing Fortran apps on mini computers and using my PC as a VT-100 terminal with Kermit and a 1200 baud modem. Learned vi. Turbo C 1.0 (pre-ANSI standard).</p>
<p>6. 1990&#8242;s &#8212; Lots of Fortran 90 written under HP-UX and VMS. Starting to use C to interface with hardware.</p>
<p>7. 1990&#8242;s &#8212; CDROM based &#8220;Multimedia&#8221; projects. Silly aquarium games. Very painful under Windows 3.11.</p>
<p>8. 1990&#8242;s &#8212; WWW, the internet, HTML, cgi-bin scripts in Perl. Spending lots of time configuring web servers.</p>
<p>9. late 1990&#8242;s &#8212; The dot-com boom. All web, all the time. Microsoft ASP (classic: VBScript). Learned COM, ATL to enhance big MS technology web servers.</p>
<p>10. 2000&#8242;s &#8212; Big non-Microsoft web technologies. Linux, Java, Tomcat, other application servers.</p>
<p>11. 2000&#8242;s &#8212; Post dot-com: back to Microsoft with .NET! Love it. Back to client applications.</p>
<p>12. 2000&#8242;s &#8212; back to the web: ASP.NET. Love it.</p>
<p>13. 2000&#8242;s &#8212; set your way back machine: A huge project pulls me back to ATL/MFC/C++. Coding like it&#8217;s 1990 (Vista systems).</p>
<p>14. 2000&#8242;s &#8212; Computer game technology: classic C++, wicked algorithms, cool deep technology stacks like rendering pipelines, AI, terrain.</p>
<p>Looking back, what have I learned? A lot and especially that not all learning pain is gain.</p>
<p>I have growing respect for technologies that have evolved and stand the test of time. Looking down the list the Internet, client applications, and web-connected applications ebb and flow but feel like they will be around for awhile.</p>
<p>C++ is awesome. C#/.NET is way up there too. C# feels like C++ but someone has been in and tidied everything up. HTML has got to be one of the most ubiquitous formats on the planet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/116/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New PC for my computer lab</title>
		<link>http://www.polyweb.com/blog/index.php/archives/105</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/105#comments</comments>
		<pubDate>Wed, 13 May 2009 21:56:56 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[Hard Stuff]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=105</guid>
		<description><![CDATA[I needed an extra PC for a video editing class I was going to teach. I wanted it to be beefy enough but not too expensive. I started with a PC Gamer &#8220;medium&#8221; game system recommendations and tweaked it a bit. Oh: it had to be quiet! I ordered everything from Amazon and the prices [...]]]></description>
			<content:encoded><![CDATA[<p>I needed an extra PC for a video editing class I was going to teach. I wanted it to be beefy enough but not too expensive. I started with a PC Gamer &#8220;medium&#8221; game system recommendations and tweaked it a bit.</p>
<p>Oh: it had to be quiet!</p>
<p><a title="The New Blue Computer by dan_swearingen, on Flickr" href="http://www.flickr.com/photos/dan_swearingen/3526624865/"><img src="http://farm4.static.flickr.com/3378/3526624865_e9cf4869c7.jpg" alt="The New Blue Computer" width="450" height="338" /></a></p>
<p>I ordered everything from Amazon and the prices are what I paid in January 2009. The basic system cost $1,062 and the KVM cost $564.</p>
<table style="border-collapse: collapse; width: 311pt;" border="0" cellspacing="0" cellpadding="0" width="414">
<col style="width: 255pt;" width="340"></col>
<col style="width: 56pt;" width="74"></col>
<tbody>
<tr style="height: 30pt;" height="40">
<td class="xl67" style="height: 30pt; width: 255pt;" width="340" height="40">Antec   Nine Hundred Steel ATX Ultimate Gamer PC Case</td>
<td class="xl68" style="width: 56pt;" width="74" align="right">$108.60</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000I5JHB0">http://www.amazon.com/gp/product/B000I5JHB0</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 30pt;" height="40">
<td class="xl67" style="height: 30pt; width: 255pt;" width="340" height="40">CORSAIR   750w TX Series 80 Plus Certified Power Supply</td>
<td class="xl68" align="right">$107.64</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000X2677A">http://www.amazon.com/gp/product/B000X2677A</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 45pt;" height="60">
<td class="xl67" style="height: 45pt; width: 255pt;" width="340" height="60">EVGA   132-CK-NF78-A1 nForce 780i SLI 3xPCI-Express x16 PCI-Express 2.0 Socket 775   A1 Version Motherboard</td>
<td class="xl68" align="right">$236.77</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B00118FM58">http://www.amazon.com/gp/product/B00118FM58</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 30pt;" height="40">
<td class="xl67" style="height: 30pt; width: 255pt;" width="340" height="40">Intel   Core 2 Quad Q6600 Quad-Core Processor, 2.40 GHz, 8M L2 Cache, LGA 775</td>
<td class="xl68" align="right">$189.99</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000LRMR26">http://www.amazon.com/gp/product/B000LRMR26</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 45pt;" height="60">
<td class="xl67" style="height: 45pt; width: 255pt;" width="340" height="60">Corsair   XMS2 4 GB (2 X 2 GB) PC2-6400 800 MHz 240-PIN DDR2 Dual-Channel Memory Kit &#8211;   TWIN2X4096-6400C5</td>
<td class="xl68" align="right">$54.99</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000TPXULC">http://www.amazon.com/gp/product/B000TPXULC</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl67" style="height: 15pt; width: 255pt;" width="340" height="20">Zalman   CNPS9700LED Ultra Quiet Cpu Cooler</td>
<td class="xl68" align="right">$59.99</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000JSFZPS">http://www.amazon.com/gp/product/B000JSFZPS</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 30pt;" height="40">
<td class="xl67" style="height: 30pt; width: 255pt;" width="340" height="40">EVGA   512-P3-N879-AR GeForce 9800 GTX + 512 MB DDR3 PCI-Express 2.0 Graphics Card</td>
<td class="xl68" align="right">$187.10</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B001JQMFZ2">http://www.amazon.com/gp/product/B001JQMFZ2</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 45pt;" height="60">
<td class="xl67" style="height: 45pt; width: 255pt;" width="340" height="60">Western   Digital Caviar Blue 500 GB Bulk/OEM Hard Drive 3.5 Inch, 16 MB Cache, 7200   RPM SATA II WD5000AAKS</td>
<td class="xl68" align="right">$59.99</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000RT5AE0">http://www.amazon.com/gp/product/B000RT5AE0</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl67" style="height: 15pt; width: 255pt;" width="340" height="20">HP 22X   DVDRW LS IDE Retail Black</td>
<td class="xl68" align="right">$37.66</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B001LQ2J06">http://www.amazon.com/gp/product/B001LQ2J06</a></td>
<td class="xl68"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl66"></td>
</tr>
<tr style="height: 30pt;" height="40">
<td class="xl67" style="height: 30pt; width: 255pt;" width="340" height="40">Sabrent   CRW-UINB 68 in 1 Hi-Speed USB 2.0 Internal Memory Card Reader &amp; Writer   (Black)</td>
<td class="xl68" align="right">$19.32</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000EWJYYW">http://www.amazon.com/gp/product/B000EWJYYW</a></td>
<td class="xl68"></td>
</tr>
</tbody>
</table>
<p><strong>The Keyboard, Video, and Mouse:</strong></p>
<table style="border-collapse: collapse; width: 311pt;" border="0" cellspacing="0" cellpadding="0" width="414">
<col style="width: 255pt;" width="340"></col>
<col style="width: 56pt;" width="74"></col>
<tbody>
<tr style="height: 30pt;" height="40">
<td class="xl65" style="height: 30pt; width: 255pt;" width="340" height="40">Ergotron   LX Desk Mount Arm &#8211; mounting kit ( 45-179-195 )</td>
<td class="xl67" style="width: 56pt;" width="74" align="right">$114.99</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl66" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000BUK7KW">http://www.amazon.com/gp/product/B000BUK7KW</a></td>
<td class="xl67"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl67"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20">Samsung   SyncMaster 2493HM 24&#8243; LCD Monitor</td>
<td class="xl67" align="right">$378.99</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl66" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B0012TZJZ4">http://www.amazon.com/gp/product/B0012TZJZ4</a></td>
<td class="xl67"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl65" style="height: 15pt; width: 255pt;" width="340" height="20"></td>
<td class="xl67"></td>
</tr>
<tr style="height: 30pt;" height="40">
<td class="xl65" style="height: 30pt; width: 255pt;" width="340" height="40">Logitech   967688-0403 MX3200 Cordless Desktop Laser (Black)<span> </span></td>
<td class="xl67" align="right">$70.98</td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl66" style="height: 15pt; width: 255pt;" width="340" height="20"><a href="http://www.amazon.com/gp/product/B000HCRVSK">http://www.amazon.com/gp/product/B000HCRVSK</a></td>
<td class="xl67"></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>I&#8217;ve been really happy with this system. Quiet, stable, fast, and I love the case!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/105/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Website software</title>
		<link>http://www.polyweb.com/blog/index.php/archives/86</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/86#comments</comments>
		<pubDate>Thu, 07 May 2009 15:41:33 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Blogs on blogs]]></category>
		<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[Essential Tools]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=86</guid>
		<description><![CDATA[After nearly 18 years of doing web-based work as either my primary job or in support of other work I get this question a few times a year: We need to find a good, easy to use software program for generating the [website name here]. PC based. Any suggestions? My snappy answer is WordPress WordPress.org [...]]]></description>
			<content:encoded><![CDATA[<p>After nearly 18 years of doing web-based work as either my primary job or in support of other work I get this question a few times a year:</p>
<blockquote><p>We need to find a good, easy to use software program for generating the [website name here].  PC based. Any suggestions?</p></blockquote>
<p>My snappy answer is</p>
<h3>WordPress</h3>
<p><a href="http://wordpress.org/">WordPress.org</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://en.wikipedia.org/wiki/Wordpress">WordPress at Wikipedia</a></p>
<p>Why?</p>
<p>I&#8217;ve used notepad, vi, VisualStudio, Netscape Gold, DreamWeaver, &#8230; All kinds of different tools. On the server side: Netscape Server, cgi-bin with perl, IIS (since NT 3.51), all sorts of pre-IIS app servers I can&#8217;t even remember the names of, Java technologies and LAMP.</p>
<p>I&#8217;ve used those bastard website-in-a-box things almost every ISP offers.</p>
<p>Way too many times.</p>
<p>Looking back I have to ask myself: which techniques and technologies stood up to the test of time? Which do I look back at with no regrets?</p>
<ol>
<li>WordPress on LAMP or IIS</li>
<li>IIS/ASP and IIS  with ASP.NET</li>
</ol>
<p>On the desktop editing/managing side? VisualStudio and Visual Source Safe</p>
<p>That&#8217;s it. I assert that you can build ANYTHING with these technologies. I routinely build sites that use BOTH 1. and 2. &#8212; like polyweb.com.</p>
<p>If you are a beginner: go pure WordPress. if you need more site functionality there is almost anything you could want available as a wad of PHP you can tack on.</p>
<p>If you need a real web application &#8212; and you think it is going to get large: ASP.NET is astoundingly powerful and lots of standard functionality is available out of the box. Especially identification/authentication and data driven UI functions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/86/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two (or three) waves of broken Captchas</title>
		<link>http://www.polyweb.com/blog/index.php/archives/78</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/78#comments</comments>
		<pubDate>Mon, 04 May 2009 20:34:00 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Blogs on blogs]]></category>
		<category><![CDATA[Campfire Stories]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=78</guid>
		<description><![CDATA[Captcha is that technology you see when a site (like mine) is trying to keep spambots from posting spam comments or create junk accounts. Captcha uses a distorted image of a word like this The idea is that only an actual human can read this image and see the word within. The human is then [...]]]></description>
			<content:encoded><![CDATA[<p>Captcha is that technology you see when a site (like mine) is trying to keep spambots from posting spam comments or create junk accounts. Captcha uses a distorted image of a word like this</p>
<p><a href="http://en.wikipedia.org/wiki/File:Captcha.jpg"><img src="http://upload.wikimedia.org/wikipedia/commons/6/69/Captcha.jpg" alt="Captcha" width="290" height="80" /></a></p>
<p>The idea is that only an actual human can read this image and see the word within. The human is then asked to type this word correctly before they are allowed to enter a comment or create an account, etc.</p>
<p>There were three waves of failure for the Captcha technique.</p>
<ol>
<li>Initially, webmasters did not even distort the work in the picture. Spammers simply used OCR technology to &#8220;read&#8221; the picture.</li>
<li>Next, webmasters used scrambled words like above. Spammers used better OCR.</li>
<li>Webmasters improved the scrambling (see below). Spammers enlisted humans to do the OCR (!)</li>
</ol>
<p><a href="http://en.wikipedia.org/wiki/File:Modern-captcha.jpg"><img title="Improved Captcha" src="http://upload.wikimedia.org/wikipedia/commons/b/b6/Modern-captcha.jpg" alt="Improved Captcha" width="300" height="57" /></a></p>
<p>Enlisting humans to do OCR? Basically the image is relayed to users who are either paid money or paid by access to porn to solve the captcha and return the solution which can then be used to gain machine or script access to the target system.</p>
<p>Wikipedia does its usual great job explaining the whole <a title="Wikipedia - Captcha" href="http://en.wikipedia.org/wiki/Captcha" target="_blank">Captcha</a> thing.</p>
<p>Jeff Atwood does it best at Coding Horror: March 04, 2008 &#8212; <a title="Coding Horror" href="http://www.codinghorror.com/blog/archives/001067.html" target="_blank">CAPTCHA is Dead, Long Live CAPTCHA!</a> </p>
<p>Jeff also has a great thread on it in his discussion of his ongoing <a href="http://blog.stackoverflow.com/category/community/" target="_blank">efforts to manage bad behaviour</a> at his excellent <a href="http://stackoverflow.com/" target="_blank">StackOverflow site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/78/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NTFS tricks and the full c: disk</title>
		<link>http://www.polyweb.com/blog/index.php/archives/49</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/49#comments</comments>
		<pubDate>Mon, 09 Mar 2009 22:33:09 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[Windows Details]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/?p=49</guid>
		<description><![CDATA[In the last week or so I&#8217;ve hit a point on my workstation where booting and running everyday apps has just slowed to an unbearable crawl.  This happened to me before but I switch machines enough that I usually avoid the issue by, well, switching machines. This time I think I have to actually stop and fix [...]]]></description>
			<content:encoded><![CDATA[<p>In the last week or so I&#8217;ve hit a point on my workstation where booting and running everyday apps has just slowed to an unbearable crawl.  This happened to me before but I switch machines enough that I usually avoid the issue by, well, switching machines.</p>
<p>This time I think I have to actually stop and fix it &#8212; because I won&#8217;t have a new machine for another week or so.</p>
<p>Dang. Forced learning.</p>
<p><a title="DiskThrash by dan_swearingen, on Flickr" href="http://www.flickr.com/photos/dan_swearingen/3341766864/"><img src="http://farm4.static.flickr.com/3613/3341766864_cabfd51e9d_o.png" alt="DiskThrash" width="500" height="352" /></a></p>
<p>Using perfmon it is clear the disk is thrashing. Note the top two counters,  pages/sec (yellow) and Average disk access queue (blue)  are pegged but CPU (green) is mild.</p>
<p>This is with the machine basically idle. I have the usual suite of things like Google Desktop and Tortiose SVN running so I&#8217;m not shocked things are accessing the disk but the machine is almost unusable and it was running fine about a month ago. No, I checked, I don&#8217;t have a virus. In my life the problem has never been &#8220;it&#8217;s a virus.&#8221; It has always been &#8220;I did something stupid.&#8221; I guess viruses also fall into that I-did-something-stupid bin &#8230;</p>
<p>I&#8217;m sure some of you are ahead of the story and saying &#8220;has he checked his disk space?&#8221; Turns out I have almost 21% free space on a 320 GB drive. Is that a problem?</p>
<p>Yes.</p>
<p>This is a Windows XP system with NTFS on the C: drive. I actually have couple more 320 GB drives on this machine but they&#8217;re basically empty. Why are they empty? Dumb reasons. I have a bunch of alpha and beta quality projects going, each of which has all kinds of massive data sets and each of which the developers insist &#8220;install it on the C: drive &#8212; it doesn&#8217;t work quite right in other locations.&#8221; Sigh. They are mostly not my developers so I can&#8217;t explain (or yell) to them HOW STUPID IT IS TO WELD YOUR APP TO THE C: DRIVE.</p>
<p>But why is an 80% full NTFS partition a problem? When I started this I actually did not know <strong><em>why</em></strong> but I&#8217;ve known for years that NTFS disk performance goes to crap once you get north of 70% full or so &#8212; but why? I found some of the best information on this topic on <a href="http://www.windowsdevcenter.com/pub/a/windows/2005/02/08/NTFS_Hacks.html">this page by Mitch Tulloch</a> at O&#8217;Reilly Windows Devcenter.</p>
<p>Based on Mitch&#8217;s descriptions, my best theory is that it&#8217;s a combination of the Master File Table (MFT) getting fragmented as well as space needed for the pagefile. This hints at two fixes: move the paging file and clear some disk space.</p>
<p>Getting into the disk management applet,</p>
<p><a title="Diskmanager by dan_swearingen, on Flickr" href="http://www.flickr.com/photos/dan_swearingen/3341098853/"><img src="http://farm4.static.flickr.com/3398/3341098853_5a30518bce.jpg" alt="Diskmanager" width="500" height="418" /></a></p>
<p>I saw that Dell helpfully left me a 3.11 GB partition that was unused so I formatted it FAT32, declared a 3067 MB page file there, and removed the one on the C: drive.  Note: Ideally the pagefile partition would be on a physically separate disk but I&#8217;m working with what I have.</p>
<p>After a reboot I have:</p>
<p><a title="Disks by dan_swearingen, on Flickr" href="http://www.flickr.com/photos/dan_swearingen/3341931568/"><img src="http://farm4.static.flickr.com/3627/3341931568_680684b0fd.jpg" alt="Disks" width="500" height="317" /></a></p>
<p>Performance is much better &#8212; the machine now thrashes for about 3 minutes after boot and login as opposed to 15+ (!) minutes before moving the pagefile location.</p>
<p>However, I&#8217;m at 79% full (down from 82%) on the C: drive so I&#8217;m still in serious risk of MFT fragmentation so let&#8217;s clean up the disk.</p>
<p><a href="http://lifehacker.com/software/disk-space/geek-to-live--visualize-your-hard-drive-usage-219058.php">Gina Trapani wrote this very helpful post</a> about using <a href="http://windirstat.info/">WinDirStat</a> to see what&#8217;s using space on your disk.</p>
<p>WinDirStat is a really cool tool!  I&#8217;ve learned about (and subsequently forgotten) this tool several times. I have on the order of 1,000,000 files on this system so the graphical tool to help me home in on the disk hogs is really helpful.</p>
<p><a title="windirstat by dan_swearingen, on Flickr" href="http://www.flickr.com/photos/dan_swearingen/3341126121/"><img src="http://farm4.static.flickr.com/3389/3341126121_d168d942f7.jpg" alt="windirstat" width="500" height="378" /></a></p>
<p>After some quality time marvelling at all the cruft I had accumulated on my machine (why did I have <strong>two</strong> cygwin installations? <em>Why did I have <strong>one</strong>?</em> ) I moved or deleted  about 60 GB of stuff and got to around 38% free and the machine is running much better now.</p>
<p>The scary thing is that I absolutely &#8220;need&#8221; the 180 GB in use now. It was only a few years ago that 30 GB drives were ok&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/49/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It’s Done™ (a.k.a. it Works™)</title>
		<link>http://www.polyweb.com/blog/index.php/archives/24</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/24#comments</comments>
		<pubDate>Sun, 10 Jun 2007 19:21:54 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[The Art of Programming]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/index.php/2007/06/10/it%e2%80%99s-done%e2%84%a2-aka-it-works%e2%84%a2/</guid>
		<description><![CDATA[Have you ever had a disagreement about when something is actually done (as opposed to “not done yet”)? I started learning about “done” when my parents started making me do chores around the house. Doing dishes: Walk to sink, wash dishes, put in drainer. Done. Am I right? I though I was right. “Did you [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever had a disagreement about when something is actually done (as opposed to “not done yet”)?</p>
<p>I started learning about “done” when my parents started making me do chores around the house.</p>
<p>Doing dishes: Walk to sink, wash dishes, put in drainer. Done. Am I right? I though I was right.</p>
<p>“Did you empty out the dishpan?” my mom asked.</p>
<p>“No.”</p>
<p>“Well, you’re not done yet.”</p>
<p>Later, I say “now I’m done.”</p>
<p>“Did you wipe down the sink, counters, and stove?”</p>
<p>“That’s part of ‘washing the dishes?’” Even a ten year-old understands the concept of scope creep. The answer was yes but through my push-back I won a change in the name of the task. From then on “Doing the dishes” had to be called “Doing the dishes and cleaning up the kitchen.”</p>
<p>The bottom line: in a team environment the implementer can influence but does not own the determination of when a task is done. Like project scope, doneness is a value negotiated with the customer of the work.</p>
<p>I was recently asked to define “done” in my organization. This is a clear sign that something might be broken. Maybe it just means that there have been recent disagreements about done?</p>
<h2>What is Not Done?</h2>
<p>I often find that a helpful way to define a positive value is by defining the corresponding negative value.</p>
<p><strong>Not Done</strong> is also “it doesn’t work.” To me this is an obvious corollary but I find that this does not occur to some people. The reverse is certainly true.</p>
<p><strong>Not Done</strong> is when code “<a title="Link to CodingHorror" href="http://www.codinghorror.com/blog/archives/000818.html">Works on My Machine</a>.” I cringe when I hear “it’s working on my machine” especially since this is typically a response to someone saying “I can’t get it to work” This is ESPECIALLY bad when heard in response to “I can’t get it to build.” When a developer says “it works on my machine” they are really saying:</p>
<blockquote><p>I do not know what this software depends on.</p>
<p>I do not know what’s involved in moving this software to a clean machine.</p>
<p>I have not checked in all the required code into the source code control system (and I probably don’t know what’s missing).</p>
<p>I do not really care that it does not work on your machine. I&#8217;m hoping that&#8217;s <em>your</em> problem&#8230;</p></blockquote>
<p><strong>Not Done</strong> is when code has not been tested. Untested code does not really work. This is because code that has not been tested invariably has some issues when actually exercised. I consider unit testing the absolute bare minimum level of testing before code can be considered done. An alternative to unit testing? Sure, a full blown test team.</p>
<p><strong>Not done</strong> is when code cannot be reliably deployed. This is related to the “it works on my machine” issue. Reliable deployment means the developer has thought about all the steps, interactions and dependencies their code has and has documented them in detail sufficient to allow installation. Maybe the developer even went wild and wrote some install scripts or set up a full featured installer. It could happen.</p>
<h2>Documentation</h2>
<p>Is documentation required before code can be considered Done? If the code cannot be replicated, tested, or deployed without some written assistance then yes, it cannot be considered done until enough documentation has been written.</p>
<blockquote><p>I find explaining to a developer that this piece of code is theirs to work on <strong>forever and ever</strong> until they write enough documentation to hand it off works as a powerful motivator to getting documentation written.</p></blockquote>
<h2>So What does Done mean?</h2>
<p>Based on the discussion above I think I’ve outlined my definition of Done:</p>
<p>It has been tested.<br />
It is reproducible and deployable on all supported environments.<br />
It is documented sufficiently.<br />
Most importantly (recalling my experience with the dishes), the customer agrees that it does what they want.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/24/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My little piece of Windows Vista</title>
		<link>http://www.polyweb.com/blog/index.php/archives/19</link>
		<comments>http://www.polyweb.com/blog/index.php/archives/19#comments</comments>
		<pubDate>Tue, 06 Feb 2007 20:26:51 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Campfire Stories]]></category>
		<category><![CDATA[Windows Details]]></category>

		<guid isPermaLink="false">http://www.polyweb.com/blog/index.php/2007/02/06/my-little-piece-of-windows-vista/</guid>
		<description><![CDATA[“In addition to our summer and winter estate, he owned a valuable piece of land. True, it was a small piece, but he carried it with him wherever he went.” From Woody Allen’s Love and Death. So, what HAVE I been spending my time on? My little piece of the Windows Vista operating system. For [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.polyweb.com/blog/images/VistaDLA/DLA.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/DLATH.jpg" alt="null" /></a></p>
<blockquote><p>“In addition to our summer and winter estate, he owned a valuable piece of land. True, it was a small piece, but he carried it with him wherever he went.”</p></blockquote>
<p>From Woody Allen’s <a href="http://imdb.com/title/tt0073312/">Love and Death</a>.</p>
<p>So, what HAVE I been spending my time on? My little piece of the Windows Vista operating system.</p>
<p>For the last 20 months I’ve been building the <a href="http://en.wikipedia.org/wiki/Digital_locker">digital locker assistant</a> (DLA), a dedicated download client that works with Microsoft’s online digital locker, which is in turn part of <a href="http://www.windowsmarketplace.com">Microsoft’s Windows Marketplace</a>. Windows Marketplace is where that mysterious &#8220;Windows Catalog&#8221; link on your Start/Programs menu goes to.</p>
<p>Windows Marketplace supports direct browser based downloading. However, when the download is greater than 1-2 Gigabytes using the DLA is a much better way to go. The most popular use of the DLA so far has been buying and downloading entire copies of Windows Vista and Office 2007.</p>
<p>We were rather skeptical that users would want to download Vista or Office since they are really big downloads. However, earlier in the year the success selling and downloading super large games from Windows Marketplace convinced everyone that downloading Vista would be attractive to consumers. And indeed it has!</p>
<p>You can get the digital locker assistant two ways: If you have Windows XP, go to the <a href="http://www.windowsmarketplace.com">Windows Marketplace website</a>, create an account and download and install the MSI. It&#8217;s only a 1 meg download.</p>
<p>Or, it’s built into every copy of Windows Vista (except Server versions).</p>
<p>Actually building a part of Windows Vista was a huge effort but it’s really neat to install Vista and see my little piece in there. When I say “my,” it’s more like I’m using the <a href="http://en.wikipedia.org/wiki/Pluralis_Majestatis">Pluralis Majestatis</a>, the Royal <strong>We</strong>. I was part of a team and We had LOTS of help.</p>
<p>I was the dev lead for the DLA for XP and Vista. Two very senior Windows developers with me at <a href="http://www.Vertigo.com">Vertigo</a>, Chris Idzerda and Ralph Arvesen, rounded out the dev team (that is, they actually did most of the work). Initially, I was dev lead and PM but soon we needed more help with the process and got a full-time program manager, Anne Warren, who was also PM for the Windows Marketplace (WMP) website. The website dev team was some 15 developers and we had a build team of one (that should have been three). Our test team was in India so the dev/test cycle was almost 24/7, something like 24/6 – we’d hand off work in the afternoon and it would be tested all (our) night with a nice bug list waiting for us in the morning.</p>
<p>And then there’s the rest of the Vista team at Microsoft: really a cast of thousands. I think they ALL emailed me at least once. The High DPI functionality team. The Localization team (“do you know your UI looks really bad in Arabic?”), the Group Policy team, Remote Desktop team… you get the picture.</p>
<h3>Let’s look at the app</h3>
<p>In Vista there are two ways the digital locker assistant (DLA) may be invoked. The primary way is when you buy something at <a href="http://www.windowsmarketplace.com">Windows Marketplace</a> and it’s in your <a href="http://www.windowmarketplace.com/content.aspx?ctId=302&amp;tabid=1">digital locker</a> and you click “download.”</p>
<p><a href="http://www.polyweb.com/blog/images/VistaDLA/WMPSiteOnDesk.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/WMPSiteOnDeskTH.jpg" alt="" /></a></p>
<p>You may also browse to the DLA by finding it under the Vista Control Panel.</p>
<p><a href="http://www.polyweb.com/blog/images/VistaDLA/ControlPanel.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/ControlPanelTH.jpg" alt="" /></a></p>
<p>Then look under Programs or Programs and Features (using Classic view) and find &#8220;Manage programs you buy on line.&#8221; If you open this link you will invoke the DLA and if you have never sync&#8217;d up with your online digital locker you will see this:</p>
<p><a href="http://www.polyweb.com/blog/images/VistaDLA/DLANewDesktop.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/DLANewDesktopTH.jpg" alt="" /></a></p>
<p><a href="http://www.polyweb.com/blog/images/VistaDLA/DLANewUser.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/DLANewUserTH.jpg" alt="" /></a></p>
<p>If you have software in your online digital locker you can see it listed here by clicking on &#8220;Sign in if you already have a digital locker account.&#8221; Digital locker accounts are Windows LiveID (<em>a.k.a.</em> Passport) accounts mapped to a Windows Marketplace account. You&#8217;ll get a login prompt:</p>
<p><a href="http://www.polyweb.com/blog/images/VistaDLA/login.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/loginTH.jpg" alt="" /></a></p>
<p>and after synchronizing with your online digital locker you&#8217;ll see all your purchased, free, and trial items listed. In my case (below) I clearly have a bunch of games in my locker. These were just to test downloading large items. Right.</p>
<p><a href="http://www.polyweb.com/blog/images/VistaDLA/MyLocker.jpg"><img src="http://www.polyweb.com/blog/images/VistaDLA/MyLockerTH.jpg" alt="" /></a></p>
<h2>Technology under the covers</h2>
<p>The DLA is built in Win32/C++ as an ATL Windows application but we get some goodies from WTL as well. For those going &#8220;huh?&#8221; look at my post <a href="http://www.polyweb.com/blog/index.php/archives/16">ATL and WTL resources</a>.</p>
<p>At this point most people are asking me: why C++? Why not .NET and/or WPF? Or, if you&#8217;re using C++, why not MFC?</p>
<p>The DLA started (and is still available) as a downloadable application for XP. Our target users are what Alan Cooper would call &#8220;permanent beginners&#8221; (like that relative that always calls you for tech support&#8230;) &#8212; <strong>with a modem</strong>.</p>
<p>This means making the download as small as possible. Vertigo is a premier .NET shop but we could not use .NET because the 22 MB .NET runtime install kills us (that .NET never made it into the XP Service Packs&#8230; argh). Fortunately, we happen to have a few developers around (i.e., old geezers) who can do C++. We used ATL again to keep the size of the executable small.</p>
<p>In hindsight, it was just as well that the XP effort started in C++. Once we expanded the project to include being built into Vista we found that, in Windows System programming and the Vista source tree, C++ is expected and still king (See my post <a href="http://www.polyweb.com/blog/index.php/2006/03/18/has-microsoft-flipped-the-bozo-bit-on-net/">Has Microsoft flipped the Bozo bit on .NET?</a> for a full discussion).</p>
<p>This meant that we could develop one source code base and, with some care, make it build in the Windows OS build system for Vista and VS2005 for XP.</p>
<p>Single source is nice but why not make a single binary that runs on Vista and XP? Sigh. We do &#8212; sort of, but it&#8217;s complicated.  From a programmer&#8217;s perspective, Vista makes one dramatic change from traditional Win32 applications and that&#8217;s in how localized resources are loaded.</p>
<p>To handle localization traditional Windows practice is to create an RC file for all resources (dialogs, images, sounds, strings, keyboard shortcuts, etc.) which are compiled into the resource DLL. Localization teams produce localized RC files based on your master RC file and these are all built into a suite of resource DLLs. At run time the application loads the appropriate resource DLL based on logic you have to write which looks at the calling thread&#8217;s locale settings.</p>
<p>Internal to the application is a language-neutral block of resources (typically English-US based) and if an appropriate external resource DLL cannot be found for the current locale settings, this internal block is used instead. This is known as &#8220;fallback&#8221; behavior.</p>
<p>Here&#8217;s the new twist in Vista: in Vista the OS loader (not the app) picks the resource DLL and locates it in memory where the app thinks its internal fallback resources are. This is expected behavior and currently only appears to work for a native Vista-built application so our &#8220;legacy&#8221; resource loading technique as used in XP was not acceptable to those who guard the Windows Source tree. Did I mention all the code reviews? Making Vista-style resource loading work in XP, while theoretically possible, was a task we did not choose to take on. So we ended up with one set of source code feeding two build processes; one for XP and one for Vista. Through careful coding there are remarkably few &#8220;if Vista do this, if XP do that&#8221; points in the code. </p>
<p>While we currently block running the XP installer on Vista (in theory blocking installation of the XP DLA on Vista), it turns out that the XP DLA runs fine on Vista. I should not be suprised by this becuase we did quite a bit of casual sanity testing on this but it was not initially part of the test matrix. We found out by somewhat by accident as users were upgrading their XP machines (where the user had added the XP DLA) to Vista and then running the XP DLA.</p>
<p>For our downloading mechanism we hand off all download jobs to Microsoft BITS (<a href="http://msdn2.microsoft.com/en-us/library/aa362827.aspx">Background Intelligent Transfer Service</a>). While BITS works well for us I still think Micorsoft is tempting the gods by including &#8220;Intelligent&#8221; in their product name. BITS is the guts behind hwo Microsoft Updates are downloaded. I&#8217;ve also discovered that Google Updater uses BITS as well. What we gained by using BITS was automatic download management including background downloads, downloads that persist when our application is not running, downloads that seamlessly restart when the machine is rebooted, and lots of error handling algorthms that we did not have to write or maintain. I&#8217;d use BITS again if needed. We did have to build a simple HTTP download as well because some modem-based accelerators do not play nice with BITS.</p>
<p>Overall it was a great experience. While it was sometimes chaotic and exhausting, it was a lot of fun too. </p>
<p>I’d do it again.</p>
<p>Really.</p>
<p>After I’ve had a couple years to rest.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polyweb.com/blog/index.php/archives/19/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
