<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Toasted Code</title>
	<atom:link href="http://toastedcode.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://toastedcode.wordpress.com</link>
	<description>Just like Grandma used to make.</description>
	<lastBuildDate>Fri, 15 Jul 2011 13:13:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='toastedcode.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Toasted Code</title>
		<link>http://toastedcode.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://toastedcode.wordpress.com/osd.xml" title="Toasted Code" />
	<atom:link rel='hub' href='http://toastedcode.wordpress.com/?pushpress=hub'/>
		<item>
		<title>This Blog Has a New Home</title>
		<link>http://toastedcode.wordpress.com/2008/05/22/this-blog-has-a-new-home/</link>
		<comments>http://toastedcode.wordpress.com/2008/05/22/this-blog-has-a-new-home/#comments</comments>
		<pubDate>Thu, 22 May 2008 13:55:28 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/?p=152</guid>
		<description><![CDATA[Dear Reader, Regrettably, WordPress just wasn&#8217;t cutting it, and so I made the difficult decision to move ship to Blogger. My new home on the web is www.toastedcode.com. Yeah I know &#8211; if I had set up a domain a long time ago I wouldn&#8217;t have had to make this service announcement. I&#8217;m still working [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=152&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dear Reader,</p>
<p>Regrettably, WordPress just wasn&#8217;t cutting it, and so I made the difficult decision to move ship to Blogger. My new home on the web is <a href="http://www.toastedcode.com">www.toastedcode.com</a>. Yeah I know &#8211; if I had set up a domain a long time ago I wouldn&#8217;t have had to make this service announcement.</p>
<p>I&#8217;m still working on Code Toaster and will create an updated site at a later date with links to download files, documentation, and so forth. For now, check <a href="http://www.toastedcode.com">www.toastedcode.com</a> for the latest information.</p>
<p>I hope you&#8217;ll follow me to my new home, but if not, it&#8217;s been swell!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/152/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/152/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/152/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=152&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/05/22/this-blog-has-a-new-home/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
		<item>
		<title>Unit Test Shadowing</title>
		<link>http://toastedcode.wordpress.com/2008/04/26/unit-test-shadowing/</link>
		<comments>http://toastedcode.wordpress.com/2008/04/26/unit-test-shadowing/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 03:44:56 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2008/04/26/unit-test-shadowing/</guid>
		<description><![CDATA[I looked carefully at the unit test VS.Net 2008 had just generated. Looked standard enough, except… what was this? A class named CodeFragment_Accessor? PrivateObject param0 = null; CodeFragment_Accessor target = new CodeFragment_Accessor(param0); int expected = 0; int actual; target.TextLength = expected; actual = target.TextLength; Assert.AreEqual(expected, actual); Assert.Inconclusive(&#8220;Verify the correctness of this test method.&#8221;);   Hold [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=145&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I looked carefully at the unit test VS.Net 2008 had just generated. Looked standard enough, except… what was this? A class named CodeFragment_Accessor?
</p>
<div>
<table style="border-collapse:collapse;background:#f2f2f2;" border="0">
<col>
<tbody valign="top">
<tr style="height:26px;">
<td style="padding-left:7px;padding-right:7px;border-top:solid #bfbfbf 0.5pt;border-left:solid #bfbfbf 0.5pt;border-bottom:solid #bfbfbf 0.5pt;border-right:solid #bfbfbf 0.5pt;">
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:#2b91af;">PrivateObject</span> param0 = <span style="color:blue;">null</span>; <span style="color:green;"><br />
								</span></span></p>
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:#2b91af;">CodeFragment_Accessor</span> target = <span style="color:blue;">new</span><br />
								<span style="color:#2b91af;">CodeFragment_Accessor</span>(param0);<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:blue;">int</span> expected = 0; <span style="color:green;"><br />
								</span></span></p>
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:blue;">int</span> actual;<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;">target.TextLength = expected;<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;">actual = target.TextLength;<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:#2b91af;">Assert</span>.AreEqual(expected, actual);<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:#2b91af;">Assert</span>.Inconclusive(<span style="color:#a31515;">&#8220;Verify the correctness of this test method.&#8221;</span>);<br />
</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Hold on now! That wasn&#8217;t one of my classes – I&#8217;d never seen it before, although I did in fact have a class called CodeFragment. I right-clicked and selected <em>Go To Definition</em> from the popup menu.
</p>
<div>
<table style="border-collapse:collapse;background:#f2f2f2;" border="0">
<col>
<tbody valign="top">
<tr style="height:26px;">
<td style="padding-left:7px;padding-right:7px;border-top:solid #bfbfbf 0.5pt;border-left:solid #bfbfbf 0.5pt;border-bottom:solid #bfbfbf 0.5pt;border-right:solid #bfbfbf 0.5pt;">
<p><span style="font-family:Courier New;font-size:10pt;">[<span style="color:#2b91af;">Shadowing</span>(<span style="color:#a31515;">"CodeToasterGenerator.Translator.FragmentTracking.CodeFragment"</span>)]<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;"><span style="color:blue;">public</span><br />
								<span style="color:blue;">class</span><br />
								<span style="color:#2b91af;">CodeFragment_Accessor</span> : <span style="color:#2b91af;">BaseShadow<br />
</span></span></p>
<p><span style="font-family:Courier New;font-size:10pt;">{<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;">…<br />
</span></p>
<p><span style="font-family:Courier New;font-size:10pt;">}</span>
						</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>The class looked familiar somehow. On closer inspection, it appeared to be a copy of my CodeFragment class, except that in this _Accessor version, all the fields I had declared <em>private</em> were declared <em>public</em>. <em>Hmmm.<br />
</em></p>
<p>I cracked open the MSDN documentation and ran a search for the <strong>ShadowingAttribute</strong>. MSDN displayed the helpful hint: <span style="color:black;font-size:8pt;">Do not use this class. </span>
	</p>
<p><img align="left" src="http://toastedcode.files.wordpress.com/2008/04/042608-0345-unittestsha1.png?w=595">Really. That&#8217;s what it said. <em>Do not use this class. </em>Lighten up Microsoft, I wasn&#8217;t going to <em>use</em> it, I just wanted to know what it&#8217;s for! Sheesh. And that&#8217;s pretty much all the documentation it looked like I was going to get on the infamous <strong>ShadowingAttribute</strong>.
</p>
<p>But moving right along – the <em>_Accessor</em> class inherits from a class called <strong>BaseShadow</strong>. Maybe that would provide some clues.
</p>
<p>And I was right – MSDN reports that <strong>BaseShadow</strong><br />
		<em>is used by the publicize method to help you test private types</em>.
</p>
<p>Well now, that makes a whole lot more sense, and is actually pretty snazzy too. Although, to be honest, I&#8217;m not sure what publicize method they&#8217;re referring to. I mean, I see what they&#8217;re getting at, but that seems like odd language. Did they mean there&#8217;s a class somewhere that has a method named <em>publicize</em>, which uses the BaseShadow class in some way, or does this refer, in a general sense, to the process of publicizing a test? Or something.
</p>
<p>Anyway, VS.Net&#8217;s unit test framework apparently uses some fancywork (using reflection) to ensure complete code coverage (instead of generating tests for only public fields, properties, and methods). You&#8217;re not going to get much help from Google doing a search for <a href="http://www.google.com/search?um=1&amp;hl=en&amp;rlz=1T4DMUS_enUS266US267&amp;q=ShadowingAttribute&amp;ie=UTF-8&amp;sa=N&amp;tab=iw">ShadowingAttribute</a>, but take it from me that you can (and should) safely use the generated <em>_Accessor</em> class to  unit test both public <em>and</em> private accessors in your class. And this is another great reason why you should let VS.Net stub out your unit tests for you instead of building them from scratch yourself – hand coding the &#8220;shadow wrapper&#8221; would take a while.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/145/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/145/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=145&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/04/26/unit-test-shadowing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>

		<media:content url="http://toastedcode.files.wordpress.com/2008/04/042608-0345-unittestsha1.png" medium="image" />
	</item>
		<item>
		<title>Parser Remade</title>
		<link>http://toastedcode.wordpress.com/2008/04/24/parser-remade/</link>
		<comments>http://toastedcode.wordpress.com/2008/04/24/parser-remade/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 15:37:22 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[Code Toaster]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2008/04/24/parser-remade/</guid>
		<description><![CDATA[Yes, I&#8217;m still working on Code Toaster in my spare time. Given several bug reports from the last release involving the COM-based parsing toolkit, ProGrammar, from Norken Technologies, along with the fact that development seems to be inactive right now (read: they stole my money), I decided to yank out all ProGrammar dependent code and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=140&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yes, I&#8217;m still working on Code Toaster in my spare time. Given several bug reports from the last release involving the COM-based parsing toolkit, ProGrammar, from <a href="http://www.programmar.com/">Norken Technologies</a>, along with the fact that development seems to be inactive right now (read: they stole my money), I decided to yank out all ProGrammar dependent code and replace it with pure .Net parsing stuffs.
</p>
<p>And that&#8217;s working very well. In fact, I think it&#8217;s working better than I expected, perhaps because, this time around, I&#8217;m using much better development practices. Like <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a>. In retrospect, it was extremely foolish of me to ever approach a large coding project like this without reams of automated tests – I&#8217;ll talk about that later in this post. But first, a little about how the parser(s) work…
</p>
<div>
<table style="border-collapse:collapse;" border="0">
<col>
<tbody valign="top">
<tr>
<td style="padding-left:7px;padding-right:7px;">
<p><img align="right" src="http://toastedcode.files.wordpress.com/2008/04/042408-1538-parserremad12.png?w=595">Parsing a template is comprised of three steps.
</p>
<ol>
<li>A Code Toaster template is parsed into a parse tree by the <strong>Template Parser</strong>.
</li>
<li>The <strong>C# Generator</strong> translates the parse tree into compilable C# code. In the new design, C# code generation is done <em>as the template is parsed</em>, not as a separate step (as before, with the ProGrammar parser), which yields much improved performance. I maintained modularity by deriving the C# Generator class from the Template Parser base class, and by making parsing event based: as template &#8220;nodes&#8221; are parsed, an event is raised that allows any interested classes to &#8220;do stuff&#8221; (like generate code).
</li>
<li>The <strong>C# Parser</strong> parses the generated C# code. The only reason this step is necessary is to give you bodacious IntelliSense as you&#8217;re editing template code.</li>
</ol>
</td>
</tr>
<tr>
<td style="padding-left:7px;padding-right:7px;"> </td>
</tr>
</tbody>
</table>
</div>
<p>Each step increases in complexity by many-folds. I&#8217;ve completed the Template Parser, which was enjoyably challenging but not ridiculously difficult. It&#8217;s currently parsing a 1,000+ line template in about 80 milliseconds, which should be fast enough, I think. I&#8217;ve done some performance tuning, but may revisit it later to try to speed things up even more. As you&#8217;re editing a template, any changes (like variable declarations, new types, etc) need to be available immediately within IntelliSense, which means the backend parser and IntelliSense engine must be lightning fast.
</p>
<p>And reliable, which is why I&#8217;ve spent a good deal of time fleshing out a suite of unit tests. VS.Net 2008&#8242;s new unit testing functionality is just a beautiful thing. It&#8217;s actually <em>beyond</em> beautiful. If a test fails, I can easily run just that test (VS.Net is smart enough to figure out what test to run by looking at where my cursor is in the test class), step into the code, and inspect and fix the problem using the stupendous Edit &amp; Continue feature. Yeah, you could do almost the same thing with NUnit, but the process is so much more streamlined now, and just plain easy.
</p>
<p>I think I&#8217;m on the right track. Getting rid of ProGrammar means there&#8217;s no cross-appdomain performance penalties, no COM headaches (like registering and unregistering COM dlls, and all the headaches that <em>could</em> entail, during installation), and most of all, I can tailor the parser architecture to meet the rather specific needs of Code Toaster.
</p>
<p>So your next question is probably: what about that C# parser? How long is <em>that</em> bad boy going to take to write from scratch?
</p>
<p>And the answer is: not long at all. But that&#8217;s a story for another post.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/140/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/140/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=140&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/04/24/parser-remade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>

		<media:content url="http://toastedcode.files.wordpress.com/2008/04/042408-1538-parserremad12.png" medium="image" />
	</item>
		<item>
		<title>Hackin&#8217; Your Heart</title>
		<link>http://toastedcode.wordpress.com/2008/04/06/hackin-your-heart/</link>
		<comments>http://toastedcode.wordpress.com/2008/04/06/hackin-your-heart/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 02:13:39 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Neat Stuff]]></category>
		<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2008/04/06/hackin-your-heart/</guid>
		<description><![CDATA[&#160; A few security researchers have recently turned their attention from hacking RFID chips to pacemakers and implantable defibrillators. Apparently a hacker could cause some serious cardiac damage, wirelessly, from less than 5 feet away. For now, the threat appears to be &#8220;largely theoretical&#8221;, whatever that means. At the least, the idea of someone being [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=138&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
<div class="wlWriterSmartContent" id="f4ea03ba-fad6-4e75-8bc5-c8b980b2af63" style="display:inline;float:left;margin:0;padding:0;"><a href="http://toastedcode.files.wordpress.com/2008/04/pacemaker-8x6.jpg" title="Defibrillator/Pacemaker combo" rel="thumbnail"><img border="0" src="http://toastedcode.files.wordpress.com/2008/04/pacemaker.png?w=595" /></a></div>
</p>
<p>&nbsp;</p>
<p>A <a href="http://www.cnet.com/8301-13739_1-9883822-46.html" target="_blank">few security researchers</a> have recently turned their attention from hacking RFID chips to pacemakers and implantable defibrillators.</p>
<p>Apparently a hacker <a href="http://www.nytimes.com/2008/03/12/business/12heart-web.html?_r=1&amp;oref=slogin" target="_blank">could cause some serious cardiac damage</a>, wirelessly, from less than 5 feet away. For now, the threat appears to be &#8220;largely theoretical&#8221;, whatever that means. At the least, the idea of someone being able to stop a heart, via remote control, would make for a great novel or movie plotline. </p>
<p>But for those 250,000 folks sporting a pacemaker under their skin, it might be time to start thinking about making suspicious visitors and money hungry, unscrupulous, relatives check their laptops and other wireless devices at the door.&nbsp; </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/138/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/138/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=138&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/04/06/hackin-your-heart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>

		<media:content url="http://toastedcode.files.wordpress.com/2008/04/pacemaker.png" medium="image" />
	</item>
		<item>
		<title>How Many Video Cards?</title>
		<link>http://toastedcode.wordpress.com/2008/04/01/how-many-video-cards/</link>
		<comments>http://toastedcode.wordpress.com/2008/04/01/how-many-video-cards/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 15:09:10 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2008/04/01/how-many-video-cards/</guid>
		<description><![CDATA[So now, apparently, you can configure an SLI system with three (or more!!!) video cards instead of two. Is it just me, or is this starting to resemble the razor blade shootout between Gillette, Schick, et al? From TweakTown&#8217;s review: &#8220;It’s clear that NVIDIA has really got its dual GPU SLI technology sorted out, but [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=135&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So now, <a href="http://www.engadget.com/2008/03/30/nvidia-geforce-9800-gtx-triple-sli-rig-benched/" target="_blank">apparently</a>, you can configure an SLI system with three (or more!!!) video cards instead of two.</p>
<p>Is it just me, or is this starting to resemble <a href="http://www.mikeindustries.com/blog/archive/2005/09/gillettes-five-blade-folly" target="_blank">the razor blade shootout</a> between Gillette, Schick, et al?</p>
<p>From <a href="http://www.tweaktown.com/articles/1363/10/page_10_final_thoughts/index.html" target="_blank">TweakTown&#8217;s review</a>: </p>
<p>&#8220;<em>It’s clear that NVIDIA has really got its dual GPU SLI technology sorted out, but when you start mixing it up with three or four GPUs the </em><a href="http://www.tweaktown.com/#"><em>performance</em></a><em> increase while present, <strong>is very small</strong>, especially in relation to what it costs you to go down that route.&#8221;</em></p>
<p>Psychologically, though, I can&#8217;t help feeling that, if I had the funds, <em>of course</em> three video cards must be better than two! And most definitely one!</p>
<p>Ain&#8217;t that just silly?</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/135/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/135/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/135/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=135&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/04/01/how-many-video-cards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
		<item>
		<title>Where Have I Been?</title>
		<link>http://toastedcode.wordpress.com/2008/03/20/where-have-i-been/</link>
		<comments>http://toastedcode.wordpress.com/2008/03/20/where-have-i-been/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 18:12:18 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/?p=134</guid>
		<description><![CDATA[You may have noticed this blog has been mostly inactive for a while. A long while. That&#8217;s mostly &#8217;cause I haven&#8217;t been feeling too good lately. I think I&#8217;ve caught every cold and flu bug that&#8217;s gone around this season, and along with 1 year old twins taking up a lot of my time, staying [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=134&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You may have noticed this blog has been mostly inactive for a while. A long while. That&#8217;s mostly &#8217;cause I haven&#8217;t been feeling too good lately. I think I&#8217;ve caught every cold and flu bug that&#8217;s gone around this season, and along with 1 year old twins taking up a lot of my time, staying up late to work on Code Toaster or blog a bit has been the last thing on my mind.</p>
<p>I&#8217;m trying to get back into the rhythm of working on Code Toaster a few hours each night; updates should be forthcoming. Bear with me while I get things rolling again.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/134/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/134/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=134&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/03/20/where-have-i-been/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
		<item>
		<title>Ten Plus Two</title>
		<link>http://toastedcode.wordpress.com/2008/01/04/ten-plus-two/</link>
		<comments>http://toastedcode.wordpress.com/2008/01/04/ten-plus-two/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 21:53:29 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2008/01/04/ten-plus-two/</guid>
		<description><![CDATA[Every so often, especially if you work in IT, rather than a fancy-schamncy development shop or somesuch, you&#8217;ll be tasked to do something mind-numbingly boring, like editing a 10 year old Word macro. Or writing CRUD code&#160;by hand. Or writing (the horror!) documentation. In which case it can&#160;become a little difficult to stay focused.&#160;For a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=133&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Every so often, especially if you work in IT, rather than a fancy-schamncy development shop or somesuch, you&#8217;ll be tasked to do something mind-numbingly boring, like editing a 10 year old Word macro. Or writing <a href="http://orafaq.com/wiki/CRUD" target="_blank">CRUD</a> code&nbsp;by hand. Or writing (the horror!) documentation.</p>
<p>In which case it can&nbsp;become a little difficult to stay focused.&nbsp;For a little help in that area, try out this Yahoo widget: <a href="http://widgets.yahoo.com/widgets/tenplustwo" target="_blank">Ten Plus Two</a>&nbsp;(you&#8217;ll of course need the Yahoo widget engine installed).</p>
<p>Ten Plus Two is basically a timer than counts down for 10 minutes (or more, or less, if 10 minutes isn&#8217;t your cup of tea) of work, and then counts down for 2 minutes of rest before repeating the process. Work for 10 minutes, breathe for&nbsp;2 minutes. Your two minutes&nbsp;can be a trip to the bathroom, a quick blog post, or just staring off into space while your eyes rest.&nbsp;Each change is accompanied by a nice little&nbsp;audio cue as well as color indicators &#8211; the background turns red when you&#8217;re supposed to be working, and green when you can take a break.</p>
<p>Granted, this could possibly get aggravating after a while, but it works wonders for keeping me on track while slogging through monotonous work items when I would much rather be browsing <a href="http://www.techmeme.com" target="_blank">TechMeme</a> or reading the latest from <a href="http://www.codinghorror.com/" target="_blank">Coding Horror</a>.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/133/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/133/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/133/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=133&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2008/01/04/ten-plus-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
		<item>
		<title>Volta</title>
		<link>http://toastedcode.wordpress.com/2007/12/17/volta/</link>
		<comments>http://toastedcode.wordpress.com/2007/12/17/volta/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 20:40:22 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2007/12/17/volta/</guid>
		<description><![CDATA[Someone just sent me a link to this new offering, from Microsoft Labs, called Volta. I haven&#8217;t actually tried it out, but if it does what it says it does, it could add a new twist to AJAX-based web development. What it purports to do is to allow you to design a web app&#160;as a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=132&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Someone just sent me a link to <a href="http://labs.live.com/volta/" target="_blank">this new offering</a>, from <a href="http://labs.live.com/" target="_blank">Microsoft Labs</a>, called <em>Volta</em>. I haven&#8217;t actually tried it out, but if it does what it says it does, it could add a new twist to AJAX-based web development.</p>
<p>What it purports to do is to allow you to design a web app&nbsp;as a .Net client application, slice it up into different tiers, and spit out cross-browser JavaScript for the client tier, web services for the server tier, and all the boilerplate code to tie everything together. </p>
<p>At first glance I got all giddy and thought that this could convert <em>any</em> .Net client application to a web-based app, but <a href="http://labs.live.com/volta/docs/targets.aspx" target="_blank">a closer look</a> seems to show that to not be the case. You have to use the Volta libraries and mix and match traditional HTML with your .Net code.</p>
<p>Might be worth a look.&nbsp;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/132/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/132/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/132/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=132&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2007/12/17/volta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
		<item>
		<title>Wonderful Utilities</title>
		<link>http://toastedcode.wordpress.com/2007/11/07/wonderful-utilities/</link>
		<comments>http://toastedcode.wordpress.com/2007/11/07/wonderful-utilities/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 21:20:03 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2007/11/07/wonderful-utilities/</guid>
		<description><![CDATA[Here&#160;are a couple of utilities I use regularly that I consider indispensable and most definitely worth the money. Ultramon &#8211; link If you have a multi-monitor setup, you must run out and purchase this tool right now. This tool has changed my life! OK, maybe not really changed my life, but it has drastically improved [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=131&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here&nbsp;are a couple of utilities I use regularly that I consider indispensable and most definitely worth the money.</p>
<p><strong>Ultramon</strong> &#8211; <a href="http://www.realtimesoft.com/ultramon/" target="_blank">link</a></p>
<p>If you have a multi-monitor setup, you must run out and purchase this tool right now. </p>
<p><em>This tool has changed my life!</em></p>
<p>OK, maybe not really changed my life, but it has drastically improved my satisfaction level when working across multiple monitors.&nbsp;The price is&nbsp;reasonable at only $39.</p>
<p>Just buy it. Or at least download the trial.&nbsp;You&#8217;ll thank me later.</p>
<p><strong>Enso</strong>&nbsp;- <a href="http://www.humanized.com/enso/launcher/" target="_blank">link</a></p>
<p>Humanized.com puts out some interesting products; I&#8217;ve only tried Enso, and it is truly a beautiful thing. It&#8217;s a little hard to explain without actually giving it a whirl, but, in a nutshell, you can teach it to do things when you type short commands, like &#8220;open my documents&#8221;, or &#8220;open intranet&#8221;, or &#8220;define heuristic&#8221;.</p>
<p>If you&#8217;re a developer such as myself, your first thought when you take a look at Enso will probably be something like, &#8220;I could have done that. This isn&#8217;t that hard.&#8221; But after using it for a bit, I&#8217;ve come to think that it&#8217;s too simple and elegant to have been easy to put together. I can open a file, URL, folder, or run a program anywhere on my computer, without searching for it, just by typing a simple intuitive command.</p>
<p>And the price is super&nbsp;reasonable at only $19.99.</p>
<p>Just buy it. Or at least download the trial.&nbsp;You&#8217;ll thank me later.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/131/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/131/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=131&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2007/11/07/wonderful-utilities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
		<item>
		<title>Automagical Update</title>
		<link>http://toastedcode.wordpress.com/2007/11/06/automagical-update/</link>
		<comments>http://toastedcode.wordpress.com/2007/11/06/automagical-update/#comments</comments>
		<pubDate>Tue, 06 Nov 2007 15:46:43 +0000</pubDate>
		<dc:creator>Bob Black</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[Code Toaster]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Utilities]]></category>
		<category><![CDATA[WiX]]></category>

		<guid isPermaLink="false">http://toastedcode.wordpress.com/2007/11/06/automagical-update/</guid>
		<description><![CDATA[I&#8217;m becoming more and more convinced that the best application installer out there is WiX. No, it doesn&#8217;t have a fancy GUI, and yes, it has a crazy nasty learning curve, but once you get into it&#8217;s innards it is awesomely powerful. I&#8217;m doing some work on the next minor version of Code Toaster, which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=130&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m becoming more and more convinced that the best application installer out there is <a href="http://wix.sourceforge.net/">WiX</a>. No, it doesn&#8217;t have a fancy GUI, and yes, it has a crazy nasty learning curve, but once you get into it&#8217;s innards it is awesomely powerful.</p>
<p>I&#8217;m doing some work on the next minor version of Code Toaster, which (hopefully) will include an automatic update feature. After reading (again, for the ka-jillionth time) <a href="http://www.tramontana.co.hu/wix/lesson4.php">this tutorial</a> on creating an update msi with WiX, methinks it should be fairly straightforward. The process will go something like this:</p>
<ol>
<li>When Code Toaster launches, it will download an XML file containing version information.</li>
<li>If there is a new version (as noted in the XML file) Code Toaster will download the msi installer for that update.</li>
<li>Code Toaster will launch the msi and exit.</li>
</ol>
<p>One problem I&#8217;ll have to resolve is how to install an update while Code Toaster is running. The most oft-used and recommended solution for doing auto-updates is to launch your application via a proxy that does the update work, and then launches the application later if no updates are available (or after the update process is complete). But I don&#8217;t like that for a couple of reasons. </p>
<ol>
<li>If there are two executables, CodeToasterProxy.exe and CodeToaster.exe (or whatever), that might confuse a user as to which one to run (users would run CodeToasterProxy to get the update capabilities, not CodeToaster.exe).</li>
<li>Since CodeToaster.exe can be run as a command-line application (to compile/run templates in batch mode, for example), it should be intuitive which exe to run in that scenario. In this case, the user would run CodeToaster.exe, not CodeToasterProxy.exe.</li>
</ol>
<p>I bet you&#8217;re looking at this post cross-eyed after that wonderful explanation, huh? Maybe I should have boiled it down into one reason: confusion. And we sure don&#8217;t want Code Toaster to be confusing.</p>
<p>There is another option : to have Code Toaster check for and download updates, and then launch a separate application to run the msi update. That would keep things intuitive &#8211; you would always launch CodeToaster.exe rather from the command-line or from the Windows GUI, and CodeToaster.exe would remain in control of the update process. The only problem, and a minor one at that, would be the installer app would need to wait until the Code Toaster process had successfully exited before beginning the install. So step-by-step, it would work like this&#8230;</p>
<ol>
<li>CodeToaster.exe launches and downloads an XML file containing information about available updates.</li>
<li>If an update is available, CodeToaster.exe asks the user if they want to go ahead and download and install the update.</li>
<li>If the user wants to install the update, CodeToaster.exe initiates the download.</li>
<li>Once the download is complete, CodeToaster.exe launches the installer application, and then exits.</li>
<li>At this point the installer must wait until CodeToaster.exe has finished exiting, and then launch the update .msi file that was downloaded earlier by CodeToaster.exe.</li>
<li>Once the msiexec process has exited, the installer app can re-launch (the now updated and bodacious than ever) CodeToaster.exe, and way the user goes!</li>
</ol>
<p>Whudya think? I think I like it. That&#8217;s the route I will probably take &#8211; there are a lot of steps but I think it&#8217;s more elegant than having a proxy app between the user and your application. Howsomever, there may be someone out there who knows better &#8211; if so let me know.</p>
<p>On another note, I&#8217;ve noticed that Windows Installer packages are quite difficult to update. You can&#8217;t just run an msi containing a minor (version) update, because you&#8217;ll get an error message that says &#8221;Another version of this product is already installed.&#8221;</p>
<p>Well, <em>duh</em>! I want to <em>update</em> the version that is already installed!!</p>
<p>So you have to run your msi using the following command:</p>
<p>msiexec /i <em>MsiFileName.msi</em> REINSTALL=ALL REINSTALLMODE=vomus</p>
<p>Don&#8217;t ask what &#8220;vomus&#8221; stands for. I couldn&#8217;t find an adequate definition/explanation on Google within my 5-second attention span. But this is another reason to use an automatic update design instead of asking the user to run an update msi manually. Ask a user to do that to update your software and they&#8217;ll hate your guts and call you names.</p>
<p>This, too, is documented in the <a href="http://www.tramontana.co.hu/wix/lesson4.php">WiX tutorial, lesson 4</a>, if you&#8217;re interested in some late night fireside reading while your hunting dog naps beside your overstuffed armchair.</p>
<p>So, looks like I have some work to do.</p>
<p>Onward.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/toastedcode.wordpress.com/130/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/toastedcode.wordpress.com/130/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toastedcode.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toastedcode.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toastedcode.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toastedcode.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toastedcode.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toastedcode.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toastedcode.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toastedcode.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toastedcode.wordpress.com&amp;blog=376021&amp;post=130&amp;subd=toastedcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toastedcode.wordpress.com/2007/11/06/automagical-update/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de9e3560b9def407d84e747a9ac750ce?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brerbob</media:title>
		</media:content>
	</item>
	</channel>
</rss>
