<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Nates Stuff</title><link>http://interactiveasp.net/blogs/natesstuff/default.aspx</link><description>Perspectives on Computing :: Leave a Comment</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NatesStuff" type="application/rss+xml" /><feedburner:emailServiceId>NatesStuff</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Apple Tax?</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/IHOC9YkThQ4/apple-tax.aspx</link><pubDate>Fri, 01 May 2009 23:45:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:644</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=644</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=644</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/05/01/apple-tax.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/05/01/apple-tax.aspx";digg_title = "Apple Tax?";digg_bgcolor = "#FFFFFF";digg_skin = "normal";
// --&gt;&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;
// --&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img height="51" width="150" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MacVsPC_5F00_183B8814.png" align="left" alt="MacVsPC" border="0" title="MacVsPC" style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/p&gt;
&lt;p&gt;We have all seen the TV commercials of Mac and PC standing there while the Mac makes some funny remark about how unreliable PC is or how much more fun Mac is.&amp;nbsp; We all got a good laugh and I even started recording them before realizing that they were available online.&amp;nbsp; I also think that Microsoft had a good laugh, at first.&amp;nbsp; Or at least until it became clear that this one-sided add campaign was really starting to hurt their reputation.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Microsoft, perhaps wanting to fire back started a series of TV commercials that were horribly unfunny!&amp;nbsp; Those were followed by vague &amp;ldquo;I AM PC&amp;rdquo; commercials that weren&amp;rsquo;t meant to be funny but didn&amp;rsquo;t have much substance either.&amp;nbsp; Now Microsoft has started the &amp;ldquo;Buy anything you want for $1,000 or $1,500 &amp;ndash; BINGO! The commercials, in my opinion, are very effective at dispelling the myth that Mac&amp;rsquo;s are better than PC&amp;rsquo;s.&amp;nbsp; This has been dubbed the &amp;ldquo;Mac Tax&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;They aren&amp;rsquo;t convincing everyone though.&amp;nbsp; It was a comment from &lt;a target="_blank" href="http://redmondmag.com/news/"&gt;Redmond Report&lt;/a&gt; newsletter that got me fired up! &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;MAILBAG: THE MAC TAX THAT ISN'T, MORE &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Microsoft has been talking up the so-called "Mac tax" to dissuade &lt;br /&gt;people from moving to Apple. Marc thinks it's a little disingenuous to &lt;br /&gt;call it that: &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"For what it is worth, the 'Mac Tax' is not real! If you want, you &lt;br /&gt;can configure a Dell with specifications virtually identical to any &lt;br /&gt;Macintosh in the Apple product line and come up with very nearly &lt;br /&gt;identical pricing. The catch, of course, is that an Apple Macintosh &lt;br /&gt;is severely overpowered to meet the needs of most folks. Most folks &lt;br /&gt;can meet their computing needs with a $500 to $800 Dell, or they can &lt;br /&gt;go overboard and spend $1,000 and get a 'fully loaded' Dell that will &lt;br /&gt;last them a good five years. Or, they can buy a 'bottom-of-the-line' &lt;br /&gt;MacBook. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The truth is that if Apple could sell as many computers as Dell or &lt;br /&gt;HP, they could afford to sell low-end $500 computers, but because &lt;br /&gt;they don't sell a large enough number of computers to tolerate the &lt;br /&gt;extremely narrow profit margins Dell and HP get on those $500 &lt;br /&gt;systems, Apple simply cannot afford to do so. Dell and HP 'take a &lt;br /&gt;loss' on those entry-level systems but they make it up on very high &lt;br /&gt;volumes and the occasional sale of $1,000-plus systems. All of &lt;br /&gt;Apple's systems must be $1,000-plus systems for them to stay &lt;br /&gt;in business." &lt;br /&gt;-Marc&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well Marc, that sounds like a challenge!&amp;nbsp; I completely disagree with the argument that you can configure a Dell with specifications virtually identical to any Mac and come up with nearly identical pricing.&lt;/p&gt;
&lt;h2&gt;Mac vs. PC Challenge&lt;/h2&gt;
&lt;p&gt;So &lt;a target="_blank" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook?mco=MTE2NTQ"&gt;what does Apple have to offer&lt;/a&gt;? &lt;/p&gt;
&lt;div class="family" id="aos-page"&gt;
&lt;div class="content-group content-full-width"&gt;
&lt;div class="content-section clearfix" id="learn-more-tab-content"&gt;
&lt;div _originalposition="null" _originaloverflow="null" id="learn-more-content" style="position: static"&gt;
&lt;div _originalheight="_originalHeight" _originalwidth="_originalWidth" _originalposition="null" id="learn-more-content_tg_tabcontroller_1" style="z-index: 2; position: static; filter: ; zoom: 1"&gt;
&lt;div id="store-tab-compare"&gt;
&lt;table cellpadding="0" summary="iPod Configurations" cellspacing="0" border="0" class="stand " id="compare-table"&gt;
&lt;thead&gt;
&lt;tr id="model-row"&gt;
&lt;th width="57"&gt;&lt;/th&gt;&lt;th width="152"&gt;&lt;a _managed="true" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook?mco=MTQ2ODE"&gt;&lt;img src="http://a248.e.akamai.net/7/248/2041/1535/store.apple.com/Catalog/regional/amr/macbook/img/compare-mb-white-13.jpg" /&gt;&lt;/a&gt;
&lt;h3&gt;White MacBook&lt;/h3&gt;
&lt;/th&gt;&lt;th width="152"&gt;&lt;a _managed="true" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook?mco=MTQ2ODI"&gt;&lt;img src="http://a248.e.akamai.net/7/248/2041/1535/store.apple.com/Catalog/regional/amr/macbook/img/compare-mb-alum-13.jpg" /&gt;&lt;/a&gt;
&lt;h3&gt;MacBook&lt;/h3&gt;
&lt;/th&gt;&lt;th width="152"&gt;&lt;a _managed="true" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook_air?mco=MTQ2ODM"&gt;&lt;img src="http://a248.e.akamai.net/7/248/2041/1535/store.apple.com/Catalog/regional/amr/macbook/img/compare-mb-air-13.jpg" /&gt;&lt;/a&gt;
&lt;h3&gt;MacBook Air&lt;/h3&gt;
&lt;/th&gt;&lt;th width="152"&gt;&lt;a _managed="true" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook_pro?mco=MTM0Nzk"&gt;&lt;img src="http://a248.e.akamai.net/7/248/2041/1535/store.apple.com/Catalog/regional/amr/macbook/img/compare-mbp-15.jpg" /&gt;&lt;/a&gt;
&lt;h3&gt;MacBook Pro&lt;/h3&gt;
&lt;/th&gt;&lt;th width="153"&gt;&lt;a _managed="true" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook_pro?mco=MTM0ODA"&gt;&lt;img src="http://a248.e.akamai.net/7/248/2041/1535/store.apple.com/Catalog/regional/amr/macbook/img/compare-mbp-17.jpg" /&gt;&lt;/a&gt;
&lt;h3&gt;MacBook Pro&lt;/h3&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr id="price-row"&gt;
&lt;th width="57" class="column1"&gt;Price&lt;/th&gt;
&lt;td width="152" class="divider column2"&gt;
&lt;p&gt;2.0GHz, 120GB &lt;strong&gt;$999.00 &lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="152" class="divider column3"&gt;
&lt;p&gt;2.0GHz, 160GB &lt;strong&gt;$1,299.00 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.4GHz, 250GB &lt;strong&gt;$1,599.00 &lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="152" class="divider column4"&gt;
&lt;p&gt;1.6GHz, 120GB &lt;strong&gt;$1,799.00 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.86GHz, 128GB SSD &lt;strong&gt;$2,499.00 &lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="152" class="divider column5"&gt;
&lt;p&gt;2.4GHz, 250GB &lt;strong&gt;$1,999.00 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.66GHz, 320GB &lt;strong&gt;$2,499.00 &lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="153" class="column6"&gt;
&lt;p&gt;2.66GHz, 320GB &lt;strong&gt;$2,799.00 &lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="display-row"&gt;
&lt;th&gt;Display&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;13.3-inch (viewable) glossy widescreen&lt;/p&gt;
&lt;p&gt;1280 x 800 pixels&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;13.3-inch (viewable) LED-backlit glossy widescreen&lt;/p&gt;
&lt;p&gt;1280 x 800 pixels&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;13.3-inch (viewable) LED-backlit glossy widescreen&lt;/p&gt;
&lt;p&gt;1280 x 800 pixels&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;15.4-inch (viewable) LED-backlit glossy widescreen&lt;/p&gt;
&lt;p&gt;1440 x 900 pixels&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;17-inch (viewable) high-resolution LED-backlit glossy widescreen&lt;/p&gt;
&lt;p&gt;1920 x 1200 pixels&lt;/p&gt;
&lt;p class="option"&gt;Option: Antiglare display&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="processor-row"&gt;
&lt;th&gt;Processor&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Intel Core 2 Duo&lt;/p&gt;
&lt;p&gt;1066MHz frontside bus&lt;/p&gt;
&lt;p&gt;3MB shared L2 cache&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Intel Core 2 Duo&lt;/p&gt;
&lt;p&gt;1066MHz frontside bus&lt;/p&gt;
&lt;p&gt;3MB shared L2 cache&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Intel Core 2 Duo&lt;/p&gt;
&lt;p&gt;1066MHz frontside bus&lt;/p&gt;
&lt;p&gt;6MB shared L2 cache&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Intel Core 2 Duo&lt;/p&gt;
&lt;p&gt;1066MHz frontside bus&lt;/p&gt;
&lt;p&gt;3MB or 6MB shared L2 cache&lt;/p&gt;
&lt;p class="option"&gt;Option: 2.93GHz&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Intel Core 2 Duo&lt;/p&gt;
&lt;p&gt;1066MHz frontside bus&lt;/p&gt;
&lt;p&gt;6MB shared L2 cache&lt;/p&gt;
&lt;p class="option"&gt;Option: 2.93GHz&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="memory-row"&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;2GB (two 1GB) of 667MHz DDR2 SDRAM&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 4GB DDR2&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;2GB (two 1GB) of 1066MHz DDR3 SDRAM&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 4GB DDR3&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;2GB of 1066MHz DDR3 SDRAM (onboard)&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;2GB (two 1GB) or 4GB (two 2GB) of 1066MHz DDR3 SDRAM&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 4GB DDR3&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;4GB (two 2GB) of 1066MHz DDR3 SDRAM&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 8GB DDR3&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="hard-drive-row"&gt;
&lt;th&gt;Hard drive&lt;sup&gt;1&lt;/sup&gt;&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;120GB Serial ATA, &lt;span&gt;5400 rpm&lt;/span&gt;&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 320GB hard drive&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;160GB or 250GB &lt;span&gt;Serial ATA,&lt;/span&gt; 5400 rpm&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 320GB hard drive or 128GB solid-state drive&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;120GB Serial ATA, 4200 rpm or 128GB solid-state drive&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;250GB or 320GB Serial ATA, &lt;span&gt;5400 rpm&lt;/span&gt;&lt;/p&gt;
&lt;p class="option"&gt;Option: Up to 320GB hard drive at 7200 rpm or 128GB solid-state drive&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;320GB Serial ATA, 5400 rpm&lt;/p&gt;
&lt;p class="option"&gt;Option: 320GB hard drive at 7200 rpm, 128GB or 256GB solid state drive&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="battery-row"&gt;
&lt;th&gt;Battery&lt;sup&gt;3&lt;/sup&gt;&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Up to 4.5 hours of &lt;span&gt;wireless productivity&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Up to 5 hours of &lt;span&gt;wireless productivity&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Up to 4.5 hours of &lt;span&gt;wireless productivity&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Up to 5 hours of &lt;span&gt;wireless productivity&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Up to 8 hours of &lt;span&gt;wireless productivity&lt;sup&gt;2&lt;/sup&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="graphics-row"&gt;
&lt;th&gt;Graphics&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;NVIDIA GeForce 9400M with 256MB of shared DDR2 SDRAM&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;NVIDIA GeForce 9400M with 256MB of shared DDR3 SDRAM&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;NVIDIA GeForce 9400M with 256MB of shared DDR3 SDRAM&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;NVIDIA GeForce 9400M and 9600M GT with 256MB or 512MB of GDDR3 memory&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;NVIDIA GeForce 9400M and 9600M GT with 512MB of GDDR3 memory&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="enclosure-row"&gt;
&lt;th&gt;Enclosure&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;Polycarbonate&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan="4" class="divider"&gt;
&lt;p&gt;Precision aluminum unibody&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="size-row"&gt;
&lt;th&gt;Size &lt;span&gt;(H x W x D)&lt;/span&gt;&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;1.08 x 12.78 x 8.92 inches&lt;/p&gt;
&lt;p&gt;2.75 x 32.5 x 22.7 cm&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;0.95 x 12.78 x 8.94 inches&lt;/p&gt;
&lt;p&gt;2.41 x 32.5 x 22.7 cm&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;0.16 to 0.76 x 12.8 x 8.94 inches&lt;/p&gt;
&lt;p&gt;0.4 to 1.94 x 32.5 x 22.7 cm&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;0.95 x 14.35 x 9.82 inches&lt;/p&gt;
&lt;p&gt;2.41 x 36.4 x 24.9 cm&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;0.98 x 15.47 x 10.51 inches&lt;/p&gt;
&lt;p&gt;2.50 x 39.3 x 26.7 cm&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id="weight-row"&gt;
&lt;th&gt;Weight&lt;sup&gt;4&lt;/sup&gt;&lt;/th&gt;
&lt;td class="divider"&gt;
&lt;p&gt;5.0 pounds&lt;/p&gt;
&lt;p&gt;2.27 kg&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;4.5 pounds&lt;/p&gt;
&lt;p&gt;2.04 kg&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;3.0 pounds&lt;/p&gt;
&lt;p&gt;1.36 kg&lt;/p&gt;
&lt;/td&gt;
&lt;td class="divider"&gt;
&lt;p&gt;5.5 pounds&lt;/p&gt;
&lt;p&gt;2.49 kg&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;6.6 pounds&lt;/p&gt;
&lt;p&gt;2.99 kg&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;What does HP have to offer?&lt;/p&gt;
&lt;p&gt;The computer that compares with the entry level 13&amp;rdquo; white MacBook computer:&lt;/p&gt;
&lt;p&gt;Well, this comparison isn&amp;rsquo;t really apples to apples.&amp;nbsp; After all I couldn't find anything with a 13&amp;rdquo; screen (either smaller or bigger).&amp;nbsp; Also, I took upgrades that I think most people would take.&amp;nbsp; Here is what I came up with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HP G60t Laptop running Windows Vista Home Premium x64 &lt;/li&gt;
&lt;li&gt;Intel(R) Core(TM)2 Duo Processor T6400 (2.0GHz) (=) &lt;/li&gt;
&lt;li&gt;3GB DDR2 (+) &lt;/li&gt;
&lt;li&gt;250GB 5400RPM SATA (+) &lt;/li&gt;
&lt;li&gt;256MB NVIDIA GeForce 9200M GE( )= &lt;/li&gt;
&lt;li&gt;16.0" diagonal High Definition HP Brightview Display (1366x768) (+) &lt;/li&gt;
&lt;li&gt;Free HP DESKJET D4360 PRINTER (with mail-in rebate) (+) &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost: $708.99&lt;/strong&gt; with $100 instant rebate.&amp;nbsp; &lt;strong&gt;Savings: $290.01&lt;/strong&gt;; I did get some other free upgrades, but because they always have this kind of thing I keep them. &lt;a target="_blank" href="http://www.shopping.hp.com/webapp/shopping/load_configuration.do?destination=review&amp;amp;email_id=819137&amp;amp;jumpid=in_r329_emailconfig"&gt;Here is the link&lt;/a&gt; (for as long as it lasts) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The (-) indicates that the chosen component was less than it&amp;rsquo;s apple counterpart. The (=) indicates identical hardware.&amp;nbsp; The (+) indicates superior hardware.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DECISION:&lt;/strong&gt; I got a VASTLY superior PC from HP for almost $300 less!&amp;nbsp; The HP notebook even looks nicer than the white apple book.&amp;nbsp; Hands down winner here.&lt;/p&gt;
&lt;p&gt;Because my previous configuration beat the next level up MacBook, I&amp;rsquo;ll move on to the MacBook Air using Dell&amp;rsquo;s website:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://configure.us.dell.com/dellstore/print_summary_details_popup.aspx?~lt=print&amp;amp;c=us&amp;amp;cs=19&amp;amp;fb=1&amp;amp;l=en&amp;amp;oc=DYCWTG2&amp;amp;s=dhs&amp;amp;leadtime=5/12/2009&amp;amp;showleadtime=True"&gt;Dell XPS M1330&lt;/a&gt; running Windows Vista Home Premium x64 &lt;/li&gt;
&lt;li&gt;Intel&amp;reg; Core&amp;trade; 2 Duo T9300 (2.5GHz/800Mhz FSB/6MB cache) (+ &amp;amp; &amp;ndash;) &lt;/li&gt;
&lt;li&gt;3GB Shared Dual Channel DDR2 SDRAM at 667MHz (+ &amp;amp; &amp;ndash;) &lt;/li&gt;
&lt;li&gt;Ultra Performance: 128GB Solid State Drive (=) &lt;/li&gt;
&lt;li&gt;128MB NVIDIA&amp;reg; GeForce&amp;trade; 8400M GS (&amp;ndash;) &lt;/li&gt;
&lt;li&gt;13.3" UltraSharpTM&amp;nbsp; WXGA (1280 x 800) display with TrueLifeTM&amp;nbsp; (available with 2.0 MP camera) (=) &lt;/li&gt;
&lt;li&gt;Weight 3.97 lbs; Size 31.8 x 2.31x 23.8 cm (&amp;ndash;) &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost: $1,444.&amp;nbsp; Savings: $355 / $1,055.&amp;nbsp; &lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This wasn&amp;rsquo;t as quite as good as comparison as I hoped.&amp;nbsp; I needed a Dell Laptop that did the Solid Sate drive (the whole reason for MacBook Air).&amp;nbsp; The processor is faster than both configurations of MacBook but with a slower BUS speed.&amp;nbsp; In mind this makes them a wash but depending on what you are doing it could make a difference one way or another although it&amp;rsquo;s not likely to.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The other was the RAM.&amp;nbsp; I couldn't configure this computer with anything less than 3GB which is 50% more RAM, but again, it&amp;rsquo;s slower RAM so there could be some performance considerations.&amp;nbsp; Most of the time, though, the quantity of RAM beats out the speed of the RAM.&amp;nbsp; It&amp;rsquo;s still many times quicker than virtual memory residing on a disk drive. The graphics card available for the PC was not as good as the one that comes with the MacBook Air. The XPS system came in a bit chunkier in both weight and size.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DECISION:&lt;/strong&gt; If you are in the market for a PC that is powerful and small / light and cost is not much of a consideration then the MacBook is a real contender.&amp;nbsp; I might have done better if I would have gone with Acer who is known for their small computers but I still rather doubt that I&amp;rsquo;d get something as small and powerful.&amp;nbsp; The MacBook Air is the winner for performance and size &amp;ndash; that is if you can overlook the price tag.&lt;/p&gt;
&lt;p&gt;The next comparison is the MacBook Pro series laptops.&amp;nbsp; While shopping at HP here is what I got and how it compares:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HP HDX 18t with Windows Vista Ultimate with Service Pack 1 (64-bit) &lt;/li&gt;
&lt;li&gt;Intel(R) Core(TM)2 Duo Processor T9550 (2.66 GHz) (+ &amp;amp; =) &lt;/li&gt;
&lt;li&gt;4GB DDR2 System Memory (2 Dimm) (-) &lt;/li&gt;
&lt;li&gt;320GB 7200RPM SATA Hard Drive (=) &lt;/li&gt;
&lt;li&gt;512MB NVIDIA GeForce 9600M GT (=) &lt;/li&gt;
&lt;li&gt;18.4" diagonal High Definition HP Ultra BrightView Infinity Display (1920x1080p) (+) &lt;/li&gt;
&lt;li&gt;Blu-Ray ROM with SuperMulti DVD+/-R/RW Double Layer &lt;/li&gt;
&lt;li&gt;HP Integrated HDTV Hybrid Tuner (+) &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost: $1,606.99 Savings: $392.01 / $892.01 / $1,192.01&lt;/strong&gt; Again, &lt;a target="_blank" href="http://www.shopping.hp.com/webapp/shopping/load_configuration.do?destination=review&amp;amp;email_id=819206&amp;amp;jumpid=in_r329_emailconfig"&gt;here is the link&lt;/a&gt; so you can see for yourself. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I didn&amp;rsquo;t bother comparing all three MacBook Pro&amp;rsquo;s separately, the system I built beat even the high end MacBook Pro.&amp;nbsp; This HP system is every bit as good as the MacBook or even better!&amp;nbsp; What are the differences?&amp;nbsp; Again, I had a hard time coming up with comparable memory from the manufacturer. If I wanted that high end stuff, I can still get it on the cheap from &lt;a target="_blank" href="http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&amp;amp;N=2010260381%201309239101&amp;amp;name=DDR3%201066%20%28PC3%208500%29"&gt;New Egg&lt;/a&gt;.&amp;nbsp; I even got some freebies that I didn&amp;rsquo;t expect like a bigger monitor, Blu-Ray DVD-RW combo and an HDTV tuner integrated into the system.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DECISION&lt;/strong&gt;: The HP notebook is a clear winner!&amp;nbsp; If I had the $1,606.99 I would buy the PC right now! PC&amp;rsquo;s are a great deal!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CAVEOTS:&lt;/strong&gt; I wasn&amp;rsquo;t able to weigh in on all aspects of the laptop such as battery life which I have no data from HP or Dell (mostly because it varies greatly between configurations).&amp;nbsp; I also make the assumption that the overall quality of the computer is equivalent.&amp;nbsp; This is probably a true assumption &amp;ndash; all of the PC&amp;rsquo;s had very high ratings from their customers.&amp;nbsp; I also didn&amp;rsquo;t investigate warranty models very carefully so that is left to the buyer to evaluate.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I wouldn't recommend to my parents, grand parents, co-workers, friends, or peers that they choose a Mac over a PC.&amp;nbsp; A Mac is not a better computer by virtue of being made from Apple.&amp;nbsp; You are paying more for a name brand just like anything else.&amp;nbsp; If the software you need to run is Windows based then buy a PC, if it&amp;rsquo;s Mac based then buy a Mac.&amp;nbsp; Simply running Windows in some kind of VM software is not going to give you a very good end-user experience.&amp;nbsp; The &amp;ldquo;Mac Tax&amp;rdquo; is real!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=644" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/IHOC9YkThQ4" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Product+Reviews/default.aspx">Product Reviews</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/News/default.aspx">News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Taxes/default.aspx">Taxes</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/05/01/apple-tax.aspx</feedburner:origLink></item><item><title>Windows XP Mode and Windows Virtual PC</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/XGMKwEbQuV8/windows-xp-mode-and-windows-virtual-pc.aspx</link><pubDate>Tue, 28 Apr 2009 17:48:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:638</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=638</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=638</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/28/windows-xp-mode-and-windows-virtual-pc.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/04/28/windows-xp-mode-and-windows-virtual-pc.aspx";digg_title = "Windows XP Mode and Windows Virtual PC";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/windowslogosmall_5F00_15940582.gif" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="windows-logo-small" border="0" alt="windows-logo-small" align="left" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/windowslogosmall_5F00_thumb_5F00_4E3EAF8F.gif" width="197" height="33" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have been playing with Windows 7 in my VM machine for a few weeks now and have found it to be amazingly fast and lean!&amp;#160; So what will keep people from making the leap from XP to Windows 7? Application and hardware compatibility of course!&amp;#160; Windows has such a large following now days in large part because of it’s commitment to compatibility between versions of windows.&amp;#160; Compatibility is one of the major reasons Windows Vista has been so marginalized.&amp;#160; &lt;/p&gt;  &lt;p&gt;Since Microsoft is not providing a direct upgrade experience from XP to Windows 7, and because Windows 7 is based on Vista technology, it can be quite a sale to get people to convert from Windows XP to Windows 7.&amp;#160; For those in this camp there is some good news.&amp;#160; Last week the Windows Blog team posted a very provocative solution called &lt;a href="http://windowsteamblog.com/blogs/business/archive/2009/04/24/coming-soon-windows-xp-mode-and-windows-virtual-pc.aspx" target="_blank"&gt;Windows XP Mode for Virtual PC&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;Based on the information provided it looks as though they have developed “unity” like features for &lt;a href="http://www.microsoft.com/windows/downloads/virtualpc/default.mspx" target="_blank"&gt;Microsoft Virtual PC&lt;/a&gt;.&amp;#160; This allows a program running under a virtual machine to be moved onto the hosts desktop.&amp;#160; It will look like it is running on the host machine when it is really running under the virtual machine. It can be so transparent that the only way you can tell on the example in the blog post is because of the tool tip on the shortcut.&amp;#160; &lt;a href="http://www.vmware.com/" target="_blank"&gt;VMware&lt;/a&gt; has had this technology for a little while but my experience with it is kind of mixed.&amp;#160; It is really cool to see your app running on say a Mac, but the user experience is not even as good as running the application in the virtual machine directly.&amp;#160; Still, this technology has real promise.&amp;#160; &lt;a href="http://citrix.com/" target="_blank"&gt;Citrix&lt;/a&gt;, for example, bases their business on this type of technology.&amp;#160; Microsoft’s &lt;a href="http://www.msterminalservices.org/articles/Citrix-Effective-Application-Hosting.html" target="_blank"&gt;Terminal Services&lt;/a&gt; even has support for application virtualization. &lt;/p&gt;  &lt;p&gt;For users who only have one or two incompatible applications keeping them from upgrading, this should be a big help!&amp;#160; That in conjunction with the great product Windows 7 is shaping up to be I can see people migrating &lt;em&gt;en masse&lt;/em&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/WindowsVPC7_5F00_2_5F00_23127862_5F00_1D7B57E8.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WindowsVPC7_2_23127862" border="0" alt="WindowsVPC7_2_23127862" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/WindowsVPC7_5F00_2_5F00_23127862_5F00_thumb_5F00_1D9ECBAB.png" width="469" height="295" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;taken from the &lt;a href="http://windowsteamblog.com/blogs/business/archive/2009/04/24/coming-soon-windows-xp-mode-and-windows-virtual-pc.aspx" target="_blank"&gt;original blog post.&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Links:&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://windowsteamblog.com/blogs/business/archive/2009/04/24/coming-soon-windows-xp-mode-and-windows-virtual-pc.aspx" href="http://windowsteamblog.com/blogs/business/archive/2009/04/24/coming-soon-windows-xp-mode-and-windows-virtual-pc.aspx"&gt;http://windowsteamblog.com/blogs/business/archive/2009/04/24/coming-soon-windows-xp-mode-and-windows-virtual-pc.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.microsoft.com/windows/downloads/virtualpc/default.mspx" href="http://www.microsoft.com/windows/downloads/virtualpc/default.mspx"&gt;http://www.microsoft.com/windows/downloads/virtualpc/default.mspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.vmware.com/" href="http://www.vmware.com/"&gt;http://www.vmware.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.msterminalservices.org/articles/Citrix-Effective-Application-Hosting.html" href="http://www.msterminalservices.org/articles/Citrix-Effective-Application-Hosting.html"&gt;http://www.msterminalservices.org/articles/Citrix-Effective-Application-Hosting.html&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=638" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/XGMKwEbQuV8" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Windows/default.aspx">Windows</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Beta+Software/default.aspx">Beta Software</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Virtualization/default.aspx">Virtualization</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/28/windows-xp-mode-and-windows-virtual-pc.aspx</feedburner:origLink></item><item><title>Creating a Silverlight 3 Out Of Browser Application</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/w7EuvMgqJvw/creating-a-silverlight-3-out-of-browser-application.aspx</link><pubDate>Mon, 27 Apr 2009 19:09:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:633</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=633</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=633</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/27/creating-a-silverlight-3-out-of-browser-application.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/04/27/creating-a-silverlight-3-out-of-browser-application.aspx";digg_title = "Creating a Silverlight 3 Out Of Browser Application";digg_bgcolor = "#FFFFFF";digg_skin = "normal";
// --&gt;&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;
// --&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img height="85" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/SilverlightLogoSmall_5F00_7A66F8AF.jpg" align="left" alt="Silverlight Logo Small" border="0" title="Silverlight Logo Small" style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; 2 is great! &lt;a target="_blank" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx"&gt;Silverlight 3&lt;/a&gt; is AWESOME! My first experiences with the beta framework and tools have been overwhelmingly positive.&amp;nbsp; In this post I&amp;rsquo;ll go over my experience creating an application using some of the new features and I&amp;rsquo;ll show how easy it is to make your Silverlight application available offline.&amp;nbsp; To get started you&amp;rsquo;ll need the tools. &lt;a target="_blank" href="http://silverlight.net/GetStarted/"&gt;Download the Silverlight Tools for Visual Studio 2008 SP1&lt;/a&gt; from the official Silverlight website.&amp;nbsp; It is also recommended that you download and install the Silverlight Toolkit from the same site.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;After installing the Silverlight tools open Visual Studio and click &lt;em&gt;File &amp;ndash;&amp;gt; New &amp;ndash;&amp;gt; Project&lt;/em&gt;. Click Silverlight in the project types section and select &lt;em&gt;Silverlight Application&lt;/em&gt; from the Templates group. &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/NewSilverlight3Project_5F00_3311A2BD.png"&gt;&lt;img height="316" width="469" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/NewSilverlight3Project_5F00_thumb_5F00_59738608.png" alt="New Silverlight 3 Project" border="0" title="New Silverlight 3 Project" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;When prompted make sure you&amp;nbsp;check the &lt;em&gt;Host the Silverlight application in a new Web site&lt;/em&gt; checkbox and press the &lt;em&gt;OK&lt;/em&gt; button.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/NewSilverlightApplicationSettings_5F00_06F4A5CC.png"&gt;&lt;img height="316" width="356" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/NewSilverlightApplicationSettings_5F00_thumb_5F00_1F84431C.png" alt="New Silverlight Application Settings" border="0" title="New Silverlight Application Settings" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Once your project comes up we can get started in code.&amp;nbsp; Open the &lt;em&gt;MainPage.xaml&lt;/em&gt; file, open the toolbox and double click &lt;em&gt;TwilightBlueTheme&lt;/em&gt;.&amp;nbsp; This will add some references to our project and update the background of our window.&amp;nbsp; That is how you use a built-in theme.&amp;nbsp; Any tool box item that ends with &lt;em&gt;Theme&lt;/em&gt; will change the look of your application.&lt;/p&gt;
&lt;p&gt;Another great feature of the Silverlight 3 runtime is that we finally have full binding support!&amp;nbsp; The most useful binding feature is binding the value of one control to another.&amp;nbsp; &lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="White"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;twilightBlue&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TwilightBlueTheme &lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="30" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="150" &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="This is my button Fool" 
            &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top" 
            &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Click&lt;/span&gt;&lt;span style="color: blue"&gt;="Button_Click"  /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="tbValue" &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="50" 
               &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;em&gt;{&lt;/em&gt;&lt;/span&gt;&lt;em&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;ElementName&lt;/span&gt;&lt;span style="color: blue"&gt;=slider1, &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;/em&gt;&lt;span style="color: blue"&gt;&lt;em&gt;=Value}&lt;/em&gt;" /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Slider &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="slider1" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="80" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="300" 
            &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="0 0 0 0" &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;="3" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, lets run it.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/FirstRun_5F00_66013324.png"&gt;&lt;img height="316" width="297" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/FirstRun_5F00_thumb_5F00_37A7AD77.png" alt="First Run" border="0" title="First Run" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You can see that when you move the slider we can see it&amp;rsquo;s slider position value in the TextBlock we have on our form.&amp;nbsp; Now that we have our ultra-simple app we want to make it available offline.&amp;nbsp; We do that by opening the &lt;em&gt;Properties\AppManifest.xml&lt;/em&gt; file and add the following:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Deployment.ApplicationIdentity&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ApplicationIdentity 
          &lt;/span&gt;&lt;span style="color: red"&gt;ShortName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Nate Test Application&lt;/span&gt;" 
          &lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Nate Test App&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ApplicationIdentity.Blurb&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;This is a test silverlight 
                        3 application out of the browser.&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ApplicationIdentity.Blurb&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ApplicationIdentity&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Deployment.ApplicationIdentity&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Now run the application again.&amp;nbsp; This time right click the Silverlight app and there is a new option to install the application.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/InstallSilverlight3App_5F00_6528CD3A.png"&gt;&lt;img height="314" width="469" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/InstallSilverlight3App_5F00_thumb_5F00_2FB00B15.png" alt="Install Silverlight 3 App" border="0" title="Install Silverlight 3 App" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You will then get a very simple &amp;ldquo;install&amp;rdquo; dialog.&amp;nbsp; The install process is extremely fast!&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight3ApplicationInstall_5F00_0B1E7D91.png"&gt;&lt;img height="203" width="469" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight3ApplicationInstall_5F00_thumb_5F00_0EBC986E.png" alt="Silverlight 3 Application Install" border="0" title="Silverlight 3 Application Install" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And now we can launch our application from the start menu.&amp;nbsp; Here is what it looks like when it is run outside of the browser.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight3ApplicationRunningOutsideofthebrowser_5F00_6E3558BB.png"&gt;&lt;img height="316" width="420" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight3ApplicationRunningOutsideofthebrowser_5F00_thumb_5F00_6DC925C6.png" alt="Silverlight 3 Application Running Outside of the browser" border="0" title="Silverlight 3 Application Running Outside of the browser" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;To remove the application from your system, just right click to uninstall.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight3ApplicationUninstall_5F00_6D5CF2D1.png"&gt;&lt;img height="201" width="410" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight3ApplicationUninstall_5F00_thumb_5F00_68E6720A.png" alt="Silverlight 3 Application Uninstall" border="0" title="Silverlight 3 Application Uninstall" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;And that is it!&amp;nbsp; Silverlight 3 works very well outside of the browser!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.Silverlight.net"&gt;http://www.Silverlight.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://interactiveasp.net/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx" title="http://interactiveasp.net/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx"&gt;http://interactiveasp.net/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://silverlight.net/GetStarted/" title="http://silverlight.net/GetStarted/"&gt;http://silverlight.net/GetStarted/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=633" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/w7EuvMgqJvw" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Beta+Software/default.aspx">Beta Software</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight+3.0/default.aspx">Silverlight 3.0</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/27/creating-a-silverlight-3-out-of-browser-application.aspx</feedburner:origLink></item><item><title>Windows 8 – A First Glimpse</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/1qoQ0tYZt-s/windows-8-a-first-glimpse.aspx</link><pubDate>Fri, 24 Apr 2009 17:41:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:620</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=620</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=620</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/24/windows-8-a-first-glimpse.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/04/24/windows-8-a-first-glimpse.aspx";digg_title = "Windows 8 – A First Glimpse";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows 8 Logo" border="0" alt="Windows 8 Logo" align="left" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Windows8Logo_5F00_7D2057CC.png" width="129" height="84" /&gt; &lt;/p&gt;  &lt;p&gt;Windows 7 hasn't even been released (Currently RC1) and there is already buzz about Windows 8.&amp;#160; Of course I know that in terms of development Windows 7 is in it’s stabilization phase so naturally the kernel team and perhaps even some others have started on the next generation of Windows software.&amp;#160; I have spent a lot of time on &lt;a href="http://channel9.msdn.com/" target="_blank"&gt;MSDN’s Channel 9&lt;/a&gt; looking at some of the low level design considerations that went into Windows 7 Kernel and there has been some indication that they have already started on the Windows 8 project.&amp;#160; &lt;/p&gt;  &lt;p&gt;This week my &lt;a href="http://mcpmag.com/news/article.asp?editorialsid=1812" target="_blank"&gt;MCPMag.com news flash talked about Windows 8&lt;/a&gt;.&amp;#160; There wasn’t much information to go on other than two job postings for the Windows 8 team and a &lt;a href="http://blogs.technet.com/eileen_brown/archive/2009/04/22/potential-windows-8-design.aspx" target="_blank"&gt;blog post&lt;/a&gt; that included some tantalizing video of possible UI for Windows 8.&amp;#160; This concept design is incredibly cool!&amp;#160; My favorite part is that they completely re-designed Windows Explorer which was in worse need of a makeover than Susan Boyle!&lt;/p&gt;  &lt;p&gt;From what I could tell in the short video, some of the new design concepts included:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;New Windows Explorer Interface- Makes it easier to switch between views (a pain in Vista) and allows you to find the information you need about a file. &lt;/li&gt;    &lt;li&gt;New Start bar and Taskbar- There is already a new taskbar in Windows 7, but I’m not sure if I really like it.&amp;#160; It’s impossible to tell the difference between a program that is running and a quick launch button.&amp;#160;&amp;#160; The new design concept for Windows 8 is obviously based on the Windows 7 design but looked more friendly to use.&amp;#160; My favorite part? You can re-arrange the tabs.&amp;#160; This is really awesome if your OC like I am and expect tabs to be in certain places. The new design focuses on screen real-estate and has a very minimalistic feel to it.&amp;#160; It looks amazing! &lt;/li&gt;    &lt;li&gt;There is a new feature that will allow a shortcut to launch multiple programs at once.&amp;#160; I don’t think I would ever use this but if I were say a customer service person who had to have 10 apps open all at once it might be nice to have this for after I rebooted the machine. &lt;/li&gt;    &lt;li&gt;Multiple current users- It looked from the video like you may be able to quickly switch between user sessions &amp;amp; desktops.&amp;#160; You can kind of do this in Windows XP Pro, but it feels more like you are logging out and logging back in as someone else.&amp;#160; This feature kind of looked like I could switch to a new desktop as easily as I can switch between two running applications. &lt;/li&gt;    &lt;li&gt;The notification area is smaller and sexier!&amp;#160; It is small and looks like most of your nuisance/superfluous notification icons are hidden by default. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here is the Video of the Windows 8 Concept UI:&lt;/p&gt; &lt;object width="400" height="220"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4255076&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4255076&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="220"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;br /&gt;&lt;a href="http://vimeo.com/4255076"&gt;Copenhagen User Experience&lt;/a&gt; from &lt;a href="http://vimeo.com/user1431152"&gt;Copenhagen Concept&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo.&lt;/a&gt;   &lt;p&gt;I think Microsoft has the right concept going with this kind of publicity.&amp;#160; While Windows Vista isn’t a great user experience (It’s pretty, but less usable) it has a lot of enhancements under the hood.&amp;#160; Enhancements that make a big difference to a user like me.&amp;#160; They have learned their lesson from Vista and Windows 7 is all about user experience and some minor enhancements under the hood.&amp;#160; There is no information available about what kind of enhancements are in store for Windows 8 other than we do know that it is still based on the Vista / Windows 7 Kernel.&amp;#160; I just hope that Windows 8 has the right mix of usability improvements, kernel / system improvements, and features that create an ROI (Return On Investment) so it’s easier for businesses to justify the upgrade.&lt;/p&gt;  &lt;p&gt;Here are some screen shots of Windows 8.&amp;#160; I took them from the video in case you didn’t want to watch that.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/FullDesktop_5F00_439D47D5.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Full Desktop" border="0" alt="Full Desktop" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/FullDesktop_5F00_thumb_5F00_37D7DAD6.png" width="504" height="316" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/StartBar_5F00_5DCD8B2C.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Start Bar" border="0" alt="Start Bar" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/StartBar_5F00_thumb_5F00_4C2D7A94.png" width="504" height="316" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/ProgramsMenu_5F00_78D6346D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Programs Menu" border="0" alt="Programs Menu" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/ProgramsMenu_5F00_thumb_5F00_1F647521.png" width="504" height="316" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Explorer_5F00_7347782F.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Explorer" border="0" alt="Explorer" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Explorer_5F00_thumb_5F00_4B9CE806.png" width="504" height="314" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Explorer2_5F00_11ADA51A.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Explorer 2" border="0" alt="Explorer 2" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Explorer2_5F00_thumb_5F00_627BB982.png" width="504" height="314" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/TaskBarPreview_5F00_087169D9.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Task Bar Preview" border="0" alt="Task Bar Preview" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/TaskBarPreview_5F00_thumb_5F00_01420794.png" width="504" height="316" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/NotificationArea_5F00_4752C4A7.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Notification Area" border="0" alt="Notification Area" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/NotificationArea_5F00_thumb_5F00_0D6381BB.png" width="504" height="231" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Scraps_5F00_50CB831D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Scraps" border="0" alt="Scraps" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Scraps_5F00_thumb_5F00_735F9BCB.png" width="504" height="316" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/SwitchUsers_5F00_0B830627.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Switch Users" border="0" alt="Switch Users" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/SwitchUsers_5F00_thumb_5F00_09D23A53.png" width="504" height="314" /&gt;&lt;/a&gt; &lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MovingStartBarduplicate_5F00_6FFE0423.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Moving Start Bar" border="0" alt="Moving Start Bar" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MovingStartBarduplicate_5F00_thumb_5F00_2E8351CA.png" width="504" height="317" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=620" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/1qoQ0tYZt-s" height="1" width="1"/&gt;</description><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/24/windows-8-a-first-glimpse.aspx</feedburner:origLink></item><item><title>Taxed Enough Already (TEA) Party Protests &amp; My Idea for Personal Retirement Accounts</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/kLdYasr-AmE/taxed-enough-already-tea-party-protests-amp-my-idea-for-personal-retirement-accounts.aspx</link><pubDate>Wed, 15 Apr 2009 19:45:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:601</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=601</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=601</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/15/taxed-enough-already-tea-party-protests-amp-my-idea-for-personal-retirement-accounts.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/04/15/taxed-enough-already-tea-party-protests-amp-my-idea-for-personal-retirement-accounts.aspx";digg_title = "Taxed Enough Already (TEA) Party Protests &amp; My Idea for Personal Retirement Accounts";digg_bgcolor = "#FFFFFF";digg_skin = "normal";
// --&gt;&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;
// --&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img height="109" width="142" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Dollarbill_5F00_2183DFA7.jpg" align="left" alt="Dollarbill" border="0" title="Dollarbill" style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" /&gt; One of the headlines on my news feed came across about &lt;a target="_blank" href="http://www.msnbc.msn.com/id/30227452/"&gt;anti-tax &amp;lsquo;tea parties&amp;rsquo; being held across the U.S.&lt;/a&gt; These demonstrations are a form of protest to wasteful government spending.&amp;nbsp; I was quite disappointed that the article included a blurb that in my opinion threatened the neutrality of the article.&amp;nbsp; The paragraph stated that this event &amp;ldquo;[has] been co-opted by the Republican Party.&amp;rdquo;&amp;nbsp; It then goes on to try to discredit the official &lt;a target="_blank" href="http://taxdayteaparty.com/"&gt;Tax Day Tea Party website&lt;/a&gt; by accusing the website owner of being a conservative, as if somehow that is a bad thing. &lt;/p&gt;
&lt;h2&gt;Deficit Spending and the National Debt&lt;/h2&gt;
&lt;p&gt;The protests and the demonstrations aside, I do think it's maybe not so much about taxes but more about Government spending and entitlement programs.&amp;nbsp; People in the forum were quick to note that the 2008 tax year is a President Bush legacy.&amp;nbsp; Former President Bush really ran up a deficit so he is not guilt free.&lt;/p&gt;
&lt;p&gt;Nearly all of the states in the US are prevented from deficit spending by their state constitutions and that means that while states have to make some very difficult decisions in years like 2008 &amp;amp; 2009, they can be very efficient in the recovery years and hopefully build up a reserve of cash for next time.&lt;/p&gt;
&lt;p&gt;The Federal Government, on the other hand, can pretty much incur as much debt as it wants.&amp;nbsp; This is not a good idea and I maintain that the constitution should be amended to prohibit deficit spending.&amp;nbsp; Think of it this way; lets say that we spend $100 billion deficit for healthcare.&amp;nbsp; That is a $100 billion loan, right?&amp;nbsp; Okay, lets be conservative here and say that the US Government gets the amazing rate of 1.5% on that loan.&amp;nbsp; Lets also assume that it&amp;rsquo;s going to take us 10 years to pay that loan back, which is very optimistic as we have to stop borrowing before we pay anything back.&lt;/p&gt;
&lt;p&gt;This means that for the $100 billion we borrowed to pay that bill we will be paying $897,914,997.95 / month or $10.77 billion / year for the next ten years.&amp;nbsp; I actually had to write a special calculator to amortize that amount &amp;ndash; no online calculator could handle it!&amp;nbsp; If we continue deficit spending we will in effect be paying more for less as all of the tax revenue has to be applied toward the debt first and social programs last.&amp;nbsp; Debt is a lot like barnacles on a ship, the more of them you have the more drag you have and it takes more &amp;ldquo;wind&amp;rdquo; to move you places.&amp;nbsp; Get too many and you might as well have stayed on the doc because your not really going anywhere.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Of course we know that our current proposed deficit is $1.7 trillion which works out to be $15 Billion / month or $183 Billion / year.&amp;nbsp; Remember, this is just to pay for one year of deficit spending.&amp;nbsp; &lt;a target="_blank" href="http://www.brillig.com/debt_clock/"&gt;Our current national debt is ~$11.17 trillion dollars, as of 4/15/09&lt;/a&gt;. That means that we are now paying $100 billion / month or $1.2 trillion / year to make payments on the national debt! That is $3.2 billion / day, $137 million / hour, $2.2 million / min, and $38 thousand per second!&amp;nbsp; In 2008 the national debt climbed to 73% of GDP (source: &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Economy_of_the_United_States"&gt;Wikipedia&lt;/a&gt;).&amp;nbsp; The $100 Billion we borrowed for our experiment here may seem like a drop in the bucket compared to the national debt but every little bit counts.&lt;/p&gt;
&lt;p&gt;This country is literally putting bills on the credit card and it&amp;rsquo;s only a matter of time before we run out of money.&amp;nbsp; The longer we wait to fix the problem the more money we end up borrowing and the more painful it is going to be.&amp;nbsp; Imagine if we had to cut out Medicare, Medicaid, and Social Security AND raise taxes?&amp;nbsp; This is not impossible and could happen.&amp;nbsp; The bottom line is that &lt;strong&gt;&lt;em&gt;you can not borrow yourself into prosperity! It is completely irresponsible to borrow money to create social entitlement programs!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Personal Retirement Accounts&lt;/h2&gt;
&lt;p&gt;I don't want Social Security, but I have no choice but to pay it and there is little chance that there will be anything for me to collect when I reach retirement age. Any personal retirement I do save for is taxed so heavily it can't even keep up with inflation!&amp;nbsp; That is absurd!&amp;nbsp; I would really like to opt out of Social Security and put that money in my retirement account tax-free, but even if I have to pay it, I still need to be able to save for my retirement tax-free.&amp;nbsp; Just to keep pace with inflation.&lt;/p&gt;
&lt;p&gt;If I were to reform retirement, I would create something called a Personal Retirement Account (PRA).&amp;nbsp; This would be an alternative to the current Social Security program and would allow people to save for their own retirements tax-free.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The basis would be a function as such: &lt;br /&gt;&lt;em&gt;( (Inflation Base * 100,000) / (Age / Retirement Age) = Maximum Annual Contribution ) &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Inflation Base&lt;/em&gt; is the percentage of inflation since the bill passed.&amp;nbsp; If the bill passed in 2009 and inflation for that year was 3.0% then in 2010 the number is 3.0%, then in 2010 if it rose by 2%, the rate is then 5%.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The idea behind my PRA idea are these simple axioms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The closer to retirement you are the more money you should be allowed to save for retirement.&amp;nbsp; Conversely, the younger you are the less you need to put away as the money should grow over time and is tax free.&lt;/li&gt;
&lt;li&gt;Taxes should not be levied on the sums of money being put into these accounts.&lt;/li&gt;
&lt;li&gt;Taxes should not be levied on the sums of money being withdrawn from these accounts if done so within the bounds of the rules of the accounts.&lt;/li&gt;
&lt;li&gt;The current rate of $100k / year is a comfortable amount of money to live on.&lt;/li&gt;
&lt;li&gt;The amount you are allowed to contribute should be adjusted annually for inflation.&lt;/li&gt;
&lt;li&gt;If you would like to save more money than the maximum annual contribution amount, then taxes should be paid up front (much like an Roth IRA).&lt;/li&gt;
&lt;li&gt;There needs to be some rules to limit risk to accounts of individuals that are closer to retirement.&lt;/li&gt;
&lt;li&gt;Participation in a retirement program becomes mandatory once a worker turns 30.&amp;nbsp; They may either opt for traditional Social Security or Personal Retirement Accounts.&amp;nbsp; The minimum amount for the Personal Retirement Accounts plan is the current social security withholding amount.&lt;/li&gt;
&lt;li&gt;You should be able to switch between the two programs.&amp;nbsp; If you are switching from Social Security then the amount contributed should be put toward the Personal Retirement Account Plan &amp;ndash; no interest accrued.&amp;nbsp; If you switch to Social Security then your account is transferred but you do not get additional benefits and must pay if the value of your account is less than the cumulative Social Security contribution amount.&lt;/li&gt;
&lt;li&gt;Because these retirement accounts are tax-free, the money should be invested more conservatively to mitigate risk.&lt;/li&gt;
&lt;li&gt;Retirement Age should be between 55 and 65 years old.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s in the best interest of our society to have people financially prepared for retirement.&amp;nbsp; This is why the accounts should always remain tax-free.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The problem with entitlement programs, such as Social Security, Medicare, Medicaid, etc. is that they are never run efficiently and the completely eliminate peoples ability to choose something that works better for them.&amp;nbsp; They take away from people the ability to dictate our own futures and supplant it with a poor-at-best replacement. &lt;/p&gt;
&lt;p&gt;I lived in the UK for two years where medical care is fully socialized.&amp;nbsp; I can vouch first hand that while they do not have the same problems as Americans they do envy the quality of American Health Care. Indeed, I believe that the level of health care provided in America is the envy of the world. Rather than fixing problems like ER wait time, cost, etc. nationalization will add to the national deficit and would lower the quality of health care across the board. &lt;/p&gt;
&lt;p&gt;Once we socialize medical care we will never be able to get rid of it, and I don't think most people are going to like what they are going to get.&amp;nbsp; President Obama may not completely nationalize the health care system this go around but he's going to get enough of a foot in the door that the only option for future presidents is going to be full nationalization.&lt;/p&gt;
&lt;p&gt;We need to seek to find answers to social problems that are efficient, accountable, optional, sustainable, and above all, responsible.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=601" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/kLdYasr-AmE" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Politics/default.aspx">Politics</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/News/default.aspx">News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Taxes/default.aspx">Taxes</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/15/taxed-enough-already-tea-party-protests-amp-my-idea-for-personal-retirement-accounts.aspx</feedburner:origLink></item><item><title>I am Certifiable!</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/XCjslb50Z-g/i-am-certifiable.aspx</link><pubDate>Fri, 10 Apr 2009 16:54:12 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:585</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=585</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=585</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/10/i-am-certifiable.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/04/10/i-am-certifiable.aspx";digg_title = "I am Certifiable!";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="CrazyFace" border="0" alt="CrazyFace" align="left" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CrazyFace_5F00_0168171A.jpg" width="100" height="135" /&gt; &lt;/p&gt;  &lt;p&gt;It may come as no surprise to those who know me that I have recently confirmed that I am certifiable!&amp;#160; After all, when you have been doing what I do for as long as I have been doing it it’s hard not to be affected.&amp;#160; It happens to a very large number of people in my field and that number continues to grow.&lt;/p&gt;  &lt;p&gt;Although I have been certified before, after some exhausting battery of examinations, this online examination is nice as I can quickly determine my status even if there is some kind of doubt – just for my minds sake.&lt;/p&gt;  &lt;p&gt;Thanks to Microsoft there is now an online tool to check your IT status as Certifiable!&amp;#160; What, you thought I meant mentally unfit or crazy?&amp;#160; Nope, I’m talking about the uber-geeky Microsoft Certifications.&amp;#160; For some time now they have had the &lt;a href="http://www.microsoft.com/learning/mcpexams/prepare/practicetests.mspx" target="_blank"&gt;Measure Up&lt;/a&gt; practice tests for study preparation, but now there is a new skill-building tool, &lt;a href="http://www.microsoft.com/click/areyoucertifiable/" target="_blank"&gt;Are You Certifiable&lt;/a&gt;.&amp;#160; Rather than a boring, dry, practice test this new site is a game show!&amp;#160; &lt;/p&gt;  &lt;p&gt;This actually makes a lot of sense to me because when I was Microsoft Certification Coordinator for STG I found the best way to get the material to sink-in was to have fun with it.&amp;#160; That usually included some form of study group Jeopardy.&amp;#160; Facts just don’t sink in as well when your mind is not very stimulated and some of the questions can be quite dry.&lt;/p&gt;  &lt;p&gt;Here is a screen shot of me capturing the high score for guests.&amp;#160; It will ask you if you are an IT professional or a Developer and gives you questions relevant to your position.&amp;#160; The questions vary greatly and it takes a very well-rounded skill set to do really well, but it’s fun regardless.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CertificationGameNateAhead_5F00_4E2BDDB0.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Certification Game - Nate Ahead" border="0" alt="Certification Game - Nate Ahead" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CertificationGameNateAhead_5F00_thumb_5F00_782BDBD8.png" width="354" height="206" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;My only critique is that it is not practical to practice for a specific certification test you plan to take because you don’t get to pick which topics or banks of questions you get.&amp;#160; It is a lot of fun and has some great “thinking music”!&amp;#160; Leave a comment if you happen to beat my score.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/FinalScore_5F00_6C961E99.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Final Score" border="0" alt="Final Score" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/FinalScore_5F00_thumb_5F00_56CC363C.png" width="354" height="206" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I would like to also mention that it is built using &lt;a href="http://silverlight.net/" target="_blank"&gt;Silverlight&lt;/a&gt; 2.0 as it is a great example of the power of Silverlight.&amp;#160; &lt;/p&gt;  &lt;h5&gt;Links&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.microsoft.com/click/areyoucertifiable/" href="http://www.microsoft.com/click/areyoucertifiable/"&gt;http://www.microsoft.com/click/areyoucertifiable/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.microsoft.com/learning/mcpexams/prepare/practicetests.mspx" href="http://www.microsoft.com/learning/mcpexams/prepare/practicetests.mspx"&gt;http://www.microsoft.com/learning/mcpexams/prepare/practicetests.mspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://silverlight.net/" href="http://silverlight.net/"&gt;http://silverlight.net/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=585" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/XCjslb50Z-g" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Testing/default.aspx">Testing</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight+2.0/default.aspx">Silverlight 2.0</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Microsoft+Certification/default.aspx">Microsoft Certification</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/04/10/i-am-certifiable.aspx</feedburner:origLink></item><item><title>Exception Handling Philosophy</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/Bya9UXKnpUI/exception-handling-philosophy.aspx</link><pubDate>Mon, 23 Mar 2009 19:40:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:566</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=566</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=566</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/03/23/exception-handling-philosophy.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = "http://interactiveasp.net/blogs/natesstuff/archive/2009/03/23/exception-handling-philosophy.aspx";digg_title = "Exception Handling Philosophy";digg_bgcolor = "#FFFFFF";digg_skin = "normal";
// --&gt;&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;
// --&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;It's time for another episode of Good Idea / Bad Idea:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Good Idea!&lt;/strong&gt; &lt;em&gt;Catching a specific exception from a suspect numeric conversion and showing a polite input error message. &lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Bad Idea!&lt;/strong&gt; &lt;em&gt;Catching all exceptions and "swallowing" the exception.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Okay, so it's not as funny as it is on &lt;em&gt;Animaniacs&lt;/em&gt;, but true none-the-less.&lt;/p&gt;
&lt;h2&gt;Exception Handling in C#&lt;/h2&gt;
&lt;p&gt;In terms of exception handling I am a big fan of "catch it only if you can do something with it" and/or "catch it only if you mean it".&amp;nbsp; Putting a try / catch around every method makes debugging very difficult and can leave your application in an unexpected state.&amp;nbsp; Besides the code is less readable, more complex, and slower performing.&lt;/p&gt;
&lt;p&gt;Before I get in to good practices, lets review some bad ones.&amp;nbsp; The first and most obvious is throwing away exceptions (without regard to what they are).&amp;nbsp; Example:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// Anti-pattern #1: Throw away the exception
&lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;button1_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color: blue"&gt;try &lt;/span&gt;{
        AddPerson(&lt;span style="color: blue"&gt;new &lt;/span&gt;Person() { Name = txtName.Text });
    } &lt;span style="color: blue"&gt;catch &lt;/span&gt;{ }
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another example of what not to do is what I call the &amp;ldquo;catch just because&amp;rdquo; pattern.&amp;nbsp; Example:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;span style="color: green"&gt;// Anti-pattern #2: Needless Try / Catch
&lt;/span&gt;private void &lt;/span&gt;DoStuff(&lt;span style="color: blue"&gt;string &lt;/span&gt;shipping) {
    &lt;span style="color: blue"&gt;try &lt;/span&gt;{
        &lt;span style="color: green"&gt;// Call down to middle tier to do the shipping calculation            
        &lt;/span&gt;&lt;span style="color: blue"&gt;decimal &lt;/span&gt;ShippingCost = MyApi.Shipping.GetShippingCost(orderNum);
    } &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex) {
        &lt;span style="color: blue"&gt;throw &lt;/span&gt;ex;
    }
}&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;span style="color: green"&gt;//  Needless Try / Catch
&lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;button2_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color: blue"&gt;try &lt;/span&gt;{
&lt;span style="color: green"&gt;        // CalculateShipping has it's own Try / Catch; see below.
&lt;/span&gt;        CalculateShipping();
    } &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex) {
        &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(ex.Message);
    }
}
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are multiple problems with the second example.&amp;nbsp; First, there was no reason for &amp;ldquo;DoStuff&amp;rdquo; to catch the exception if all it was going to do was re-throw any exception it encountered.&amp;nbsp; Second, &amp;ldquo;DoStuff&amp;rdquo; is catching any exception rather than limiting the scope to the kinds of exceptions it might expect like &amp;ldquo;Unknown Zipcode&amp;rdquo;, &amp;ldquo;Order not found&amp;rdquo;, etc.&amp;nbsp; Next, the &amp;ldquo;button2_Click&amp;rdquo; is catching any exception and showing the raw message.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Rather than showing the exception message which is only part of the clues given in the exception object you should either show a user-friendly message indicating the kind of error that has taken place and save the exception information for later debugging.&amp;nbsp; Alternatively, you can show ex.ToString() which will show you all information in the exception class.&amp;nbsp; This is very unimpressive for end-user applications but can be acceptable with internal corporate apps and a simple screen shot will give you the information you need to find and take care of the problem.&lt;/p&gt;
&lt;p&gt;Remember, an exception doesn&amp;rsquo;t necessarily mean that there is a bug in the software.&amp;nbsp; If you do show a user an &amp;ldquo;unfriendly&amp;rdquo; exception message they will immediately think that the software has a bug when the issue could be as simple as the network is down or a database is temporarily unavailable.&amp;nbsp; I always recommend taking the time to display user-friendly messages and saving the exception information elsewhere.&lt;/p&gt;
&lt;p&gt;In the next section I will show some good examples on what "layer" to catch and/or re-throw an exception.&lt;/p&gt;
&lt;h3&gt;Presentation Layer&lt;/h3&gt;
&lt;p&gt;Personally I think that any event here should catch any/all expected exceptions and show them in a user-friendly manor.&amp;nbsp; Notice I said "expected exceptions", this could be pretty vague unless you have an design pattern in place for exceptions in your applications so I'd start with that.&amp;nbsp; One way to start is to make some "base" exceptions like "DataException", "ValidationException", "InputException", etc.&amp;nbsp; More specific types of exceptions can be derived from these.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;When do you make a new type of exception?&amp;nbsp; Well, the exception should have the information needed to solve the problem.&amp;nbsp; Stack traces and exception information are like clues; leave your self a breadcrumb trail to follow later.&amp;nbsp; Throwing an ApplicationException because you couldn't connect to the database isn't very helpful.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;It is also acceptable to use pre-defined / framework exception types when appropriate.&amp;nbsp; For example:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;DivideMyObjects(MyObjectType o1, MyOtherObjectType o2)
{
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(o1 == &lt;span style="color: blue"&gt;null &lt;/span&gt;|| o2 == &lt;span style="color: blue"&gt;null&lt;/span&gt;)
        &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NullReferenceException&lt;/span&gt;(
            &lt;span style="color: #a31515"&gt;"The numerator or the denominator cannot be null!"&lt;/span&gt;);

    &lt;span style="color: blue"&gt;if &lt;/span&gt;(o2.Value == 0)
        &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DivideByZeroException&lt;/span&gt;(
            &lt;span style="color: #a31515"&gt;"Denominator may not be zero!"&lt;/span&gt;);

    &lt;span style="color: blue"&gt;if &lt;/span&gt;(o1.Value == &lt;span style="color: blue"&gt;null&lt;/span&gt;)
        &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;(
            &lt;span style="color: #a31515"&gt;"There is no value for the numerator"&lt;/span&gt;);
    ...
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;&lt;/span&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You may notice in the code example above&amp;nbsp;that a null reference may occur organically.&amp;nbsp; I am a strong believer in organic exceptions as good practice.&amp;nbsp;I define an organic exception as an error that is thrown by the&amp;nbsp;Framework.&amp;nbsp;The only exception to that rule is when there isn&amp;rsquo;t enough information from that exception to track down the problem.&amp;nbsp; Remember, you need to leave yourself enough clues that you should be able to know what is wrong from the exception information given rather than expecting users to be able to remember what steps led up to the exception.&amp;nbsp; Few, if any, end users will be able to help you reproduce any particular error.&amp;nbsp; If this can&amp;rsquo;t be accomplished by an organic exception then you may want to re-throw that exception with the appropriate information and/or change the type of the exception to be more appropriate for the callers.&amp;nbsp; &lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// Presentation Layer Good Example
&lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Calculate_Shipping(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color: blue"&gt;try &lt;/span&gt;{
        &lt;span style="color: blue"&gt;decimal &lt;/span&gt;shippingCost = MyApi.Shipping.CalculateShipping(order);
        txtShippingCost.Text = shippingCost.ToString(&lt;span style="color: #a31515"&gt;"C"&lt;/span&gt;);
    } &lt;span style="color: blue"&gt;catch &lt;/span&gt;(UnknownZipcode uzipEx) {
        &lt;span style="color: green"&gt;// Specific
        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(
            &lt;span style="color: #a31515"&gt;"Could not locate shipping information for this zip code!"&lt;/span&gt;);
        btnSave.Enabled = &lt;span style="color: blue"&gt;false&lt;/span&gt;;
    } &lt;span style="color: blue"&gt;catch &lt;/span&gt;(ShippingException shipEx) {
        &lt;span style="color: green"&gt;// Less specific, but still helpful to the user.
        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"Unable to calculate shipping!"
            &lt;/span&gt;+ &lt;span style="color: #2b91af"&gt;Environment&lt;/span&gt;.NewLine +
            shipEx.Message);
        MyLogging.Log(shipEx);
    } &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex) {
        &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(
            &lt;span style="color: #a31515"&gt;"An unknown error has occured, Please report this error"&lt;/span&gt;);
        MyLogging.Log(ex);
        Close();
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In general you are pretty safe catching exceptions in the presentation layer.&amp;nbsp; The only real thing to watch out for here is that your control states don&amp;rsquo;t become invalid because an exception is caught but the event still altered the state.&amp;nbsp; For example, if a call to &amp;ldquo;Calculate_Shipping&amp;rdquo; throws an exception you will want to be careful to invalidate the shipping cost control and disable the &amp;ldquo;save order&amp;rdquo; button.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;You will notice in the code above that I did catch generic exception.&amp;nbsp; The presentation layer is usually okay doing this so long as it is taking adequate measures to protect application integrity.&amp;nbsp; You will notice that I am closing the order form if I get an exception back that that is unknown.&amp;nbsp; Of course this will give you plenty of motivation to make sure you know what kinds of exceptions are expected as end users will generally hate having their order forms close.&amp;nbsp; You may be tempted to leave the form open or take lesser action but it is very important that you keep application integrity.&amp;nbsp; Otherwise you will spend your life chasing down un-reproducible bugs.&lt;/p&gt;
&lt;h3&gt;Middle Layer&lt;/h3&gt;
&lt;p&gt;Most of your code should end up being middle layer code.&amp;nbsp; We want the presentation layer to be as light as possible!&amp;nbsp; The middle layer should act as the API of the application.&amp;nbsp; Anything that the application &amp;ldquo;does&amp;rdquo; this layer should do it either directly or indirectly. In this sense the middle layer needs to be very up front in which exceptions are possible from any given call.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Take for example a method call in the middle layer that inserts a new customer into the database.&amp;nbsp; Because you use the database objects you are exposed to any exceptions that are possible from the objects that you use such as SqlExceptions.&amp;nbsp; You will either need to publish that you are going to allow SqlExceptions to be bubble through this API or you need to catch the expected exceptions from those objects and throw your own brand of exception.&lt;/p&gt;
&lt;p&gt;Here is an example of publishing the exceptions that are known to be thrown:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// Middle Layer Exceptions
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Calculates shipping for a given order
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name="order"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;The order to calculate shipping for&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;the shipping amount applied to the order&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/returns&amp;gt;
/// &amp;lt;exception cref="UnknownZipcode"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Unknown Zip Code / Zip Not Found&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/exception&amp;gt;
/// &amp;lt;exception cref="BadWeightException"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;The weight of the order is zero or unknown&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/exception&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public decimal &lt;/span&gt;CalculateShipping(Order order) {
    ...
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/KnownExceptions_5F00_07D5F276.png"&gt;&lt;img height="185" width="504" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/KnownExceptions_5F00_thumb_5F00_122716D6.png" alt="Known Exceptions" border="0" title="Known Exceptions" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Simply using &lt;a target="_blank" href="http://ndoc.sourceforge.net/" title="NDoc Documentation Generator" class="null"&gt;ndoc&lt;/a&gt; XML style comments will give the consumer of the API enough information to make good decisions regarding the use of exception handling from the intellisense. &lt;/p&gt;
&lt;p&gt;Another thing you should avoid while designing your middle tier is the use of exceptions as &amp;ldquo;message handling&amp;rdquo; in non-exceptional cases.&amp;nbsp; Remember, the reason you are throwing an exception is because something happened that was catastrophic enough that you were unable to continue with the normal flow of the method.&amp;nbsp; I admit that there is still a lot of gray area here.&amp;nbsp; Some of that gray area can be demonstrated in the sample code already shown.&amp;nbsp; For example, rather than throwing an exception in the &amp;ldquo;CalculateShipping&amp;rdquo; method we could refactor so an exception wouldn't be necessary.&amp;nbsp; Anytime this can be done cleanly I usually opt for these types of changes.&amp;nbsp; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Refactor to return a ShippingResult class that contains information about the calculation along with the rate.&amp;nbsp; Such information could include wither it was able to successfully get a shipping rate.&lt;/li&gt;
&lt;li&gt;Create a ValidateShippingAddress method that looks up the address before the calculate shipping is run.&amp;nbsp; It could return true if we know we can get shipping information for that address.&lt;/li&gt;
&lt;li&gt;We could pass back a nullable decimal result.&amp;nbsp; A null return would indicate a failure to retrieve shipping information.&amp;nbsp; We would want to make sure it was clear in our ndoc comments that this is why the value is nullable.&lt;/li&gt;
&lt;li&gt;We could pass pack a zero or negative result.&amp;nbsp; Again, making sure this behavior is documented.&lt;/li&gt;
&lt;li&gt;We could implement the &amp;ldquo;Get Last Error&amp;rdquo; pattern; though at this point I&amp;rsquo;d rather see an exception.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another question I am often asked is &amp;ldquo;When is it appropriate to re-throw an exception&amp;rdquo;.&amp;nbsp; The answer to that questions is, of course, it depends.&amp;nbsp; The next few sections will discuss some of these nuances of this question.&lt;/p&gt;
&lt;h3&gt;Bottom Layer&lt;/h3&gt;
&lt;p&gt;The bottom layer of an application could be a database layer, a Framework of some sort but the philosophy is very different from the middle layer.&amp;nbsp; As the bottom layers deal with primitive classes and data and as such can stick pretty well to exception handling ideals.&amp;nbsp; One of the big differences is that you won&amp;rsquo;t be using nearly as many user defined exception types.&amp;nbsp; It is not taboo to use a user defined type in a Framework layer but it&amp;rsquo;s just likely to be unnecessary.&amp;nbsp; The difficulty here is the exception message that you are going to pass along.&amp;nbsp; There could be any number of middle layer calls that call your method so by nature these messages are going to be far more generic.&amp;nbsp; Generic, however, does not mean it can&amp;rsquo;t be insightful.&amp;nbsp; You should include as much information as possible about the exception and the data that caused the exception.&amp;nbsp; Take the two following exception statements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Invalid DateTime&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;The date &amp;lsquo;4/11/2089&amp;rsquo; is an invalid birth date!&amp;nbsp; The date cannot be in the future!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first exception tells us that there is an invalid date time but other than a stack trace gives us no other information.&amp;nbsp; The second exception is extremely helpful and specific, including as many clues as possible.&amp;nbsp; The user may have entered the value &amp;lsquo;4/11/89&amp;rsquo; and the computer may have just assumed the wrong century. The first error message would cause greater confusion whereas the second, if the user were to see that message, could be helpful.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Of course there are lots of different ideas and philosophies on exception handling so you need to do what makes sense for your project.&amp;nbsp; Simply avoiding the two anti-patterns on the top of this blog will improve your code a lot.&amp;nbsp; &lt;strong&gt;MY ONE LAST PEICE OF ADVIECE IS THAT SOMETIMES YOU REALLY WANT TO USE A DEBUG.ASSERT RATHER THAN AN EXCEPTION!&lt;/strong&gt; The advantage of the assertion is that only debug builds show these messages.&amp;nbsp; This is good for testing scenarios in which you want to be aware of a certain condition but it&amp;rsquo;s not necessarily an exception.&lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/jmstall/archive/2007/02/07/catch-rethrow.aspx"&gt;http://blogs.msdn.com/jmstall/archive/2007/02/07/catch-rethrow.aspx&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=566" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/Bya9UXKnpUI" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Standards+_2F00_+Conventions/default.aspx">Standards / Conventions</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Design+Patterns/default.aspx">Design Patterns</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/03/23/exception-handling-philosophy.aspx</feedburner:origLink></item><item><title>Visual NDepend Blows My Socks Off!</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/8047QnkUwSI/visual-ndepend-blows-my-socks-off.aspx</link><pubDate>Fri, 27 Feb 2009 00:10:23 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:515</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=515</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=515</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/02/26/visual-ndepend-blows-my-socks-off.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Splash_5F00_2B39B8DE.png" target="_blank"&gt;&lt;img title="Splash" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 5px 0px; border-right-width: 0px" height="94" alt="Splash" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Splash_5F00_thumb_5F00_0A25FA9D.png" width="229" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m not easily impressed by even the best of software.&amp;#160; There is usually some little thing that ruins my user experience.&amp;#160; I tell you this so you know that what I say next is something special.&amp;#160; Visual NDepend is AWESOME!&amp;#160; Everything meet or far exceeded my expectations!&amp;#160; If you are not yet running this software, you should be!&amp;#160; This is not one of those ‘nice to have’ pieces of software like you might thing.&amp;#160; This is a must have!&amp;#160; If Microsoft was smart they would do everything they could to package this in with Visual Studio 2010.&amp;#160; &lt;/p&gt;  &lt;p&gt;What does it do? It’s hard to answer that question in a paragraph or two.&amp;#160; The basic answer is that it gives you a set of different representations of your software in such a way that you can understand the architecture and complexity.&amp;#160; This can be a huge help before undertaking large refactor efforts.&amp;#160; It also gives you an idea or the quality of the code based off of some metrics.&amp;#160; This quality score can be a really good indicator of wither your code is going to be maintainable and if it’s not it can help you get it there.&amp;#160; Before I go through the quick walkthrough of the software it’s self I’ll just say this – If you’re not paying attention to code metrics and the maintainability of the code from the earliest stages of development your likely not going to develop code that is easy to maintain.&amp;#160; And as you probably know, software maintenance is usually more than 3/4ths the cost of the software lifecycle.&amp;#160; Therefore, if you can get a build process established early and use a tool like NDepend to keep a close watch on some important metrics I can guarantee you will be creating much higher quality software than you would have otherwise.&lt;/p&gt;  &lt;h2&gt;Installation Experience&lt;/h2&gt;  &lt;p&gt;This is the best kind of install – you simply unzip the files.&amp;#160; I bet you didn’t think I would do a whole section on install when there is nothing to the install.&amp;#160; I suppose if it were any other product there would be a lot under this section.&amp;#160; &lt;/p&gt;  &lt;h2&gt;Analyze a Project&lt;/h2&gt;  &lt;p&gt;The user interface is very intuitive.&amp;#160; I installed integration with Visual Studio 2008 and .NET Reflector with minimal effort and started to analyze my assembly.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analyzing_5F00_3087DDE8.png" target="_blank"&gt;&lt;img title="Analyzing" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="115" alt="Analyzing" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analyzing_5F00_thumb_5F00_73EFDF4A.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MainScreen_5F00_334D92DB.png" target="_blank"&gt;&lt;img title="Main Screen" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="442" alt="Main Screen" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MainScreen_5F00_thumb_5F00_0E4FD262.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It took a while to analyze but this particular assembly is quite large!&amp;#160; It also pulls in any referenced assemblies so the graph can be complete.&amp;#160; It allows you to specify multiple assemblies just in case you have sets of assemblies in the same project that have no direct relationship.&amp;#160; In this case I had a WCF service that would need to be added separately as it’s technically not a direct dependency.&amp;#160; Once the analysis is complete it’s INFORMATION OVERLOAD!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analysis_5F00_4DAD85F2.png" target="_blank"&gt;&lt;img title="Analysis" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="440" alt="Analysis" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analysis_5F00_thumb_5F00_7819B70F.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Results&lt;/h2&gt;  &lt;p&gt;There are six or seven main results to view.&amp;#160; The most obvious is the bubble chart at the top.&amp;#160; This gives you a visual representation of different aspects of the code.&amp;#160; For example it’s currently set to Method level and the metric shown is number of lines of code.&amp;#160; the larger the bubble, the larger the method is in relation to the others.&amp;#160; I can select from Method, Field, Type, Namespace or Assembly.&amp;#160; In addition there are 11 different metrics that you can plot in the bubble chart.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/BubbleChart_5F00_73370353.png" target="_blank"&gt;&lt;img title="Bubble Chart" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="298" alt="Bubble Chart" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/BubbleChart_5F00_thumb_5F00_51D75DB7.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The next thing you notice is the dependency graph.&amp;#160; Unfortunately this project doesn’t have a dependency graph like in my other &lt;a title="Avoiding Circular Dependencies" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx" target="_blank"&gt;blog post&lt;/a&gt;.&amp;#160; Visual Studio makes it really tough to make circular dependencies but it is possible to create them if not all of your projects are loaded into the same solution.&amp;#160; And as I said in the other post, circular dependencies are very bad!&amp;#160; It’s also good to know what references what.&amp;#160; You might be surprised to see what kind of references get worked in over time.&amp;#160; On a recent project the data layer code kept working it’s way up to the UI even though it didn’t belong there.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyGraph_5F00_711A048A.png" target="_blank"&gt;&lt;img title="Dependency Graph" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="613" alt="Dependency Graph" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyGraph_5F00_thumb_5F00_1B8635A8.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The next section is the code metric-centric part. This is my most favorite portion of the results generated and can be a real good indicator of how maintainable a codebase is.&amp;#160; Of course it’s impossible to avoid all complexities in software so you probably can’t have a perfect score with every project but you can use this information to figure out what kinds of habits you have that contribute to un-maintainable code. As you can see from the image below when you select a metric it is highlighted in the bubble chart.&amp;#160; In fact, all of these reports are “active” so anything that is relevant to another will be indicated.&amp;#160; By the way, this application has amazing performance.&amp;#160; I’m pretty sure it’s using WPF under the hood.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CodeMetrics_5F00_08D13BF1.png" target="_blank"&gt;&lt;img title="Code Metrics" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="308" alt="Code Metrics" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CodeMetrics_5F00_thumb_5F00_59331D64.png" width="504" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MethodsTooBig_5F00_383FAABD.png" target="_blank"&gt;&lt;img title="Methods Too Big" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="298" alt="Methods Too Big" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MethodsTooBig_5F00_thumb_5F00_57161E9B.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Another really cool feature is the Dependency Matrix.&amp;#160; This takes some practice to use but it helps identify which pieces of which assemblies access pieces of other assemblies.&amp;#160; Again, great for refactoring efforts and a good indication of how an application is put together.&amp;#160; You may have to stair at the image below for a while to figure out what it’s trying to tell you but after a while it makes perfect sense.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyMatrix_5F00_6F3988F6.png" target="_blank"&gt;&lt;img title="Dependency Matrix" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="Dependency Matrix" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyMatrix_5F00_thumb_5F00_0352A580.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Last, but certainly not least is the comprehensive report compiled into HTML.&amp;#160; This is the kind of thing that I’d love to see emailed to me each day, so I hope it’s easy to put this into a build process.&amp;#160; The report is awesome!&amp;#160; My favorite part of the software and I really like this software.&amp;#160; Below is the screen shot of the table of contents that is generated at the top.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/AnalysisReport_5F00_6D88BD22.png" target="_blank"&gt;&lt;img title="Analysis Report" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="404" alt="Analysis Report" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/AnalysisReport_5F00_thumb_5F00_1A9DA9F1.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The only feature I didn’t get a chance to try is code coverage results.&amp;#160; I would have loved to see that in action!&amp;#160; Too bad I don’t have a project with very good code coverage results and I’d be embarrassed to find out anything in detail about my code coverage.&amp;#160; Of course &lt;a href="http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx" target="_blank"&gt;code coverage isn’t everything&lt;/a&gt; but it is a useful tool when taken into context and can be made more useful with nDepend.&lt;/p&gt;  &lt;p&gt;Overall, I would give this software very high marks!&amp;#160; I can’t wait to make this part of my build process!&amp;#160; It is worth the time and money!&lt;/p&gt;  &lt;h5&gt;Links:&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.ndepend.com/" href="http://www.ndepend.com/"&gt;http://www.ndepend.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx"&gt;http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx"&gt;http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=515" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/8047QnkUwSI" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tools/default.aspx">Tools</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Testing/default.aspx">Testing</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Product+Reviews/default.aspx">Product Reviews</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/02/26/visual-ndepend-blows-my-socks-off.aspx</feedburner:origLink></item><item><title>6 Things I Bet You Didn't Know About Data Binding in WPF</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/KNoSe6ZmbjQ/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx</link><pubDate>Wed, 21 Jan 2009 22:26:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:396</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>15</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=396</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=396</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/21/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx#comments</comments><description>&lt;p&gt;&lt;img height="99" width="99" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/winFX_5F00_3.jpg" align="left" alt="winFX" border="0" style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" /&gt; I fell in love with WPF the first time I saw it in action!&amp;nbsp; WPF is a thing of pure beauty!&amp;nbsp; Anyway, from the second I saw how the data binding worked I knew that there was going to be a lot to figure out there!&amp;nbsp; It also seems as though there is no real data binding expert -- or the experts don't blog too much about it.&amp;nbsp; I created my &lt;a target="_blank" href="http://interactiveasp.net/media/p/23.aspx"&gt;XAML Cheat Sheet&lt;/a&gt; shortly after feeling like I had some kind of grasp on the concept.&amp;nbsp; It is still a great reference for basic bindings, but when you are real serious about binding you'll have to do better than that.&lt;/p&gt;
&lt;p&gt;So I have been working on a project in my spare time called SmartForms 2.0 (more on that later) and I have had to do some very difficult things using bindings.&amp;nbsp; In my previous experience with WPF I would either create a cleaver type converter and/or just give up and set the value/state of the controls in code (eww!).&amp;nbsp; This time is different and I have to make data binding work.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;Example #1&lt;/h2&gt;
&lt;p&gt;Lets say that you need to bind a bool? (nullable boolean) type to a checkbox.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox &lt;/span&gt;&lt;span style="color: red"&gt;IsChecked&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeBooleanField&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Checkbox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox_5F00_2.png"&gt;&lt;img height="68" width="178" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox_5F00_thumb.png" alt="DataBound Checkbox" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You will notice that the checkbox is in a neither checked nor unchecked state.&amp;nbsp; Setting IsThreeState="False" doesn't help you as it is false by default. I want the checkebox to be unchecked by default but have no control over the type or the initialization of the type.&amp;nbsp; Check this out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox &lt;/span&gt;&lt;span style="color: red"&gt;IsChecked&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeBooleanField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;TargetNullValue&lt;/span&gt;&lt;span style="color: blue"&gt;=false}"&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #a31515"&gt;Checkbox&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;And now we have normal looking checkboxes!&amp;nbsp; The best part is that this method doesn't mutate our property.&amp;nbsp; This was exactly what I was looking for!&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox-Fixed_5F00_2.png"&gt;&lt;img height="66" width="164" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox-Fixed_5F00_thumb.png" alt="DataBound Checkbox Fixed" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #2&lt;/h2&gt;
&lt;p&gt;The following XAML is pretty straight forward.&amp;nbsp; It is simply a text box that we expect to put a city into.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;City&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeTextField&lt;/span&gt;&lt;span style="color: blue"&gt;}" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-No-Default_5F00_2.png"&gt;&lt;img height="87" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-No-Default_5F00_thumb.png" alt="Databing Textbox No Default" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;What if the item we are attempting to data bind to is not available.&amp;nbsp; It's not going to be null, the binding will just fail.&amp;nbsp; This should work well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;City&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeTextField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;FallbackValue&lt;/span&gt;&lt;span style="color: blue"&gt;=UNBOUND}" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-Default_5F00_2.png"&gt;&lt;img height="90" width="167" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-Default_5F00_thumb.png" alt="Databing Textbox Default" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #3&lt;/h2&gt;
&lt;p&gt;This is a much more common occurrence.&amp;nbsp; You have a number that you need to format in a textbox.&amp;nbsp; This example shows the decimal value with no real format at all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Cost&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField}" &lt;span style="color: blue"&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Non-Formatted_5F00_2.png"&gt;&lt;img height="100" width="170" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Non-Formatted_5F00_thumb.png" alt="Databing Decimal Non Formatted" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There are a few ways to get the format we desire.&amp;nbsp; The first example uses a static resource:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:System;assembly=mscorlib"&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;String &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="formatStr"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;{0:C}&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;String&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Cost&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;formatStr&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can put the string inline but it looks really funny and for some reason the there has to be a non-whitespace character before the formatting expression which you may not want:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;         &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=Cost: {&lt;/span&gt;0&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;C&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This formats the string to look like "Cost: $1,2398.00".&amp;nbsp; You can see how that could cause lots of confusion and would be undesirable.&amp;nbsp; There is a way we can get the binding to work a little better:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;={}{&lt;/span&gt;0&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;C&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="SomeDecimalField" &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;="{}{0:C}" /&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The result is a nicely formatted output:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Formatted_5F00_2.png"&gt;&lt;img height="99" width="177" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Formatted_5F00_thumb.png" alt="Databing Decimal Formatted" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Notice how the binding was applied? This is how you apply MultiBindings which is the next topic.&lt;/p&gt;
&lt;h2&gt;Example #4&lt;/h2&gt;
&lt;p&gt;What if you want the value of one or more fields to exist in a single binding?&amp;nbsp; That is where MultiBindings shine!&amp;nbsp; Check out this very easy example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;            
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MultiBinding &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;="{}{0}, {1}"&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="LastName" /&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="FirstName" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;MultiBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Results:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Multi-Binding_5F00_2.png"&gt;&lt;img height="99" width="196" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Multi-Binding_5F00_thumb.png" alt="Multi Binding" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #5&lt;/h2&gt;
&lt;p&gt;Validation can happen at the point of binding. This can be handy if the objects you are binding to have logic built in.&amp;nbsp; For example, lets say you have a property for birth date.&amp;nbsp; Obviously the person can not be born in the future!&amp;nbsp; Here is how we avoid such rotten input!&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;birthdate;
&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;BrithDate {
    &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;birthdate; }
    &lt;span style="color: blue"&gt;set &lt;/span&gt;{
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;value &lt;/span&gt;&amp;gt; &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Today)
            &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;(&lt;br /&gt;               &lt;span style="color: #a31515"&gt;"Person can not be born in the future!"&lt;/span&gt;);
        birthdate = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the XAML:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;br /&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Birthdate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;BrithDate&lt;/span&gt;&lt;span style="color: blue"&gt;, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=TwoWay, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=d, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;NotifyOnValidationError&lt;/span&gt;&lt;span style="color: blue"&gt;=true, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;ValidatesOnExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;=true}" /&amp;gt;        
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-No-Error_5F00_4.png"&gt;&lt;img height="99" width="169" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-No-Error_5F00_thumb_5F00_1.png" alt="Binding No Error" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-Error_5F00_4.png"&gt;&lt;img height="103" width="169" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-Error_5F00_thumb_5F00_1.png" alt="Binding Error" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The error can also be styled if required.&amp;nbsp; Shown is the default style (nothing custom).&lt;/p&gt;
&lt;h2&gt;Example #6&lt;/h2&gt;
&lt;p&gt;The last example is for something called PriorityBinding.&amp;nbsp; This is poorly named in my opinion as it would be better called CascadingBinding.&amp;nbsp; The point to PriorityBinding is to name multiple data bindings in order of most desirable to least desirable. This way if the first binding fails, is empty and/or default, another binding can take it's place.&amp;nbsp; You may have to be a little imaginative to think of such a scenario, but this kind of thing could be useful so I'm glad it's there.&amp;nbsp; Just for fun, I am using the IsAsync field as well.&amp;nbsp; This tells WPF to use a thread other than the GUI thread to retrieve this property.&amp;nbsp; This is important for properties that take a long time to return as it will leave your app unresponsive until the value is bound.&amp;nbsp; In the case of this example without that attribute the window will not show until the 5 seconds had elapsed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;fname;
&lt;span style="color: blue"&gt;public string &lt;/span&gt;FirstName {
&lt;span style="color: blue"&gt;     get &lt;/span&gt;{
          &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(5000);
          &lt;span style="color: blue"&gt;return &lt;/span&gt;fname; 
     }
          &lt;span style="color: blue"&gt;set &lt;/span&gt;{ fname = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Xaml:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PriorityBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="LastNameNonExistant" &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: red"&gt;IsAsync&lt;/span&gt;&lt;span style="color: blue"&gt;="True" /&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="FirstName" &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: red"&gt;IsAsync&lt;/span&gt;&lt;span style="color: blue"&gt;="True" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PriorityBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Priority-Binding_5F00_2.png"&gt;&lt;img height="97" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Priority-Binding_5F00_thumb.png" alt="Priority Binding" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Another neat little thing to know is that the Hierarchy for Binding is Binding -&amp;gt; BindingBase -&amp;gt; MarkupExtension -&amp;gt; Object.&amp;nbsp; Unlike much of the rest of the .NET Framework you can actually inherit from any of these classes and provide support for your customized binding needs.&amp;nbsp; That is exactly what I am doing for SmartForms 2.0!&amp;nbsp; I created a binding class called DataBinding and it looks a little like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;db&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:SmartForms2.Binding;assembly=SmartForms2"&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="firstName" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="175" &lt;br /&gt;         &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;db&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataBinding &lt;/span&gt;&lt;span style="color: red"&gt;Data&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;DataSource&lt;/span&gt;&lt;span style="color: blue"&gt;=DB1}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My DataBinding class inherits directly from MarkupExtension so all I had to do is implement the abstract method ProvideValue.&lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc716880.aspx" title="http://msdn.microsoft.com/en-us/library/cc716880.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc716880.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=396" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/KNoSe6ZmbjQ" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/SmartForms/default.aspx">SmartForms</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Data+Binding/default.aspx">Data Binding</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/21/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx</feedburner:origLink></item><item><title>Understanding Lambda Expressions</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/TIIVUg5EdRI/understanding-lambda-expressions.aspx</link><pubDate>Tue, 20 Jan 2009 20:20:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:391</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=391</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=391</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/20/understanding-lambda-expressions.aspx#comments</comments><description>&lt;p&gt;This post has been sitting in my drafts for months!&amp;nbsp; Because my friend Phil just posted his &lt;a target="_blank" href="http://interactiveasp.net/blogs/spgilmore/archive/2009/01/09/lambda-expressions-tutorial-for-c-and-visual-studio-2008.aspx"&gt;post on Lambda Expressions&lt;/a&gt; I'll simply link to his post and present the rest of this as supplemental examples. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="color: green"&gt;// Delegates&lt;br /&gt;&lt;span style="color: green"&gt;// My Blog Engine is having trouble showing these so there may be some extra spaces&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public delegate &lt;/span&gt;&lt;span style="color: #000000;"&gt;IntMathExpression (&lt;span style="color: blue"&gt;int &lt;/span&gt;x, &lt;span style="color: blue"&gt;int &lt;/span&gt;y);&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #0000ff;"&gt;public delegate &lt;/span&gt;&lt;span style="color: #000000;"&gt;IntMathExpressionSingle (&lt;span style="color: blue"&gt;int &lt;/span&gt;x);&lt;br /&gt;&lt;/span&gt;public delegate &lt;/span&gt;&lt;span style="color: #000000;"&gt;FloatMathExpression (&lt;span style="color: blue"&gt;float &lt;/span&gt;x, &lt;span style="color: blue"&gt;float &lt;/span&gt;y);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// Basic Lamda Expression
&lt;/span&gt;IntMathExpression a = (&lt;span style="color: blue"&gt;int &lt;/span&gt;x, &lt;span style="color: blue"&gt;int &lt;/span&gt;y) =&amp;gt; x * y;
IntMathExpression b = (&lt;span style="color: blue"&gt;int &lt;/span&gt;alpha, &lt;span style="color: blue"&gt;int &lt;/span&gt;brovo) =&amp;gt; alpha * brovo;
IntMathExpressionSingle c = (&lt;span style="color: blue"&gt;int &lt;/span&gt;x) =&amp;gt; x * x;

&lt;span style="color: green"&gt;// "such that" =&amp;gt; 
// Parameters       =&amp;gt; function body
// (param1, param2) =&amp;gt; param1 + param2

// Lamda Expression using Type Inference
&lt;/span&gt;FloatMathExpression d = (x, y) =&amp;gt; x + 3.14f * y;
&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;span style="color: #008000;"&gt;// There is usually no need for custom delegates&lt;br /&gt;&lt;/span&gt;Func&amp;lt;&lt;span style="color: blue"&gt;float&lt;/span&gt;, &lt;span style="color: blue"&gt;float&lt;/span&gt;, &lt;span style="color: blue"&gt;float&lt;/span&gt;&amp;gt; e = (x, y) =&amp;gt; x * 100.0f + y;

&lt;span style="color: green"&gt;// Example using a lamda expression
&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; primes = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;() { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101 };
&lt;span style="color: blue"&gt;var &lt;/span&gt;p = primes.Where( prime =&amp;gt; prime.ToString().EndsWith( &lt;span style="color: #a31515"&gt;"3" &lt;/span&gt;) );

&lt;span style="color: green"&gt;// Deferred Execution
&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;i &lt;span style="color: blue"&gt;in &lt;/span&gt;p) {
    MessageBox.Show(i.ToString());
}

&lt;span style="color: green"&gt;// Query Expression Format
&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;p2 = &lt;span style="color: blue"&gt;from &lt;/span&gt;prime &lt;span style="color: blue"&gt;in &lt;/span&gt;primes
         &lt;span style="color: blue"&gt;where &lt;/span&gt;prime.ToString().EndsWith(&lt;span style="color: #a31515"&gt;"3"&lt;/span&gt;)
         &lt;span style="color: blue"&gt;select &lt;/span&gt;prime;

&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; results = p2.ToList();

&lt;span style="color: green"&gt;// Lamda Expressions mixed with Extension Methods
&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt; str = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;() { &lt;span style="color: #a31515"&gt;"The Lord of the Rings"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"Star Wars, Eposode III"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"Ratatouille" &lt;/span&gt;};

&lt;span style="color: blue"&gt;var &lt;/span&gt;p3 = &lt;span style="color: blue"&gt;from &lt;/span&gt;movie &lt;span style="color: blue"&gt;in &lt;/span&gt;str
         &lt;span style="color: blue"&gt;where &lt;/span&gt;movie.CountVowels() &amp;gt; 5
         &lt;span style="color: blue"&gt;select &lt;/span&gt;movie;

&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt; movieResults = p3.ToList();&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=391" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/TIIVUg5EdRI" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/C_2300_+3.0/default.aspx">C# 3.0</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/LINQ/default.aspx">LINQ</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/20/understanding-lambda-expressions.aspx</feedburner:origLink></item><item><title>Booing the Former President on Inauguration Day Shows Very Poor Taste!</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/iwc6mv6rO94/booing-the-former-president-on-inauguration-day-shows-very-poor-taste.aspx</link><pubDate>Tue, 20 Jan 2009 20:11:35 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:390</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=390</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=390</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/20/booing-the-former-president-on-inauguration-day-shows-very-poor-taste.aspx#comments</comments><description>&lt;p&gt;There are things that people do that are in poor taste.&amp;nbsp; Some things that come to mind is scavenging at the dump (yeah, I saw this guy do that one time), yelling at the waitress for onions on your burger,&amp;nbsp; or leaving the lavatory without property sanitizing your hands.&amp;nbsp; If you do any of those things you are likely guilty of poor taste.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Now, I don't really like Bush nor do I like Obama but I do show proper respect to both of these individuals.&amp;nbsp; Being a Republican without a party I tend to starkly disagree with much of President Obama's platform.&amp;nbsp; I understand that many people have a lot of pent up emotion and anger toward the decisions the previous administration has made.&amp;nbsp; Personally I have much of it toward both former President Bush and President Obama, but there is absolutely no way I would ever boo either of them at the inaugural ceremony!&amp;nbsp; Apparently many of those in attendance choose to boo anytime President Bush and Vice President  Cheney where shown on the screen.&amp;nbsp; Having recently undergone back surgery, Vice President Cheney was in a wheel chair for heavens sakes!&amp;nbsp; &lt;/p&gt; &lt;p&gt;I have personally never been to an inauguration, but I should think that the kind of patriotic atmosphere that exists would prohibit such disgustingly undignified acts.&amp;nbsp; To those who choose to boo, you have none of my respect!&amp;nbsp; I place you below the people who use profane language, below people who put gum under restaurant tables, below people who throw lit cigarettes out the window, and even below people spit on the ground while indoors.&amp;nbsp; You people have no sense of taste and could never earn respect from anyone who does.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=390" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/iwc6mv6rO94" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Mindless+Rambling/default.aspx">Mindless Rambling</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Politics/default.aspx">Politics</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/20/booing-the-former-president-on-inauguration-day-shows-very-poor-taste.aspx</feedburner:origLink></item><item><title>Time is running out to download Windows 7 Beta</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/rDWS6TwtdLQ/time-is-running-out-to-download-windows-7-beta.aspx</link><pubDate>Wed, 14 Jan 2009 21:05:36 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:379</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=379</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=379</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/14/time-is-running-out-to-download-windows-7-beta.aspx#comments</comments><description>&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="48" alt="logo_windows" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/logo_5F00_windows_5F00_3.jpg" width="168" align="left" border="0"&gt; There have been a lot of buzz around Windows 7 lately.&amp;nbsp; Most people plan to migrate from XP straight to Windows 7, skipping Vista altogether!&amp;nbsp; Personally I have really liked Vista.&amp;nbsp; The only real issue I had is it wouldn't run a really old game that I used to play on Windows XP.&amp;nbsp; Considering the game was developed for Windows 98 I am pretty impressed it ran on XP!&amp;nbsp; I also &lt;strong&gt;really&lt;/strong&gt; like the idea that most of my programs are not running with Administrator permissions.&amp;nbsp; I also must admit that I purchased hardware specifically geared toward Vista compatibility.&amp;nbsp; I also switched to 64 bit because 3GB of RAM just isn't enough for me, but that would have been independent of XP or Vista.&lt;/p&gt; &lt;p&gt;I've installed a copy of Windows 7 64-bit on a virtual machine.&amp;nbsp; To me it looks and feels just like Vista.&amp;nbsp; I was impressed that the memory foot-print was much smaller but a recent fresh install of Vista wasn't too much larger.&amp;nbsp; It also featured an improved installer and some new features.&amp;nbsp; If someone can tell me why it wants to make a 100MB partition and what that is used for please leave a comment here.&lt;/p&gt; &lt;p&gt;Microsoft has decided that it's better to have more eyes on something than less so they have made Windows 7 Beta 1 an open invitation.&amp;nbsp; The caveat is that the download link is only valid until (or so I am told) the 24th of Jan 09.&amp;nbsp; So if you think you may want to tinker you better get downloading!&amp;nbsp; Especially since the download servers have been saturated since the beta was made public.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/windows/windows-7/beta-download.aspx" target="_blank"&gt;Download Windows 7 Beta 1&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=379" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/rDWS6TwtdLQ" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Windows/default.aspx">Windows</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Beta+Software/default.aspx">Beta Software</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Windows+7/default.aspx">Windows 7</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/14/time-is-running-out-to-download-windows-7-beta.aspx</feedburner:origLink></item><item><title>Silverlight 3 Announced</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/X5k9jQHwSd0/silverlight-3-announced.aspx</link><pubDate>Thu, 18 Dec 2008 19:42:05 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:322</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=322</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=322</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx#comments</comments><description>&lt;p&gt;This &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx" target="_blank"&gt;announcement&lt;/a&gt; on Scott Gu's blog touts the success of the launch of Silverlight 2.0 and announces Silverlight 3.0.&amp;nbsp; Out of the success stories noted on the blog one of the coolest applications is the new Netflix player!&amp;nbsp; Having worked only a little in Silverlight but a lot in WPF I have been very disappointed with the lack of databinding in Silverlight 2.0! It sounds like I am not alone in this line of thinking so Silverlight 3.0 promises to fix a lot of that.&amp;nbsp; Another great feature is hardware acceleration (using OpenGL?) which would be really sweet!&amp;nbsp; These tools should be available early next year.&lt;/p&gt; &lt;p&gt;Here is a screen shot (taken from Scott's Blog):&lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/vs_5F00_2.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="364" alt="vs" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/vs_5F00_thumb.png" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I really hope that they bring WPF and Silverlight more in line with each other -- increasing capability and compatibility!&amp;nbsp; It's ridiculous to think that we have three different but strikingly similar tools that don't interop!&amp;nbsp; Of course the three being WPF, Silverlight and MCE Media Center.&lt;/p&gt; &lt;h5&gt;Links:&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx" href="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=322" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/X5k9jQHwSd0" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Site+News/default.aspx">Site News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Beta+Software/default.aspx">Beta Software</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight+3.0/default.aspx">Silverlight 3.0</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Silverlight+2.0/default.aspx">Silverlight 2.0</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx</feedburner:origLink></item><item><title>7-Layer Bean Dip</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/6Yqq0lpCusM/7-layer-bean-dip.aspx</link><pubDate>Fri, 12 Dec 2008 21:01:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:264</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=264</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=264</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2008/12/12/7-layer-bean-dip.aspx#comments</comments><description>&lt;p&gt;I know this is a little off topic for my blog as I only usually blog about technical stuff, but I LOVE 7-layer bean dip!&amp;nbsp; I have been "perfecting" the recipe ever since I've been married and I have a pretty good recipe on my hands.&amp;nbsp; Of course many of these ideas are not my own but rather borrowed, but I don't know of anyone else that does this combination.&amp;nbsp; My recipe is based on the principal that the dip should never break a chip and that you should be able to get something from all seven layers in each bite.&lt;/p&gt;
&lt;h3&gt;Shopping List&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Refried Beans - Get the good quality, name-brand beans!&amp;nbsp; You can really taste a difference if you don't.&lt;/li&gt;
&lt;li&gt;Sour Cream - Small&lt;/li&gt;
&lt;li&gt;Taco Seasoning&lt;/li&gt;
&lt;li&gt;Pace Salsa&lt;/li&gt;
&lt;li&gt;1 can medium or small olives&lt;/li&gt;
&lt;li&gt;1 Firm Avocado&lt;/li&gt;
&lt;li&gt;2 Firm Medium Roma Tomatoes&lt;/li&gt;
&lt;li&gt;1 pkg Cheddar Pizza Cheese (or a block of Cheddar will do)&lt;/li&gt;
&lt;li&gt;5 green onions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Preparation&lt;/h3&gt;
&lt;p&gt;Open the can of beans and dump into a medium mixing bowl.&amp;nbsp; We want to "thin" out the refried beans a little bit.&amp;nbsp; I like to use Salsa!&amp;nbsp; Add about 1/4 cup salsa to the beans and mix thoroughly.&amp;nbsp; Add more Salsa if needed to get the beans to a soft but "stiff" (not runny) texture. I consider this to be an original idea but I am really not sure if I was the first to think of this. Spread the beans evenly in an 8x10 casserole dish.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7181.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7181_5F00_thumb.jpg" alt="DSCF7181" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7182.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7182_5F00_thumb.jpg" alt="DSCF7182" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Open up the container of sour cream and empty into a smaller mixing bowl.&amp;nbsp; Add about 1 Table spoon of taco seasoning (half a regular package).&amp;nbsp; Mix and spread thinly and carefully on top of the beans.&amp;nbsp; Make sure the sour cream is not "too deep" or "too thin" in places.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7183.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7183_5F00_thumb.jpg" alt="DSCF7183" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7184.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7184_5F00_thumb.jpg" alt="DSCF7184" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Open the can of olives and cut them into ringlets.&amp;nbsp; I prefer to use smaller olives as they usually have better taste, are firmer, stay fresh longer, and allow people to get a ringlet of olive in every bite.&amp;nbsp; They do sell cans of "pre-cut" olives and you can use them but these are no where near as good as quality!&amp;nbsp; Hand-place the ringlets of olives on top of the sour cream.&amp;nbsp; It's important to hand place these because their shape can make the dip uneven looking.&amp;nbsp; Also the olives form a moisture barrier between the layers that keeps keep the dip fresh longer.&amp;nbsp; It is also important to make sure the ringlets are completely dry before applying to the dip.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7185.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7185_5F00_thumb.jpg" alt="DSCF7185" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Next we want to chop the avocado into little chunks.&amp;nbsp; The avocado needs to be a bit firm (usually a day or so before ripe) or the dip will not keep for long.&amp;nbsp; Also, in the context of the dip pre-ripe avocado tastes better than fully-ripe avocado.&amp;nbsp; Also, I always prefer fresh avocado to guacamole.&amp;nbsp; Sprinkle the pieces of avocado onto the dip and salt.&amp;nbsp; The salt will improve the flavor and help the dip keep.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7186.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7186_5F00_thumb.jpg" alt="DSCF7186" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The tomatoes come next.&amp;nbsp; Quarter the tomatoes top-wise and remove the "tasty slimy" inner parts of each quarter (shown below).&amp;nbsp; The insides of a tomatoes add too much moisture to the dip so they have to go!&amp;nbsp; They also don't stay fresh for long.&amp;nbsp; Chop the remaining bits of the tomato and sprinkle evenly onto the avocado.&amp;nbsp; Salt again.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7187.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7187_5F00_thumb.jpg" alt="DSCF7187" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7189.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7189_5F00_thumb.jpg" alt="DSCF7189" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Next comes the cheese!&amp;nbsp; The pizza cheese is dry, stays fresh a long time and is the right flavor for the dip.&amp;nbsp; If you do not have the packaged cheese you can grate cheddar cheese or a similar flavor.&amp;nbsp; When grating remember to use the "small" grater to make smaller diameter cheese threads.&amp;nbsp; Also don't press the cheese into the grater very hard as that tends to create longer threads when we want short ones.&amp;nbsp; Spread the cheese evenly.&amp;nbsp; You can use as much or as little as you like but I like to use a whole package.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7191.jpg" class="null"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7191_5F00_thumb.jpg" alt="DSCF7191" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Green onions are optional.&amp;nbsp; I like them but they add a very strong smell!&amp;nbsp; If you are going to use them chop them into ringlets and apply lightly to the top.&amp;nbsp; After the dip is finished keep covered in the refrigerator.&amp;nbsp; If made and kept properly it will last 3-4 days or more.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7195.jpg"&gt;&lt;img border="0" width="244" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DSCF7195_5F00_thumb.jpg" alt="DSCF7195" height="184" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Personally I think it's better if you can serve it fresh, but if you made it the night before a party then let it "warm up" by letting it sit out of the fridge for 10-20 min's before serving.&lt;/p&gt;
&lt;p&gt;Give it a try and let me know what you think.&amp;nbsp; If you have any of your own recipe tweaks let me know about it.&amp;nbsp; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=264" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/6Yqq0lpCusM" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Misc/default.aspx">Misc</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2008/12/12/7-layer-bean-dip.aspx</feedburner:origLink></item><item><title>Great WPF Editor</title><link>http://feedproxy.google.com/~r/NatesStuff/~3/z6tqUC7MgvI/great-wpf-editor.aspx</link><pubDate>Tue, 09 Dec 2008 16:48:12 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:252</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=252</wfw:commentRss><wfw:comment>http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=252</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2008/12/09/great-wpf-editor.aspx#comments</comments><description>&lt;p&gt;There is Expression Blend, Visual Studio, XamlPad that we are all aware of and use on a regular biases for creating our XAML.&amp;nbsp; One that I am adding to the top of my XAML editor list is Kaxaml!&amp;nbsp; This is the lightest weight most useful XAML editor I have ever seen!&amp;nbsp; It's got a great WPF/Blend look and is light and fast.&amp;nbsp; No more waiting 10-30 seconds for Visual Studio to fail to load your XAML documents!&amp;nbsp; If there were a way to replace the Visual Studio editor with this I would totally do it!&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/kaxaml_5F00_screenshot_5F00_2.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="362" alt="kaxaml_screenshot" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/kaxaml_5F00_screenshot_5F00_thumb.jpg" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Unlike Blend it has code insight.&amp;nbsp; Unlike Visual Studio 2008 it is fast and functional!&amp;nbsp; My favorite feature is the XAML Scrubber which will "pretty up" your XAML by organizing the tags and attributes.&amp;nbsp; It will even put the most important attributes at the start of the tag.&amp;nbsp; It removes much of the pressure of writing XAML!&lt;/p&gt; &lt;p&gt;Hopefully some future versions will include a visual tree and perhaps even a feature where you can click on an click on an object and be taken to the applicable part in the XAML.&amp;nbsp; The XAML Scrubber only uses spaces and I am a tab guy -- oh how I wish it supported tabs!&amp;nbsp; Also, I noticed that once I added an event to a control it said I had to compile the XAML -- not sure what that means.&amp;nbsp; That means it's probably mostly useful for creating the user interface before you start hooking code into it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;If you need a good place to hammer out some design -- this may be your best bet!&amp;nbsp; &lt;/p&gt; &lt;h5&gt;Links:&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://kaxaml.com/" href="http://kaxaml.com/"&gt;http://kaxaml.com/&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="http://labs.nerdplusart.com/#Kaxaml" href="http://labs.nerdplusart.com/#Kaxaml"&gt;http://labs.nerdplusart.com/#Kaxaml&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="http://codeplex.com/Kaxaml" href="http://codeplex.com/Kaxaml"&gt;http://codeplex.com/Kaxaml&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=252" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/NatesStuff/~4/z6tqUC7MgvI" height="1" width="1"/&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tools/default.aspx">Tools</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Product+Reviews/default.aspx">Product Reviews</category><feedburner:origLink>http://interactiveasp.net/blogs/natesstuff/archive/2008/12/09/great-wpf-editor.aspx</feedburner:origLink></item></channel></rss>
