<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Michael Flanakin's Weblog</title><link>http://michaelflanakin.com</link><description>Random thoughts for and about the software development community</description><ttl>60</ttl><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.michaelflanakin.com/flanakin" /><feedburner:info uri="flanakin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>38.806163</geo:lat><geo:long>-77.051398</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><image><url>http://www.michaelflanakin.com/Portals/michaelflanakin.com/Images/MichaelFlanakin.jpg</url><title>Michael Flanakin</title></image><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1107/Boot-to-VHD-Create-VHD-from-GUI.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1107</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1107&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Boot to VHD: Create VHD from GUI</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/wDBzTzuSs7w/Boot-to-VHD-Create-VHD-from-GUI.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Windows 7" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/Weblog/2008/Windows7logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;I've mentioned &lt;a href="http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1098/Boot-to-VHD-Create-VHD-from-Command-Line.aspx"&gt;how to create a new VHD from the command line&lt;/a&gt;, now let me mention how you can create a new VHD from the Windows GUI.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Open Computer Management (&lt;strong&gt;&lt;font color="#0000ff"&gt;Start &amp;gt; &lt;u&gt;R&lt;/u&gt;un… &amp;gt; compmgmt.msc&lt;/font&gt;&lt;/strong&gt;)&lt;/li&gt;
    &lt;li&gt;In the left pane, select &lt;strong&gt;&lt;font color="#0000ff"&gt;Storage &amp;gt; Disk Management&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Right-click &lt;strong&gt;&lt;font color="#0000ff"&gt;Disk Management&lt;/font&gt;&lt;/strong&gt;, click &lt;strong&gt;&lt;font color="#0000ff"&gt;Create VHD&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Specify VHD settings and click &lt;strong&gt;&lt;font color="#0000ff"&gt;OK&lt;/font&gt;&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Location &lt;/strong&gt;-- the path where you want to save the VHD&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Size &lt;/strong&gt;-- specify a size smaller than what's available on your system&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Format &lt;/strong&gt;-- choose dynamic sizing to slowly grow to the full disk size (what I'd recommend) or fixed, if you want to just allot the space outright and avoid potential out-of-space problems&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;In the main, center pane, right-click the label on the left for the new, unknown/unallocated disk, click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;I&lt;/u&gt;nitialize Disk&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;OK&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;In the main, center pane, right-click the main disk space visualization, click &lt;strong&gt;&lt;font color="#0000ff"&gt;New S&lt;em&gt;i&lt;/em&gt;mple Volume...&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Specify a volume label, click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;F&lt;/u&gt;inish&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Put Win7 or Server 2008 R2 DVD or &lt;a href="http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1095/Boot-from-USB-to-Install-Windows-7.aspx"&gt;bootable USB drive&lt;/a&gt; in&lt;/li&gt;
    &lt;li&gt;Restart your computer&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;You'll need to be sure you can boot using the necessary device in BIOS settings (obviously)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Press any key to boot from CD or DVD&lt;/li&gt;
    &lt;li&gt;When the Install Windows screen is shown, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Shift+F10&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;d:&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;diskpart&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;select vdisk file="d:\machines\win2008r2.vhd"&lt;/font&gt;&lt;/strong&gt;, press &lt;font color="#0000ff"&gt;&lt;strong&gt;Enter&lt;br /&gt;
    &lt;/strong&gt;&lt;/font&gt;&lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;Windows re-assigns your primary drive when running thru the installer. In all of my tests, C: was re-assigned to D:.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;attach vdisk&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;exit&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;exit&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;I&lt;/u&gt;nstall Now&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Select desired OS (server only), click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Check &lt;strong&gt;&lt;font color="#0000ff"&gt;I &lt;u&gt;a&lt;/u&gt;ccept the license terms&lt;/font&gt;&lt;/strong&gt;, click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;C&lt;/u&gt;ustom (advanced)&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Select &lt;strong&gt;&lt;font color="#0000ff"&gt;Disk 1 Partition 1: &amp;lt;label&amp;gt;&lt;/font&gt;&lt;/strong&gt;, where &lt;strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;label&amp;gt;&lt;/font&gt;&lt;/strong&gt; is the volume label you applied in step 11&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt; and continue to install the operating system as you normally would&amp;#160;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After rebooting, Windows Boot Manager will give you an option to boot into either the host or guest OS instances.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=wDBzTzuSs7w:OeusGdvd-8c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=wDBzTzuSs7w:OeusGdvd-8c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=wDBzTzuSs7w:OeusGdvd-8c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/wDBzTzuSs7w" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Fri, 19 Feb 2010 01:05:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1107</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1107/Boot-to-VHD-Create-VHD-from-GUI.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1105/Flash-and-Silverlight-Jobs.aspx#Comments</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1105</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1105&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Flash and Silverlight Jobs</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/OWHCzRo02LY/Flash-and-Silverlight-Jobs.aspx</link><description>&lt;p&gt;Silverlight has been Microsoft's golden child since v2 was released last year. The impact within the community has been astounding. Some demand the use of Silverlight without actually recognizing when and where the technology makes sense and others scoff at Silverlight either in favor of Flash or as a technology as "useless" as Flash. I roll my eyes every time I hear any of these three opinions... and they happen a lot. Flash went thru the hype cycle years ago and now it's Silverlight's turn. What I find amusing is that the hype seems to be much more powerful with Silverlight than it ever was with Flash. All we can do is fight the good fight.&lt;/p&gt;
&lt;p&gt;Not every rich experience needs to be Silverlight. JavaScript frameworks are making life as a web developer easier and easier, so I'd recommend that always be the default choice. Unfortunately, most developers still find the pain of JavaScript development too great. While I'm a big fan of JavaScript, it is far from a perfect language and is severely lacking when it comes to development and debugging tools. Flash and Silverlight both simplify things with better tools and a single-platform vision that&amp;#160;tremendously improves cross-browser development, but Flash is still lacking the one thing that makes Silverlight a no-brainer: XAML, backed by &lt;em&gt;real &lt;/em&gt;programming languages.&lt;/p&gt;
&lt;p&gt;XAML is immensely powerful and will continue to grow as more and more WPF features make it into Silverlight. XAML takes a new way of thinking, but it's well worth it for the simplicity and ease of development you get. But, more important than XAML is the fact that you have any .NET language you want and, with the inclusion of the &lt;a href="http://en.wikipedia.org/wiki/Dynamic_Language_Runtime"&gt;Dynamic Language Runtime (DLR)&lt;/a&gt;, there's virtually no reason not to use Silverlight. The one and only benefit Flash has is more mature tools. This is very important, but it is only a matter of time. Microsoft has both the will and the ability to overcome the current Flash tooling. The days of Flash are severely numbered. A look at the job market only confirms this. I just wish I had some of the same numbers from when Flash was initially released to&amp;#160;compare the difference.&lt;/p&gt;
&lt;p&gt;I truly believe that, if you're a web developer using &lt;em&gt;any &lt;/em&gt;language, you need to take the time to understand how Silverlight can benefit you. Yes, HTML5 is coming, but the power and flexibility of environments like Silverlight will quickly surpass anything the W3C will ever be able to come out with a specification for. Heck, in less than 2 years, we've seen 3 releases of Silverlight and&amp;#160;a beta version for the fourth, with speculations that Silverlight 4 is likely to release at Mix 2010, making it 4 full releases in 2.5 years. I'd like to see &lt;em&gt;any &lt;/em&gt;&lt;u&gt;one&lt;/u&gt; W3C spec ratified and fully released in all major browsers in such a timeframe. Such a feat is completely unheard of. Nevertheless, don't let me blab on about it. The numbers speak for themselves...&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=%22adobe+flash%22%2C+silverlight%2C&amp;amp;l=&amp;amp;relative=1"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" alt="Flash vs Silverlight Jobs" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2009/silverlightjobs-2009-12-27.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=OWHCzRo02LY:4yHQxVeMGz8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=OWHCzRo02LY:4yHQxVeMGz8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=OWHCzRo02LY:4yHQxVeMGz8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/OWHCzRo02LY" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Mon, 28 Dec 2009 03:31:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1105</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1105/Flash-and-Silverlight-Jobs.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1104/Lazy-Load-OneLiner-in-C.aspx#Comments</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1104</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1104&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Lazy Load One-Liner in C#</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/c67u5alaJNM/Lazy-Load-OneLiner-in-C.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Microsoft .NET" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/Weblog/2008/dotnetlogo.png" /&gt;&lt;/p&gt;
&lt;p&gt;One thing I love about C# is that I'm constantly learning new ways to simplify and write less code. Perhaps PowerShell has a lot to do with this, but I put a lot of value in the power of the one-liner. With that, I wanted to share something small I recently discovered.&lt;/p&gt;
&lt;p&gt;There are three main ways to initialize your read-only class properties: field initializer, constructor, or property accessor. The first thing you need to consider when determining the right approach is whether you should use a &lt;span class="Code"&gt;&lt;span class="keyword"&gt;readonly&lt;/span&gt;&lt;/span&gt; or get-only variable. A &lt;span class="Code"&gt;&lt;span class="keyword"&gt;readonly&lt;/span&gt;&lt;/span&gt; variable has two primary benefits: guaranteeing the value won't change and better ensuring thread-safety. I'm not going to go into either of these, but I will say, if you can make your variable &lt;span class="Code"&gt;&lt;span class="keyword"&gt;readonly&lt;/span&gt;&lt;/span&gt;, do it. The main reason not to make your variable &lt;span class="Code"&gt;&lt;span class="keyword"&gt;readonly&lt;/span&gt;&lt;/span&gt; is if its initialization is resource-heavy and the variable isn't always crucial. There are other things to consider, but I want to focus more on the implementation of this code rather than the reasoning behind deciding on a good approach.&lt;/p&gt;
&lt;p&gt;Back in the .NET 2 days, I used the following approach to lazy loading.&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="keyword"&gt;private &lt;/span&gt;&lt;span class="class"&gt;PersonCollection&lt;/span&gt; _people;&lt;br /&gt;
&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="class"&gt;PersonCollection&lt;/span&gt; People&lt;br /&gt;
{&lt;br /&gt;
&lt;span class="keyword"&gt;&amp;#160;&amp;#160;&amp;#160; get&lt;/span&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;
&lt;span class="keyword"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if&lt;/span&gt; (&lt;span class="keyword"&gt;this&lt;/span&gt;._people == &lt;span class="keyword"&gt;null&lt;/span&gt;)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;
&lt;span class="keyword"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this&lt;/span&gt;._people = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;PersonCollection&lt;/span&gt;();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;
&lt;span class="keyword"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return this&lt;/span&gt;._people;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;One way to achieve a one-liner would be to use an inline if statement.&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="keyword"&gt;private &lt;/span&gt;&lt;span class="class"&gt;PersonCollection&lt;/span&gt; _people;&lt;br /&gt;
&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="class"&gt;PersonCollection&lt;/span&gt; People&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; ((&lt;span class="keyword"&gt;this&lt;/span&gt;._people == &lt;span class="keyword"&gt;null&lt;/span&gt;) ? (&lt;span class="keyword"&gt;this&lt;/span&gt;._people = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;PersonCollection&lt;/span&gt;()) : &lt;span class="keyword"&gt;this&lt;/span&gt;._people); }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;The main problem with this is there's more one-liner than simplicity. This is a common problem with the inline if statement. For this reason, I avoided this type of lazy load approach.&lt;/p&gt;
&lt;p&gt;Recently, when hammering thru some code, typing &lt;span class="Code"&gt;== &lt;span class="keyword"&gt;null&lt;/span&gt;&lt;/span&gt; just made me think about the &lt;span class="Code"&gt;??&lt;/span&gt; operator. For those that don't know, this is essentially a null-check included with .NET 2 to simplify the use of nullable types (&lt;span class="Code"&gt;&lt;span class="class"&gt;Nullable&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;). If the value on the left is null, the value on the right is returned.&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="keyword"&gt;private &lt;/span&gt;&lt;span class="class"&gt;PersonCollection&lt;/span&gt; _people;&lt;br /&gt;
&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="class"&gt;PersonCollection&lt;/span&gt; People&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;._people ?? (&lt;span class="keyword"&gt;this&lt;/span&gt;._people = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;PersonCollection&lt;/span&gt;()); }&lt;br /&gt;
}&lt;/p&gt;
&lt;div&gt;Nothing revolutionary, but, as I mentioned before, I love my one-liners!&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=c67u5alaJNM:ke0nkmLLsA0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=c67u5alaJNM:ke0nkmLLsA0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=c67u5alaJNM:ke0nkmLLsA0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/c67u5alaJNM" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sun, 13 Dec 2009 23:31:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1104</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1104/Lazy-Load-OneLiner-in-C.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1103/Default.aspx#Comments</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1103</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1103&amp;PortalID=2&amp;TabID=142</trackback:ping><title>SharePoint Designer and Developer Position Descriptions</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/8RD7c84mc0E/Default.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="SharePoint" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/sp2010.png" /&gt;&lt;/p&gt;
&lt;p&gt;I can't tell you how many resumes I've read and interviews I've performed in the name of finding a quality SharePoint developer. After seeing my customer painstakingly struggle thru this same process, I finally decided to put together a couple short blurbs to cover what it is to be a SharePoint designer and a SharePoint developer.&lt;/p&gt;
&lt;p&gt;I lump administration and design/customization together because I honestly believe you can't have one without the other -- at least to some extent -- but I'm obviously looking more for the latter than the former. Let me just say that, if I was building up a team to build SharePoint solutions, I'd want at least one of each of these types. Obviously, you'll want someone more focused on administration, if you're also doing operations work, but I'm more focused on building solutions than hostings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;SharePoint Administrator/Designer&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;em&gt;Experienced SharePoint administrator with a strong emphasis on customization. Extensive experience with SharePoint Designer and InfoPath are a must, as is a moderate ability to create customized web parts using a mixture of HTML, CSS, JavaScript, and XSL (i.e. using a Data View Web Part). Should at least have an understanding of:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;IIS/SharePoint troubleshooting (i.e. event and ULS logs)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;How to customize branding&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;SharePoint Designer workflows&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;InfoPath forms&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Applicability and use of content types&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;SharePoint web service interfaces&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Feature deployment&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Standard features (i.e. search/indexing, content management, and Shared Service Providers (SSPs))&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Enterprise features (i.e. Forms Server, Excel Calculation Services, and Business Data Catalog (BDC))&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Reporting and business intelligence (BI)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Security concerns and audience targeting&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Experience with PowerShell and ASP.NET development are a huge plus.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;SharePoint Developer&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;em&gt;Strong ASP.NET (C#) developer with experience building and deploying fully-automated SharePoint solutions. Must have an understanding of at least:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Standard ASP.NET (including membership providers and their applicability to SharePoint)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;SharePoint object model and web service interfaces&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;SharePoint feature packaging and deployment&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Web parts and web part connections&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;SharePoint branding components&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Applicability and use of content types&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;SharePoint-hosted workflows&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Standard features (i.e. search/indexing, content management, and Shared Service Providers (SSPs))&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Enterprise features (i.e. Forms Server, Excel Calculation Services, and Business Data Catalog (BDC))&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Reporting and business intelligence (BI)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Above all, developers are expected to "live" in Visual Studio, yet be ablet o identify when SharePoint Designer and/or InfoPath would be more pragmatic -- and follow through with such a solution.&lt;br /&gt;
&amp;#160;&lt;br /&gt;
Senior developers and software architects must have broad, hands-on experience across the entire software development lifecycle with formal engineering processes. Experience with defining and documenting an applicable taxonomy and governance plan is a must.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you're interested in building SharePoint solutions, I highly recommend you find where you fit within these two descriptions. There's plenty of room to grow, but&amp;#160;they cover the foundations I -- and many others -- look for when building out SharePoint teams.&lt;/p&gt;
&lt;p&gt;Good&amp;#160;luck and happy job hunting!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=8RD7c84mc0E:g4dyaGwlo7w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=8RD7c84mc0E:g4dyaGwlo7w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=8RD7c84mc0E:g4dyaGwlo7w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/8RD7c84mc0E" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Tue, 17 Nov 2009 00:30:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1103</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1103/Default.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1102/MSDN-Subscription-November-2009.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1102</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1102&amp;PortalID=2&amp;TabID=142</trackback:ping><title>MSDN Subscription: November 2009</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/IxBxDhp6RKo/MSDN-Subscription-November-2009.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="MSDN" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/msdn.png" /&gt;&lt;/p&gt;
&lt;p&gt;The following consists of the &lt;strong&gt;English&lt;/strong&gt; DVD updates released under the &lt;strong&gt;MSDN Premium (Team Suite)&lt;/strong&gt; subscription level for&amp;#160;&lt;strong&gt;November 2009&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Operating Systems&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc 4617&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Windows Server 2008 R2 (x64)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 4618&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Windows 7 Ultimate (x64 and x86)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 4619&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Windows 7 Enterprise (x64 and x86)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Developer Tools&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc&amp;#160;4583.02&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Expression Studio 3&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the &lt;a href="http://msdn.microsoft.com/en-us/subscriptions/index/default.aspx"&gt;MSDN Subscriptions Index&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=IxBxDhp6RKo:EGoPsHrocr0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=IxBxDhp6RKo:EGoPsHrocr0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=IxBxDhp6RKo:EGoPsHrocr0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/IxBxDhp6RKo" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Wed, 11 Nov 2009 01:12:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1102</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1102/MSDN-Subscription-November-2009.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1101/MSDN-Subscription-July-2009.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1101</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1101&amp;PortalID=2&amp;TabID=142</trackback:ping><title>MSDN Subscription: July 2009</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/uvWbkS0i5MQ/MSDN-Subscription-July-2009.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="MSDN" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/msdn.png" /&gt;&lt;/p&gt;
&lt;p&gt;The following consists of the &lt;strong&gt;English&lt;/strong&gt; DVD updates released under the &lt;strong&gt;MSDN Premium (Team Suite)&lt;/strong&gt; subscription level for&amp;#160;&lt;strong&gt;July 2009&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Servers&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc 4595.01&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;SQL Server 2008 Service Pack 1 (x86)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 2436.38&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;BizTalk Server 2009&lt;/li&gt;
        &lt;li&gt;BizTalk Server 2009 Adapters and Accelerators&lt;/li&gt;
        &lt;li&gt;Host Integration Sever 2009&lt;/li&gt;
        &lt;li&gt;SQL Server 2008 SP1&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 4614.01&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Customer Care Framework 2009 SP1&amp;#160;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Planned releases for November 2009&amp;#160;include:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Expression Studio 3&lt;/li&gt;
    &lt;li&gt;Windows 7&lt;/li&gt;
    &lt;li&gt;Windows Server 2008 R2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the &lt;a href="http://msdn.microsoft.com/en-us/subscriptions/index/default.aspx"&gt;MSDN Subscriptions Index&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=uvWbkS0i5MQ:6nfbWbWtSWY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=uvWbkS0i5MQ:6nfbWbWtSWY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=uvWbkS0i5MQ:6nfbWbWtSWY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/uvWbkS0i5MQ" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Fri, 16 Oct 2009 00:28:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1101</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1101/MSDN-Subscription-July-2009.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1100/MSDN-Subscription-June-2009.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1100</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1100&amp;PortalID=2&amp;TabID=142</trackback:ping><title>MSDN Subscription: June 2009</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/YHjNaaDLRPE/MSDN-Subscription-June-2009.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="MSDN" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/msdn.png" /&gt;&lt;/p&gt;
&lt;p&gt;The following consists of the &lt;strong&gt;English&lt;/strong&gt; DVD updates released under the &lt;strong&gt;MSDN Premium (Team Suite)&lt;/strong&gt; subscription level for&amp;#160;&lt;strong&gt;June 2009&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Servers&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc 4616.01&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Commerce Server 2009&lt;/li&gt;
        &lt;li&gt;Office Communications Server 2007 R2&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Applications&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc 2434.24&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Office Accounting 2009&lt;/li&gt;
        &lt;li&gt;Office Accounting 2009 SP1&lt;/li&gt;
        &lt;li&gt;Office Communicator 2007 R2&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the &lt;a href="http://msdn.microsoft.com/en-us/subscriptions/index/default.aspx"&gt;MSDN Subscriptions Index&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=YHjNaaDLRPE:VX2eAAmn-yI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=YHjNaaDLRPE:VX2eAAmn-yI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=YHjNaaDLRPE:VX2eAAmn-yI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/YHjNaaDLRPE" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Thu, 15 Oct 2009 23:55:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1100</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1100/MSDN-Subscription-June-2009.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1099/MSDN-Subscription-March-2009.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1099</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1099&amp;PortalID=2&amp;TabID=142</trackback:ping><title>MSDN Subscription: March 2009</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/0UzJZNPAvsE/MSDN-Subscription-March-2009.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="MSDN" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/msdn.png" /&gt;&lt;/p&gt;
&lt;p&gt;The following consists of the &lt;strong&gt;English&lt;/strong&gt; DVD updates released under the &lt;strong&gt;MSDN Premium (Team Suite)&lt;/strong&gt; subscription level for &lt;strong&gt;March 2009&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Developer Tools&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc&amp;#160;4583&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Expression Studio 2&lt;/li&gt;
        &lt;li&gt;Expression Media 2&lt;/li&gt;
        &lt;li&gt;Expression Blend 2 SP1&lt;/li&gt;
        &lt;li&gt;Expression Encoder 2 SP1&lt;/li&gt;
        &lt;li&gt;Expression Media 2 SP1&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 4603&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Visual Studio 2008 SP1&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 3096.1&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Expression Blend 2&lt;/li&gt;
        &lt;li&gt;Expression Blend 2 SP1&lt;/li&gt;
        &lt;li&gt;Expression Web 2&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Disc 4612&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Visual Studio Team System 2008 Team Foundation Server Service Pack 1&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Servers&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc&amp;#160;4616&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Microsoft Office Communications Server 2007 R2 Enterprise Edition&lt;/li&gt;
        &lt;li&gt;Office Communicator 2007 R2&lt;/li&gt;
        &lt;li&gt;Unified Communications Managed API 2.0 SDK&lt;/li&gt;
        &lt;li&gt;Microsoft Application Virtualization 4.5 for Terminal Services&lt;/li&gt;
        &lt;li&gt;System Center Configuration Manager 2007 R2&lt;/li&gt;
        &lt;li&gt;System Center Virtual Machine Manager 2008&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the &lt;a href="http://msdn.microsoft.com/en-us/subscriptions/index/default.aspx"&gt;MSDN Subscriptions Index&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=0UzJZNPAvsE:Sw8aOokKiOM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=0UzJZNPAvsE:Sw8aOokKiOM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=0UzJZNPAvsE:Sw8aOokKiOM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/0UzJZNPAvsE" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Thu, 15 Oct 2009 23:28:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1099</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1099/MSDN-Subscription-March-2009.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1098/Boot-to-VHD-Create-VHD-from-Command-Line.aspx#Comments</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1098</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1098&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Boot to VHD: Create VHD from Command Line</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/GnfSUQkwdv0/Boot-to-VHD-Create-VHD-from-Command-Line.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Windows 7" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/Weblog/2008/Windows7logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;Virtual PC is great. Well, it's ok -- it does the job. There's a better way, tho, and that better way is to just get rid of the host OS...&amp;#160;or, ask the OS to politely let you get by for a while. That's exactly what Windows 7 does by enabling you to boot into a VHD.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hanselman.com/blog"&gt;Scott Hanselman&lt;/a&gt;&amp;#160;&lt;a href="http://feeds.feedburner.com/ScottHanselman"&gt;&lt;img title="Syndicated feed" border="0" alt="Syndicated feed" width="16" height="16" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" /&gt;&lt;/a&gt; &lt;a href="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx"&gt;blogged about booting from a VHD&lt;/a&gt; in more detail, but I wanted to break it down into discrete steps. For simplicity, I'm going to start from scratch, creating a VHD from the command line.&lt;/p&gt;
&lt;ol type="1"&gt;
    &lt;li value="1"&gt;Put Win7 or Server 2008 R2 DVD or &lt;a href="http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1095/Boot-from-USB-to-Install-Windows-7.aspx"&gt;bootable USB drive&lt;/a&gt; in&lt;/li&gt;
    &lt;li&gt;Restart your computer&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;You'll need to be sure you can boot using the necessary device in BIOS settings (obviously)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Press any key to boot from CD or DVD&lt;/li&gt;
    &lt;li&gt;When the Install Windows screen is shown, press &lt;font color="#0000ff"&gt;&lt;strong&gt;Shift+F10&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;d:&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;md machines&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;diskpart&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;create vdisk file="c:\machines\win2008r2.vhd" type=expandable maximum=50000&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;Be sure to set a maximum your machine can support; Windows will temporarily expand the VHD to that size when you boot into it&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;select vdisk file="c:\machines\win2008r2.vhd"&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;attach vdisk&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;exit&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff"&gt;exit&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;I&lt;/u&gt;nstall Now&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Select desired OS (server only), click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Check &lt;strong&gt;&lt;font color="#0000ff"&gt;I &lt;u&gt;a&lt;/u&gt;ccept the license terms&lt;/font&gt;&lt;/strong&gt;, click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;C&lt;/u&gt;ustom (advanced)&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Select &lt;strong&gt;&lt;font color="#0000ff"&gt;Disk 1 Unallocated Space (...GB)&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;font color="#0000ff"&gt;&lt;strong&gt;Drive options (&lt;u&gt;a&lt;/u&gt;dvanced)&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;N&lt;u&gt;e&lt;/u&gt;w&lt;/font&gt;&lt;/strong&gt;, then &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;A&lt;/u&gt;pply&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;F&lt;/u&gt;ormat&lt;/font&gt;&lt;/strong&gt;, then &lt;strong&gt;&lt;font color="#0000ff"&gt;OK&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;If you see a "Windows cannot be installed to this disk..." error, ignore it.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;N&lt;/u&gt;ext&lt;/font&gt;&lt;/strong&gt; and continue to install the operating system as you normally would&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After the installation completes, Windows Boot Manager will give you an option to boot into either the host or guest OS instances. Gotta love it!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=GnfSUQkwdv0:YolmH8ur5gU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=GnfSUQkwdv0:YolmH8ur5gU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=GnfSUQkwdv0:YolmH8ur5gU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/GnfSUQkwdv0" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Thu, 15 Oct 2009 22:40:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1098</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1098/Boot-to-VHD-Create-VHD-from-Command-Line.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1097/Default.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1097</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1097&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Gartner Predicts the Future of the Mobile Market</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/Jh0L4qH38gw/Default.aspx</link><description>&lt;p&gt;Gartner recently released a &lt;a href="http://www.gartner.com/DisplayDocument?id=1186614"&gt;smart phone market&amp;#160;forecast&lt;/a&gt;, which looks at&amp;#160;prior and predicted&amp;#160;market share fluctuations from 2007 to 2013. I found some very interesting, but quite explainable predictions. I recommend taking a look at it yourself, but here are a few teasers.&lt;/p&gt;
&lt;p&gt;The overall market has grown ~1.5x in 2 years and is expected to grow ~3.6x over the next 4 years. The ratio of consumer-to-business phones wavers, but remains about 3:1 throughout the assessed time frame.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Android&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;Gartner predicts Android quadrupling its market over the next 4 years, ending up #2 in the market. This is likely due to the open nature of the platform. While I agree with a large&amp;#160;growth, 4x isn't quite what I'd expect. Seeing this, you're likely to suspect other big changes, too. I think you'll be surprised with Gartner's numbers, tho.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Blackberry&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;Blackberry is estimated to steadily decline over the coming years, ultimately dropping 6% from their current standing. From #3 in 2007 to #2 in 2008&amp;#160;thru 2010 to&amp;#160;#4 in 2013. A thought-provoking rise and decline, but it shows how Blackberry isn't quite the innovator they'd like to be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;iPhone&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;For what most believe is the golden child of the mobile market, Gartner doesn't have much faith in the iPhone platform. iPhone tripled its market share from 2007 to 2008, then grew 50% in 2009. Most would think this would continue to shoot up over the coming years, but Gartner begs to differ. Gartner predicts only minor growth year over year thru 2013. They foresee a 10% growth by next year, virtually no growth the next, and a very trivial 1% growth in 2013. From here on out, the iPhone is expected to remain a #3 player thru 2013. Apple brought an interesting player to the market a few years back, but Gartner seems to believe that's where their innovation stops. I was very surprised to see the dwindling growth.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Symbian&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;Given the fact that we know Symbian is #1 today and we've already covered the #2, #3, and #4 players, you might expect to see Symbian in the #1 spot. Well... you'd be right. Gartner sees Symbian maintaining their place, but I speculate this isn't -- nor has it been -- due to superior innovation in the market. It's only a matter of time before other players take over. I suspect (not Gartner)&amp;#160;they'll drop to #2 by 2016 as other players drive advancements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;WebOS&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;The road has been long and rocky for Palm, as we all know. WebOS seems like a last ditch effort to maintain a place in the mobile market. Gartner predicts they'll double their market share in 2010, but that's about the only success they'll see, as they slowly lose market share.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Windows Mobile&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;Gartner shows Windows Mobile steadily dropping from 2007 to 2010. That's no surprise, given all we've heard. With a mid-2010 release of Windows Mobile 7 -- Microsoft's response to the iPhone -- it's no surprise we won't see a spike until 2011, when Windows Mobile jumps up 15%. Gartner doesn't have faith that this will be good enough, tho, as they foresee market share dropping a little more than half a percent below their current share. While Microsoft isn't talking about Windows Mobile 8, they'll have to deliver it in relatively short order, if they want to show the market they mean business. I have faith this will happen by 2013. In fact, I'm hopeful that we'll see some major enhancements and mergers between Zune and Windows Mobile in the same time frame. My gut tells me we'll see this by 2012. It won't be until then that people truly see what Microsoft is capable of.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Others&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;Linux, Maemo, and others&amp;#160;are also included in the study. I'm not familiar with&amp;#160;any serious&amp;#160;Linux competitors&amp;#160;other than Android, but they've lost 50% of their market share in the last 2 years and are presumed to continue to drop, eventually giving Palm some competition for the least amount of share by "major" competitors... if you consider Linux a major competitor. I have to say I was surprised by &lt;a href="http://en.wikipedia.org/wiki/Maemo_(operating_system)"&gt;Maemo&lt;/a&gt;, which I don't think I've heard much about. It's a Linux-based tablet OS Nokia developed and subsequently brought -- or, at least, is bringing -- to the smart phone market. I liken this to the opposite of Google's Android-to-Chrome OS move. With a 2009 initial showing, Gartner surprisingly predicts Maemo shooting up to 6.5% by 2013. Very interesting; unlike other players, who drop from 1.1% in 2007&amp;#160;to&amp;#160;less than&amp;#160;.1% by 2013.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;If you ask me, Microsoft should seriously consider buying RIM. Right now, they're #2 and #4, but Microsoft stands&amp;#160;to gain a tremendous amount from the corporate&amp;#160;presence&amp;#160;Blackbery currently holds. With what's expected to come in Windows Mobile 7, this would also give Blackberry users&amp;#160;a very nice glimmer of hope around what I speculate will be a very nice mobile OS. Now isn't the time, of course. Given Gartner's insights, I'd say 2011 would be the best time to drive such an acquisition, hopefully showing value for Blackberry users in the Windows Mobile 8 time frame.&lt;/p&gt;
&lt;p&gt;Short of a Microsoft/RIM acquisition, somebody needs to buy Palm for Palm's sake. Given my newly-acquired knowledge of&amp;#160;Maemo, I have to say Nokia should seriously consider it. I was initially thinking RIM should give it a thought, but I don't see them having much to gain. Maemo and WebOS both have a lot in common. A merger could go a long way... not that Nokia needs Palm. The Palm-ers could definitely use some Nokia love, tho.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;The last thing I should mention is that most of this is speculation on my part. Gartner provided the numbers -- aside from my Symbian 2016 and Windows Mobile 2012/13 comments. I&amp;#160;wholly recommend you look at Gartner's numbers and other mobile studies they have to fully understand what they're thinking and why they made these forecasts.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=Jh0L4qH38gw:hE6iGUNQoZM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=Jh0L4qH38gw:hE6iGUNQoZM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=Jh0L4qH38gw:hE6iGUNQoZM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/Jh0L4qH38gw" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sun, 27 Sep 2009 21:28:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1097</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1097/Default.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1096/Silverlight-3-Tools-Offline-Install.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1096</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1096&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Silverlight 3 Tools Offline Install</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/Wx3jnWHxsBE/Silverlight-3-Tools-Offline-Install.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Silverlight" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/silverlight.png" /&gt;&lt;/p&gt;
&lt;p&gt;Ever try to install the Silverlight dev tools in an environment with "filtered" or even no access to the internet? If so, you've probably taken a look at the errors in the log and&amp;#160;seen the following error:&lt;/p&gt;
&lt;blockquote style="margin-right: 0px" dir="ltr"&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;Error from JobError Callback : hr= 0x80190193 Context=5 Description=HTTP status 403: The client does not have sufficient access rights to the requested server object. . Percentage downloaded = 0&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For some tools, like .NET 3.5 and 3.5 SP1, there's an offline installer available on their respective&amp;#160;download pages. Unfortunately, the Silverlight dev tools don't have that. I major oversight, if you ask me, but what can you do? Note that this was a problem with Silverlight 2 and 3. I haven't heard anything about a fix for the future, but I have to think they realize the work-around is ridiculous. Enough of my blabbering, tho...&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Download and save the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9442b0f2-7465-417a-88f3-5e7b5409e9dd&amp;amp;displaylang=en"&gt;Silverlight 3&amp;#160;Tools for VS 2008 SP1&lt;/a&gt;&amp;#160;to your desktop&lt;/li&gt;
    &lt;li&gt;Create a new&amp;#160;&lt;font color="#0000ff" face="Courier New"&gt;&lt;strong&gt;sltools&lt;/strong&gt;&lt;/font&gt;&amp;#160;directory on your desktop&lt;/li&gt;
    &lt;li&gt;From a command prompt, run &lt;font color="#0000ff" face="Courier New"&gt;&lt;strong&gt;silverlight3_tools.exe /x&lt;/strong&gt;&lt;/font&gt; to extract the files&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;You can also use a tool like &lt;a href="http://www.7-zip.org"&gt;7-zip&lt;/a&gt; to extract the files&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Specify the directory you created in step 2&lt;/li&gt;
    &lt;li&gt;Download and save the &lt;a href="http://silverlight.dlservice.microsoft.com/download/C/5/B/C5BB5CD8-E871-49AC-8A40-61010E1FD1CF/Silverlight_Developer.exe"&gt;Silverlight Developer Runtime&lt;/a&gt; to the &lt;font color="#0000ff" face="Courier New"&gt;&lt;strong&gt;sltools&lt;/strong&gt;&lt;/font&gt;&amp;#160;directory&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;My problem was that the Sl Dev Runtime is at a blocked URL, so you may have to download it offline and bring it into your environment&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Run &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;sltools\SPInstaller.exe&lt;/font&gt;&lt;/strong&gt;&amp;#160;to perform the actual installation&lt;/li&gt;
    &lt;li&gt;Delete the &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;sltools&lt;/font&gt;&lt;/strong&gt;&amp;#160;directory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That's it. Not hard, but annoying.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://timheuer.com"&gt;Tim Heuer&lt;/a&gt;&amp;#160;&lt;a href="http://feeds.timheuer.com/timheuer"&gt;&lt;img title="Syndicated feed" border="0" alt="Syndicated feed" width="16" height="16" src="http://michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" /&gt;&lt;/a&gt; has a &lt;a href="http://timheuer.com/blog/archive/2008/09/29/install-silverlight-2-rc0-offline.aspx"&gt;similar blog post for Silverlight 2&lt;/a&gt;, but I wanted to share this because the developer runtime is in a new location. &lt;strike&gt;I'm still trying to figure out what the full URL is, so I'll update this if I get a chance to figure that out.&lt;/strike&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update: &lt;/strong&gt;Thanks to the &lt;/em&gt;&lt;a href="http://blogs.msdn.com/rpomeroy"&gt;&lt;em&gt;Bob Pomeroy&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;#160;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/rpomeroy/atom.xml"&gt;&lt;em&gt;&lt;img title="Syndicated feed" border="0" alt="Syndicated feed" src="http://michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" width="16" height="16" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; from the Silverlight team for helping me get the direct URL for the Silverlight 3 developer runtime.&lt;/em&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=Wx3jnWHxsBE:-v6mYdfQKRY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=Wx3jnWHxsBE:-v6mYdfQKRY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=Wx3jnWHxsBE:-v6mYdfQKRY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/Wx3jnWHxsBE" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sat, 12 Sep 2009 15:30:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1096</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1096/Silverlight-3-Tools-Offline-Install.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1095/Boot-from-USB-to-Install-Windows-7.aspx#Comments</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1095</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1095&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Boot from USB to Install Windows 7</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/znmDPhgW-04/Boot-from-USB-to-Install-Windows-7.aspx</link><description>&lt;p&gt;One of the things I really like about Windows 7 is it can be installed from a USB drive -- perhaps thanks to the rise in netbooks. This isn't anything terribly new to the world of computers, but it's always nice when you have a new feature to play with -- and, let's face it, Windows 7 is all about simplicity. When I first heard about installing from a bootable USB drive, I hoped it was going to be as simple as copying the files over. It wasn't. All-in-all, the process wasn't too bad, tho.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Attach the USB drive&lt;/li&gt;
    &lt;li&gt;If you have anything on the drive you want to keep, copy it off&lt;/li&gt;
    &lt;li&gt;Click &lt;img style="vertical-align: middle" alt="Start" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2009/startbutton.png" /&gt;, type and select the&amp;#160;&lt;font color="#0000ff" face="Courier New"&gt;&lt;strong&gt;Device Manager&lt;/strong&gt;&lt;/font&gt; option&lt;/li&gt;
    &lt;li&gt;Expand&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Disk Drives&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Right-click your USB drive, click &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;&lt;u&gt;P&lt;/u&gt;roperties &amp;gt; Policies&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Check &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Optimize for performance&lt;/font&gt;&lt;/strong&gt; and click &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;OK&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Close Device Manager&lt;/li&gt;
    &lt;li&gt;Open Windows Explorer (&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Win+E&lt;/font&gt;&lt;/strong&gt;)&lt;/li&gt;
    &lt;li&gt;Select &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Computer&lt;/font&gt;&lt;/strong&gt;, right-click the USB drive, select &lt;font color="#0000ff" face="Courier New"&gt;&lt;strong&gt;&lt;u&gt;F&lt;/u&gt;ormat...&lt;br /&gt;
    &lt;/strong&gt;&lt;/font&gt;&lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;Remember the total size of the USB drive and what drive letter it is assigned&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Select the&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;NTFS&lt;/font&gt;&lt;/strong&gt; file system, uncheck all format options,&amp;#160;and click&amp;#160;&lt;font color="#0000ff" face="Courier New"&gt;&lt;strong&gt;&lt;u&gt;S&lt;/u&gt;tart&lt;br /&gt;
    &lt;/strong&gt;&lt;/font&gt;&lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;This process will take a while, so we're going to multi-task&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;While the USB drive is being formatted, copy the Windows 7 DVD contents to the&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;c:\win7&lt;/font&gt;&lt;/strong&gt;&amp;#160;directory&lt;br /&gt;
    &lt;em&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;If you only have an ISO file, use &lt;a href="http://7-zip.org"&gt;7-zip&lt;/a&gt; to extract contents to the target directory&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Click &lt;img style="vertical-align: middle" alt="Start" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2009/startbutton.png" /&gt;, type&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;powershell&lt;/font&gt;&lt;/strong&gt;, right-click&amp;#160;the&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Windows PowerShell&lt;/font&gt;&lt;/strong&gt;&amp;#160;option, and select&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Run as &lt;u&gt;a&lt;/u&gt;dministrator&lt;/font&gt;&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;em&gt;Fine, fine... if you're not on the band wagon,&amp;#160;run &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Command Prompt&lt;/font&gt;&lt;/strong&gt; as administrator&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;When the USB drive is done formatting, type &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;diskpart&lt;/font&gt;&lt;/strong&gt;, and&amp;#160;press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;list disk&lt;/font&gt;&lt;/strong&gt; and&amp;#160;press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;This will return results like the following. In this case, I have a 16 GB drive as disk 1.&lt;br /&gt;
        &lt;br /&gt;
        &lt;font color="#0000ff" face="Courier New"&gt;DISKPART&amp;gt; list disk&lt;br /&gt;
        &amp;#160; Disk ###&amp;#160; Status&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Size&amp;#160;&amp;#160;&amp;#160;&amp;#160; Free&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dyn&amp;#160; Gpt&lt;br /&gt;
        &amp;#160; --------&amp;#160; -------------&amp;#160; -------&amp;#160; -------&amp;#160; ---&amp;#160; ---&lt;br /&gt;
        &amp;#160; Disk 0&amp;#160;&amp;#160;&amp;#160; Online&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 74 GB&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0 B&lt;br /&gt;
        &amp;#160; &lt;font color="#ff0000"&gt;&lt;strong&gt;Disk 1&amp;#160;&amp;#160;&amp;#160; Online&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 14 GB&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0 B&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;
        &amp;#160;&lt;/font&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;select disk &lt;font color="#ff0000"&gt;&amp;lt;d&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;, where&amp;#160;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;lt;d&amp;gt;&lt;/font&gt;&lt;/strong&gt; is the disk number from the previous step, and press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;list partition&lt;/font&gt;&lt;/strong&gt;, press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;
    &lt;ul&gt;
        &lt;li&gt;This will return results like the following. In this case, I have a 16 GB drive as disk 1.&lt;br /&gt;
        &lt;br /&gt;
        &lt;font color="#0000ff" face="Courier New"&gt;DISKPART&amp;gt; list&amp;#160;partition&lt;br /&gt;
        &amp;#160;&amp;#160;Partition ###&amp;#160; Status&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Size&amp;#160;&amp;#160;&amp;#160;&amp;#160; Offset&lt;br /&gt;
        &amp;#160; -------------&amp;#160; -------------&amp;#160; -------&amp;#160; -------&lt;br /&gt;
        &amp;#160;&amp;#160;&lt;font color="#ff0000"&gt;&lt;strong&gt;Partition 1&amp;#160;&amp;#160;&amp;#160; Primary&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 14 GB&amp;#160;&amp;#160;&amp;#160;&amp;#160;20 KB&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;
        &amp;#160;&lt;/font&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;select&amp;#160;partition &lt;font color="#ff0000"&gt;&amp;lt;p&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;, where&amp;#160;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;lt;p&amp;gt;&lt;/font&gt;&lt;/strong&gt; is the&amp;#160;partition number from the previous step (most likely 1), and press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;active&lt;/font&gt;&lt;/strong&gt;, to&amp;#160;make this partition active an&amp;#160;press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;exit&lt;/font&gt;&lt;/strong&gt; and press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;When the Windows 7 disk contents are done copying, type&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;cd c:\win7\boot&lt;/font&gt;&lt;/strong&gt;&amp;#160;and press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Type&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;.\bootsect /nt60 &lt;font color="#ff0000"&gt;&amp;lt;e:&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;, where&amp;#160;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;lt;e:&amp;gt;&lt;/font&gt;&lt;/strong&gt; is the drive letter your USB drive is assigned to (i.e. &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;e:&lt;/font&gt;&lt;/strong&gt;), and press &lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;Enter&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Lastly, copy the contents of&amp;#160;the&amp;#160;&lt;strong&gt;&lt;font color="#0000ff" face="Courier New"&gt;c:\win7&lt;/font&gt;&lt;/strong&gt;&amp;#160;directory to the root of your USB drive&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Wow... 23 steps seems like a lot more than I originally realized, but it's just about going thru the motions. You'll be waiting for the USB drive to be formatted and files to be copied for the majority of the time. Once you're done, reboot and plug in your USB drive to kick off the installation. Remember to check your BIOS boot settings. If your machine isn't configured to even try to boot from USB, you won't get very far.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=znmDPhgW-04:z7A2EYytlv8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=znmDPhgW-04:z7A2EYytlv8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=znmDPhgW-04:z7A2EYytlv8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/znmDPhgW-04" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sat, 22 Aug 2009 01:34:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1095</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1095/Boot-from-USB-to-Install-Windows-7.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1094/Default.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1094</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1094&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Comparing Virtual Earth and MapPoint Web Service</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/T5GytapW-co/Default.aspx</link><description>&lt;p&gt;When I need to create a geospatial visualization, Virtual Earth is my default answer. When talking to someone who's been in this space for a while, he mentioned the MapPoint Web Service. I initially assumed this was a legacy offering that Virtual Earth replaced. Apparently not. &lt;a href="http://blog.tatham.oddie.com.au"&gt;Tatham Oddie&lt;/a&gt; has a very nice &lt;a href="http://blog.tatham.oddie.com.au/2006/10/26/whats-the-difference-between-virtual-earth-and-mappoint-web-service/"&gt;high level comparison&lt;/a&gt; to at least help you determine which makes the most sense in a given situation.&lt;/p&gt;
&lt;p&gt;
&lt;table border="0"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;#160;&lt;/td&gt;
            &lt;th scope="col"&gt;Virtual Earth&lt;/th&gt;
            &lt;th scope="col"&gt;MapPoint Web Service&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;Map Styles&lt;/th&gt;
            &lt;td&gt;Road, Aerial, Birds eye&lt;/td&gt;
            &lt;td&gt;Over 30 different styles (optimised schemes for night viewing, etc) however no aerial imagery&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;Integration style&lt;/th&gt;
            &lt;td&gt;JS control (best for embedding in web pages)&lt;/td&gt;
            &lt;td&gt;SOAP web service (usable anywhere)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;Interface style&lt;/th&gt;
            &lt;td&gt;Drag and drop positioning, scroll wheel support, interactive pushpins, AJAX based.&lt;/td&gt;
            &lt;td&gt;Roll your own (it returns an image and you have to work out what to do with it).&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;Pushpin support&lt;/th&gt;
            &lt;td&gt;You create them all yourself on the fly using API calls – any clustering / filtering optimizations have to be done manually.&lt;/td&gt;
            &lt;td&gt;Can upload pushpin sets to their databases and they will handle plotting / clustering and filtering.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;Routes&lt;/th&gt;
            &lt;td&gt;Specify a start point and an end point and they’ll give you a route in text. End of story.&lt;/td&gt;
            &lt;td&gt;Specify the waypoints, preferred road styles (back roads, highways, toll roads, non-toll roads) and it will return a machine readable result set.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;Cost&lt;/th&gt;
            &lt;td&gt;Free (commercial use has some minor restrictions)&lt;/td&gt;
            &lt;td&gt;Per transaction&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;SDK documentation and support&lt;/th&gt;
            &lt;td&gt;Basic MSDN docs, active community (&lt;a href="http://www.viavirtualearth.com"&gt;www.viavirtualearth.com&lt;/a&gt;)&lt;/td&gt;
            &lt;td&gt;Plenty of MSDN docs and articles, including VS.NET integrated help and plenty of websites (&lt;a href="http://www.mp2kmag.com"&gt;www.mp2kmag.com&lt;/a&gt;)&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=T5GytapW-co:_8BYneEjgt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=T5GytapW-co:_8BYneEjgt0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=T5GytapW-co:_8BYneEjgt0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/T5GytapW-co" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sat, 02 May 2009 18:04:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1094</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1094/Default.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1093/A-Plea-for-IE.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1093</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1093&amp;PortalID=2&amp;TabID=142</trackback:ping><title>A Plea for IE</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/CJwnn3TCrqk/A-Plea-for-IE.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Internet Explorer" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2009/ie.png" /&gt;&lt;/p&gt;
&lt;p&gt;Microsoft is out to prove a point with Windows 7. I can see the message clearly: "See, we can deliver on time; and earlier than most expected. And to top it all off, we did so without drastically changing the OS. That 'polished' OS you're looking at... yeah, it's Vista; 'Vista-point-1' to be exact. Sure, we tweaked it; but that's just to prove another point: Microsoft software isn't about bloat." I could probably go on for a while, but the signs are all there. Sinofsky has done a great job taking the Windows team under his wing. I've been very happy with some of the decisions they've made. As a matter of fact, I'm hoping to see some of the same changes on other fronts. Enter Internet Explorer.&lt;/p&gt;
&lt;p&gt;IE8 is a big flop in my book. Don't get me wrong, it's my default browser and I love the enhancements; but it's just hiding the real, underlying problem: the foundation. I apologize for the analogy, but you can only mold a pile of crap so many ways before it just starts falling apart. Arguably, the same can be said about Windows, but Windows 7 has really given it a refresh. It's hard to explain how much better Windows 7 feels. I have to say I'd liken it to the first day I got Windows Vista, to be honest; but the key differentiator there is that I had quality hardware that was up to the challenge and no legacy software or devices to be concerned with. I'm not the "normal" user, of course, and I feel bad for those who had bad experiences. It's not because the software is bad, it's because your circumstances around which you experienced it were wrong. Not that Microsoft isn't to blame, tho; but I'm getting way off topic. It's time for a major change with IE.&lt;/p&gt;
&lt;p&gt;I remember seeing some early concepts around IE8. At first glance, I was confused at a few of the ideas -- I'm thinking of one in particular -- but after I paused to really mull it over, it hit me. The power users would have at their fingertips would be astounding. There's a common root to the booming growth of Google and Firefox. This is exactly what Microsoft would've seen with this feature. Guess what: that feature never saw the light of day. As a matter of fact, I don't even know that it made it past that slide deck. Admittedly, the idea was rough, but it had some real potential. What's funny is that I just read something about the same concept being applied to another browser. &lt;strong&gt;*sigh*&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before IE8 beta 1 hit the streets, I saw another slide deck about what would be included in IE8 and 9. At first, I was excited, but it didn't take long for that to wear off. I actually began to question some of the decisions. There was (once again) one feature loved, but then I started to wonder if it even made sense. Depending on whether the team takes a left or a right out the gate will be the deciding factor for that feature... if it's still even a possibility. IE8 was pushed back so much that the IE9 time frame and feature set is completely out of the picture for what I saw. It's too bad; I was looking forward to a few quick revs. At the same time, this could be perfect timing.&lt;/p&gt;
&lt;p&gt;Windows 7 is on the way, with rumors of &lt;a href="http://www.neowin.net/news/main/09/01/30/microsoft-official-hints-at-april-for-windows-7-rc-release"&gt;April&lt;/a&gt; and &lt;a href="http://blogs.zdnet.com/microsoft/?p=2369"&gt;May&lt;/a&gt; release candidates culminating in a &lt;a href="http://www.internetnews.com/bus-news/article.php/3771391"&gt;June&lt;/a&gt;, &lt;a href="http://blogs.zdnet.com/Bott/?p=649&amp;amp;tag=nl.e539"&gt;July&lt;/a&gt;, &lt;a href="http://www.neowin.net/news/main/09/02/12/windows-7-moves-toward-august-2009-rtm"&gt;August&lt;/a&gt;, &lt;a href="http://pixelatedgeek.com/2009/02/windows-7-shipping-in-september"&gt;September&lt;/a&gt;, &lt;a href="http://news.softpedia.com/news/Windows-7-RTM-in-October-2009-via-Leaked-Product-Roadmap-103423.shtml"&gt;October&lt;/a&gt;, &lt;a href="http://www.efluxmedia.com/news_Windows_7_in_November_2009_a_Possibility_32099.html"&gt;November&lt;/a&gt;, or &lt;a href="http://news.cnet.com/8301-13860_3-9951638-56.html"&gt;January&lt;/a&gt;&amp;#160;final release date. It's pretty clear nobody has a good clue of the actual release date, but there is one constant in all the confusion: simplicity and performance are the two driving tenets&amp;#160;in Windows 7. These two factors are huge for usability and, furthermore, perceptions. So, when I think about what to expect in IE9, I'm looking for both of these: simplicity and speed. IE8 is a dog on some machines. We've seen JavaScript benchmarks and "everyday use" benchmarks that all tell us different things, but it all comes down to our individual experiences... and perceptions. For IE to be a contendor, it needs to clean up its act. I want a sleek, sexy browser. It's not Firefox; it's not Chrome; and it sure as hell isn't Safari or Opera. I'm not saying each isn't functional, I'm just saying there's a lot to be desired.&lt;/p&gt;
&lt;p&gt;Opera's doing it's thing, although I'm not sure why it even bothers; Apple's giving Safari on Windows a go, but not doing well; Google's got juice, but I don't think they have the right talent-mix to succeed; and Firefox is leading the pack against IE, but hasn't really made any significant innovations and is growing more by perception than anything. Microsoft (read: IE team), the browser market is yours to lose [which you're doing]; but it's also yours to dominate. Take a step back. Review the history books. There is one constant in what drives the up-and-comers of today. See that and feed into it. The world is asking for simplicity, speed, and all-around usability. IE8 isn't the answer. IE9 could be. You can do better. I know it; you know it.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=CJwnn3TCrqk:DKomD9KY7eI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=CJwnn3TCrqk:DKomD9KY7eI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=CJwnn3TCrqk:DKomD9KY7eI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/CJwnn3TCrqk" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Tue, 31 Mar 2009 02:28:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1093</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1093/A-Plea-for-IE.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1092/Default.aspx#Comments</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1092</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1092&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Visual Studio 2010 Will Make You More Productive</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/DAGMc_-TaW4/Default.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Visual Studio" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/visualstudio.png" /&gt;&lt;/p&gt;
&lt;p&gt;Whether you've heard about Visual Studio 2010 and .NET 4.0 or not, you should really be watching the &lt;a href="http://channel9.msdn.com/shows/10-4"&gt;10-4 show&lt;/a&gt; on &lt;a href="http://channel9.msdn.com"&gt;Channel 9&lt;/a&gt;&amp;#160;&lt;a href="http://channel9.msdn.com/Feeds/RSS"&gt;&lt;img title="Syndicated feed" height="16" alt="Syndicated feed" width="16" border="0" src="http://michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" /&gt;&lt;/a&gt;. As you have probably guessed, the show talks about what to expect in Visual Studio 2010 (version 10.0) and .NET 4.0. The episodes I've seen cover things like ASP.NET, AJAX, parallelization, and overall enhancements to the VS IDE. Admittedly, I'm behind a few episodes, but that's just par for the course &lt;img alt="" src="http://michaelflanakin.com/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/wink_smile.gif" /&gt; While each of these has been valuable on its own, I have to specifically call out &lt;a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-5-Code-Focused-in-Visual-Studio-2010"&gt;episode 5, Code Focused in Visual Studio 2010&lt;/a&gt;. This episode talks about three things: code navigation, test-driven development (TDD), and extending the VS editor.&lt;/p&gt;
&lt;p style="padding-right: 5px; padding-left: 5px; float: left; padding-bottom: 5px; padding-top: 5px"&gt;&lt;object type="application/x-silverlight-2" height="240" width="320" data="data:application/x-oleobject;base64,QfXq3+HzJEysrJnDBxUISgAIAAATIQAAzhgAABQAAAAjADAAMABGAEYARgBGAEYARgAAAAAAAAAAAAAAjAAAAGgAdAB0AHAAOgAvAC8AYwBoAGEAbgBuAGUAbAA5AC4AbQBzAGQAbgAuAGMAbwBtAC8AQQBwAHAAXwBUAGgAZQBtAGUAcwAvAGQAZQBmAGEAdQBsAHQALwBWAGkAZABlAG8AUABsAGEAeQBlAHIAMgAwADAAOQBfADAAMgBfADEAMQAuAHgAYQBwAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgIAAG0APQBoAHQAdABwADoALwAvAG0AcwBjAGgAbgBsAG4AaQBuAGUALgB2AG8ALgBsAGwAbgB3AGQALgBuAGUAdAAvAGQAMQAvAGMAaAA5AC8AOAAvADEALwA1AC8AMwAvADUALwA0AC8AMQAwADQARQBwAGkAcwBvAGQAZQA1AEMAbwBkAGUARgBvAGMAdQBzAGUAZABJAG4AVgBpAHMAdQBhAGwAUwB0AHUAZABpAG8AMgAwADEAMABfADIATQBCAF8AYwBoADkALgB3AG0AdgAsAGEAdQB0AG8AcwB0AGEAcgB0AD0AZgBhAGwAcwBlACwAYQB1AHQAbwBoAGkAZABlAD0AdAByAHUAZQAsAHMAaABvAHcAZQBtAGIAZQBkAD0AdAByAHUAZQAsACAAdABoAHUAbQBiAG4AYQBpAGwAPQBoAHQAdABwADoALwAvAG0AcwBjAGgAbgBsAG4AaQBuAGUALgB2AG8ALgBsAGwAbgB3AGQALgBuAGUAdAAvAGQAMQAvAGMAaAA5AC8AOAAvADEALwA1AC8AMwAvADUALwA0AC8AMQAwADQARQBwAGkAcwBvAGQAZQA1AEMAbwBkAGUARgBvAGMAdQBzAGUAZABJAG4AVgBpAHMAdQBhAGwAUwB0AHUAZABpAG8AMgAwADEAMABfAGwAYQByAGcAZQBfAGMAaAA5AC4AagBwAGcALAAgAHAAbwBzAHQAaQBkAD0ANAA1ADMANQAxADgAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="&gt;
&lt;param value="http://channel9.msdn.com/App_Themes/default/VideoPlayer2009_02_11.xap" name="source" /&gt;
&lt;param value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/8/1/5/3/5/4/104Episode5CodeFocusedInVisualStudio2010_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/8/1/5/3/5/4/104Episode5CodeFocusedInVisualStudio2010_large_ch9.jpg, postid=453518" name="initParams" /&gt;
&lt;param value="#00FFFFFF" name="background" /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;These first two areas, code navigation and TDD enhancements, are taking a page from the Resharper bible. If you haven't used Resharper, yet, you're seriously missing out. Resharper is the one VS add-in I can't live without -- GhostDoc isn't too far behind, tho. The first thing we're getting is the ability to highlight all references of an variable. This doesn't sound all that exciting, but it's really nice to see without having to look, if that makes sense. To top it off, you can bounce between these references with simple keyboard shortcuts.&lt;/p&gt;
&lt;p&gt;Bouncing between variable instances is neat, but let's take it up a notch. If you're digging into new code, figuring everything out can be a true feat. To help us move down this path, VS10 is giving us the ability to view the hierarchy of calls related to a specific method/property. The call hierarchy tells you everthing that calls your code block and what your code block calls. This is going to make understanding code a lot easier. We're still short of my desired end-goal of having an automatic sequence diagram generated, but at least we're making steps in that direction.&lt;/p&gt;
&lt;p&gt;From a productivity perspective, one thing I love about Resharper is that, if I need to open a file, I don't need to know where it is, I simply need to know its name. VS10 is bringing this to everyone. A simple shortcut, like Ctrl+T, and a dialog pops up, waiting for you to type in the file name. You can type a partial name, &lt;strong&gt;&lt;font color="#0000ff"&gt;mycla&lt;/font&gt;&lt;/strong&gt; to get &lt;font color="#0000ff"&gt;&lt;strong&gt;MyClass.cs&lt;/strong&gt;&lt;/font&gt;, or use the Pascal-casing and type &lt;strong&gt;&lt;font color="#0000ff"&gt;MC&lt;/font&gt;&lt;/strong&gt; to get &lt;font color="#0000ff"&gt;&lt;strong&gt;MyClass.cs&lt;/strong&gt;&lt;/font&gt; or &lt;font color="#0000ff"&gt;&lt;strong&gt;MyComponent.cs&lt;/strong&gt;&lt;/font&gt;. Pay attention to how much time you spend in the solution explorer. Imagine cutting that in half, if not more.&lt;/p&gt;
&lt;p&gt;The TDD-based enhancement really isn't about TDD, but it does support TDD very nicely. Basically, the idea is, when you're writing code, you want to dig in to the real logic, not go around creating domain objects and data access layers. To support this, you just start typing. If you need a customer class, you just reference it in code. VS will tell you it doesn't know about that class, but this is where the feature comes into play: it'll give you the option to generate it. The same thing happens when you add properties and methods. VS will generate the stubs for you. This lets you focus on one method at a time, without having to divert focus to figure out how third party code needs to work. This is all about decreasing the noise, in my opinion, which is very hard to do sometimes.&lt;/p&gt;
&lt;p&gt;The last thing the episode covers is something most people will probably underappreciate: the new WPF-based editor. Despite what people think, this isn't about flashy graphics. Nobody wants text to fly across the screen as we type it. There are two concepts here: &lt;strong&gt;(1)&lt;/strong&gt; simple animation can go a long way to enhance user experience; and, &lt;strong&gt;(2)&lt;/strong&gt; WinForms is now a legacy technology and WPF provides so many enhancements that it just makes sense to bring this to developers, making it easier to build and extend on the #1 development environment in the world. Everytime I think about this, I fall back on Resharper. Now that it's so easy to do amazing things with the editor, what is the Resharper team going to be able to give us? What is the community going to be able to give us? I can't wait to find out.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=DAGMc_-TaW4:Q182O4GX-9I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=DAGMc_-TaW4:Q182O4GX-9I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=DAGMc_-TaW4:Q182O4GX-9I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/DAGMc_-TaW4" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sat, 14 Mar 2009 14:41:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1092</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1092/Default.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1091/Windows-7-RC-Enhancements.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1091</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1091&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Windows 7 RC Enhancements</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/iKVhf-kFTCc/Windows-7-RC-Enhancements.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Windows 7" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/Weblog/2008/Windows7logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;Since the debut of Windows 7, there's been a lot of talk about whether or not Microsoft would listen to feedback from the field. This sounds odd, but the question is a valid one, due to how Steve Sinofsky is running this release of Windows. The major departure from past releases is that the Windows team isn't introducing features into the build until they're "done." Sure, there may be some small issues, but nothing like what we saw in the pre-release versions of Vista or XP. This, along with only 2 pre-release versions of the OS making it out to the field -- beta and release candidate -- will make anyone question how much will really change between the beta and official release. Well, the &lt;a href="http://blogs.msdn.com/e7"&gt;Engineering 7&lt;/a&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/e7/atom.xml"&gt;&lt;img title="Syndicated feed" height="16" alt="Syndicated feed" width="16" border="0" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" /&gt;&lt;/a&gt; blog lets us know about&amp;#160;&lt;a href="http://blogs.msdn.com/e7/archive/2009/02/26/some-changes-since-beta.aspx"&gt;36 things we'll see in the release candidate&lt;/a&gt; based on feedback from the beta. This is very refreshing, even if a number of them are qute trivial.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Task Switcher (Alt+Tab) now with&amp;#160;Aero peek &lt;/strong&gt;-- excellent enhancement to really bring focus to the app you're thinking about switching to&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Win+# will open or launch, not just launch &lt;/strong&gt;-- I'm very excited about this one; I'll finally have a Win+1 shortcut to&amp;#160;open my&amp;#160;most&amp;#160;important&amp;#160;window: PowerShell&lt;/li&gt;
    &lt;li&gt;Apps wanting your attention will be more obvious&lt;/li&gt;
    &lt;li&gt;Dragging a file onto an app on the taskbar will now open the file in the app&lt;/li&gt;
    &lt;li&gt;25-40% more icons will fit on the taskbar before scrolling&lt;/li&gt;
    &lt;li&gt;Clearer mapping of what app thumbnails are related to in the taskbar&lt;/li&gt;
    &lt;li&gt;Newly installed programs will show up at the bottom of the start menu&lt;/li&gt;
    &lt;li&gt;Increased the number of items in the taskbar app's context menu (aka jump list)&lt;/li&gt;
    &lt;li&gt;More flexibility when pinning items to an app's jump list&lt;/li&gt;
    &lt;li&gt;Separation of desktop icons and gadgets&lt;/li&gt;
    &lt;li&gt;Aero peek now&amp;#160;touch-enabled&lt;/li&gt;
    &lt;li&gt;Multi-touch capabilities added to the virtual keyboard to make it more realistic&lt;/li&gt;
    &lt;li&gt;Summon the context menu with a 2 fingers -- this isn't quite as simple as it could be, but there are some reasons why a 2-finger tap isn't viable&lt;/li&gt;
    &lt;li&gt;Touch enhancements to select and drag/drop content&lt;/li&gt;
    &lt;li&gt;Simplified networking options in system tray and return of the connected-but-no-internet indicator&lt;/li&gt;
    &lt;li&gt;User Account Control (UAC) tweaks&lt;/li&gt;
    &lt;li&gt;Auto-lock a machine without applying a screensaver&lt;/li&gt;
    &lt;li&gt;Return of the high performance power option from the system tray&lt;/li&gt;
    &lt;li&gt;Clearer communication about preview vs. saved theme changes&lt;/li&gt;
    &lt;li&gt;Reliability enhancements to Windows Media Player for internet radio&lt;/li&gt;
    &lt;li&gt;Digital camcorder/camera video playback improvements&lt;/li&gt;
    &lt;li&gt;Cleaner "now playing" view in Windows Media Player&lt;/li&gt;
    &lt;li&gt;Content that Windows Media Player cannot play won't show up in the library -- this might be confusing to some, but it sounds like a good option; I'd probably opt for a dimmed color and icon depicting its unplayable status&lt;/li&gt;
    &lt;li&gt;Changed Windows Media Player to resume playback of content after returning from sleep&lt;/li&gt;
    &lt;li&gt;Introduction of Windows Media Player sync relationships dialog will be reverted -- classic case of why betas are important&lt;/li&gt;
    &lt;li&gt;Easier, quicker access to advanced playback settings in Windows Media Player&lt;/li&gt;
    &lt;li&gt;Windows Media Player's jump list now includes content launced from outside of WMP&lt;/li&gt;
    &lt;li&gt;Worked with hardware vendors to make it easier to get more devices to support Device Stage --&amp;#160;if you&amp;#160;don't know what Device Stage is (I didn't), &lt;a href="http://www.microsoft.com/windows/windows-7/beta-videos.aspx?vindex=8"&gt;watch this&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Improved headphone experience&lt;/li&gt;
    &lt;li&gt;Increased audio reliability&lt;/li&gt;
    &lt;li&gt;Improved Windows Explorer header to enhance new "libraries" capability&lt;/li&gt;
    &lt;li&gt;Drag and drop enhancements when dealing with libraries&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Win+E was opening libraries, but will return to open My Computer, as it does today &lt;/strong&gt;-- I'm glad to see this because I haven't found a use for libraries, yet&lt;/li&gt;
    &lt;li&gt;Added FAT32 support for libraries&lt;/li&gt;
    &lt;li&gt;Arrangement view enhancements for libraries&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Performance enhancements abound&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are really only 4 of these that I'm looking forward to, but it's still a surprisingly large list. I'm looking forward to the RC. Rumor has it we'll see a public release in April. Part of me expects it to be sooner, but I have no idea.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=iKVhf-kFTCc:bIzGDqmImEU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=iKVhf-kFTCc:bIzGDqmImEU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=iKVhf-kFTCc:bIzGDqmImEU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/iKVhf-kFTCc" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Fri, 27 Feb 2009 02:57:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1091</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1091/Windows-7-RC-Enhancements.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1090/Failure-to-Yield-RightofWay.aspx#Comments</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1090</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1090&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Failure to Yield Right-of-Way</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/5DqUeqmz2L4/Failure-to-Yield-RightofWay.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Yield" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2009/yield.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;I'm one of the many .NET developers out there that neglects the enhancements in the framework. Not that I mean to, I just keep a running tally of things I need to catch up on, but rarely make the time to actually do any of them. In an effort to shame myself into taking care of a few of these things, I decided to dig into something I haven't spent any time trying to understand: the &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt; keyword, introduced in C# 2.0. I have to say, I was surprised at how simple it was... well, almost.&lt;/p&gt;
&lt;p&gt;To attempt the obligatory textual description: &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt;, in conjunction with a &lt;span class="Code"&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;/span&gt; or &lt;span class="Code"&gt;&lt;span class="keyword"&gt;break&lt;/span&gt;&lt;/span&gt; statement, tells the compiler that the code block should be treated as an iterator. This means the code block must return an instance of &lt;span class="Code"&gt;System.Collections.&lt;span class="class"&gt;IEnumerable&lt;/span&gt;&lt;/span&gt;; but that will be almost completely hidden from you. All you need to do is "yield" each value within a loop. The compiler will wrap your code block and return each value as the enumerator is traversed.&lt;/p&gt;
&lt;p&gt;There. Plain as day, right? Doubt it.&lt;/p&gt;
&lt;p&gt;While reading about the feature, I was reminded about how crappy some help can be. I just wanted a code snippet to show me what I might do without the &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt; keyword and then what I'd do with it. Here's what you are probably writing today...&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;strong&gt;&lt;span class="class"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="class"&gt;User&lt;/span&gt;&amp;gt;&lt;/strong&gt; GetUsers(&lt;span class="class"&gt;IDataReader&lt;/span&gt; reader)&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="comment"&gt;// convert to list of users&lt;/span&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;span class="class"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="class"&gt;User&lt;/span&gt;&amp;gt; users = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="class"&gt;User&lt;/span&gt;&amp;gt;();&lt;/strong&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;while&lt;/span&gt; (reader.Read())&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="class"&gt;User&lt;/span&gt; user = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;User&lt;/span&gt;();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="comment"&gt;// set user properties from reader&lt;/span&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;users.Add(user);&lt;/strong&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="comment"&gt;// return&lt;/span&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; users;&lt;/strong&gt;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;This is pretty basic stuff. Now, let's look at how you'd do it with the &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt; keyword...&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;strong&gt;&lt;span class="class"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="class"&gt;User&lt;/span&gt;&amp;gt;&lt;/strong&gt; GetUsers(&lt;span class="class"&gt;IDataReader&lt;/span&gt; reader)&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="comment"&gt;// convert to list of users&lt;/span&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;while&lt;/span&gt; (reader.Read())&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="class"&gt;User&lt;/span&gt; user = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;User&lt;/span&gt;();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="comment"&gt;// set user properties from reader&lt;/span&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;span class="keyword"&gt;yield return&lt;/span&gt; user;&lt;/strong&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;If you didn't catch it, we were able to get rid of the code that uses the &lt;span class="Code"&gt;&lt;span class="class"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="class"&gt;User&lt;/span&gt;&amp;gt;&lt;/span&gt; instance. Sure, only 3 lines, but less code is typically better -- assuming we're not sacrificing readability. Those who're paying a little more attention probably noticed the fourth line that changed (well, technically, it was the first): the return type. Since &lt;span class="code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt; only knows about &lt;span class="Code"&gt;&lt;span class="class"&gt;IEnumerable&lt;/span&gt;&lt;/span&gt; (and &lt;span class="Code"&gt;&lt;span class="class"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;, by proxy), we have to change the return type to match that. I have to admit, I didn't like this. Using &lt;span class="Code"&gt;&lt;span class="class"&gt;IEnumerable&lt;/span&gt;&lt;/span&gt; basically means I'm stuck with &lt;span class="Code"&gt;&lt;span class="keyword"&gt;foreach&lt;/span&gt;&lt;/span&gt; blocks, which I hate using. This led me to investigating performance.&lt;/p&gt;
&lt;p&gt;If you really want to know about the performance benefits of for vs. foreach, check out &lt;a href="http://www.bluebytesoftware.com/blog"&gt;Joe Duffy's blog&lt;/a&gt;&amp;#160;&lt;a href="http://www.bluebytesoftware.com/blog/SyndicationService.asmx/GetRss"&gt;&lt;img title="Syndicated feed" border="0" alt="Syndicated feed" width="16" height="16" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" /&gt;&lt;/a&gt;. Joe works on the PLINQ team and has &lt;a href="http://www.bluebytesoftware.com/blog/2008/09/21/TheCostOfEnumeratingInNET.aspx"&gt;a very nice post about perf considerations&lt;/a&gt;. From the limited tests I ran, I started to see horrid performance when using &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt;. Then, I reallized I probably needed to bump up my iterations to make it a bit more meaningful. Once I got into 10-50,000 iterations, I started seeing &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt; come out on top -- or, at least making it a better race. This goes along with what Joe talks about: you pay the cost of having the enumerator, which costs a lot, but will make up for it over the long haul, assuming you have a lot of iterations.&lt;/p&gt;
&lt;p&gt;This isn't the whole story, tho. I ran this on a single core machine. Using a multi-core machine will produce better results. Why? Because &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt; is multi-threaded. What actually happens is, when you call a method that uses &lt;span class="Code"&gt;&lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;/span&gt;, it maintains a reference to that method. Then, your code will get an enumerator for it, typically via a &lt;span class="Code"&gt;&lt;span class="keyword"&gt;foreach&lt;/span&gt;&lt;/span&gt; block. All this happens without actually touching your method. Within the &lt;span class="Code"&gt;&lt;span class="keyword"&gt;foreach&lt;/span&gt;&lt;/span&gt; block, you actually reference the instance associated with the enumerator's location (i.e. &lt;span class="Code"&gt;users[i]&lt;/span&gt; in a &lt;span class="Code"&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;/span&gt; block). When you access the instance, that's when .NET actually digs into your method to get the next instance. The benefit of this is that you only process what you need to process. If you only need to loop thru 10 of the 1000 records, you only process 10, whereas all 1000 would be loaded into memory with the typical approach.&lt;/p&gt;
&lt;p&gt;It's all a bit fuzzy until you play with it. I'd recommend creating a simple test to walk thru it yourself, if you really want to get a feel for it. It's as simple as debugging a test. As a matter of fact, &lt;a href="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2009/yield.zip"&gt;here's a simple MSTest project that walks thru it&lt;/a&gt;. Hopefully, this helps you understand what's going on.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=5DqUeqmz2L4:AtgacPy_AnA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=5DqUeqmz2L4:AtgacPy_AnA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=5DqUeqmz2L4:AtgacPy_AnA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/5DqUeqmz2L4" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Fri, 30 Jan 2009 05:52:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1090</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1090/Failure-to-Yield-RightofWay.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1089/Default.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1089</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1089&amp;PortalID=2&amp;TabID=142</trackback:ping><title>PowerShell Tip: Out-Null is to PowerShell What Duct Tape is to Mouth</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/voDXYVwYIxU/Default.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="PowerShell" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/powershell.png" /&gt;&lt;/p&gt;
&lt;p&gt;There are a number of commands in PowerShell that aren't as "quiet" as you may want them to be. Sometimes, there are parameters to supress output, but not always. Fortunately, we have &lt;span class="Code"&gt;&lt;span class="command"&gt;Out-Null&lt;/span&gt;&lt;/span&gt;. While seemingly simple, this is a priceless cmdlet. I use it when writing scripts to keep the output clean.&lt;/p&gt;
&lt;p&gt;Perhaps the simplest explanation of this cmdlet is to show a very common function, &lt;span class="Code"&gt;&lt;span class="command"&gt;md&lt;/span&gt;&lt;/span&gt;, which creates a new directory. For the uninitiated, this function is available to support backwards-compatibility to DOS. You may have caught that I referred to this as a function and not an alias to a cmdlet. Based on that, if you want to see what the function is, simply use &lt;span class="Code"&gt;&lt;span class="command"&gt;Get-Content&lt;/span&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p class="code"&gt;PS C:\Flanakin&amp;gt; &lt;span class="command"&gt;Get-Content&lt;/span&gt; function:md&lt;br /&gt;
&lt;span class="keyword"&gt;param&lt;/span&gt;([&lt;span class="keyword"&gt;string&lt;/span&gt;[]]$paths); &lt;span class="command"&gt;New-Item&lt;/span&gt; &lt;span class="parameter"&gt;-type&lt;/span&gt; directory &lt;span class="parameter"&gt;-path&lt;/span&gt; $paths&lt;/p&gt;
&lt;p&gt;As you can see, &lt;span class="Code"&gt;&lt;span class="command"&gt;md&lt;/span&gt;&lt;/span&gt; simply makes a call to &lt;span class="Code"&gt;&lt;span class="command"&gt;New-Item&lt;/span&gt;&lt;/span&gt; and tells it to create a directory with the specified path. Pretty simple. Here's what the output looks like.&lt;/p&gt;
&lt;p class="code"&gt;PS C:\Flanakin&amp;gt; &lt;span class="command"&gt;md&lt;/span&gt; noisy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Directory: Microsoft.PowerShell.Core\FileSystem::C:\Flanakin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LastWriteTime&amp;#160;&amp;#160;&amp;#160;&amp;#160; Length Name&lt;br /&gt;
----&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -------------&amp;#160;&amp;#160;&amp;#160;&amp;#160; ------ ----&lt;br /&gt;
d----&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1/27/2009&amp;#160;&amp;#160; 2:51 PM&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; noisy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS C:\Flanakin&amp;gt;&lt;/p&gt;
&lt;p&gt;I don't know about you, but that's a lot more than I really care to know. Oh, and note the 6 extra lines. Bleh! &lt;img alt="" src="http://www.michaelflanakin.com/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/confused_smile.gif" /&gt; Luckily, &lt;span class="Code"&gt;&lt;span class="command"&gt;Out-Null&lt;/span&gt;&lt;/span&gt; will save us.&lt;/p&gt;
&lt;p class="code"&gt;PS C:\Flanakin&amp;gt; &lt;span class="command"&gt;md&lt;/span&gt; quiet | &lt;span class="command"&gt;Out-Null&lt;/span&gt;&lt;br /&gt;
PS C:\Flanakin&amp;gt;&lt;/p&gt;
&lt;p&gt;That's it! You gotta love something so simple.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=voDXYVwYIxU:7rCE-qzNocU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=voDXYVwYIxU:7rCE-qzNocU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=voDXYVwYIxU:7rCE-qzNocU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/voDXYVwYIxU" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Tue, 27 Jan 2009 19:15:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1089</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1089/Default.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1087/Lessons-Learned-from-the-Great-Zune-Massacre.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1087</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1087&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Lessons Learned from the Great Zune Massacre</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/HSKV6i--20U/Lessons-Learned-from-the-Great-Zune-Massacre.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="Zune" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/zune.png" /&gt;&lt;/p&gt;
&lt;p&gt;I was thinking about the &lt;a href="http://zuneinsider.com/archive/2008/12/31/30gb-zune-issues-official-update.aspx"&gt;Dec 31, 2008 debacle Zune went thru&lt;/a&gt;, where the devices didn't work for a &lt;a href="http://www.engadget.com/2008/12/31/zune-30gb-brickification-acknowledged-microsoft-says-to-wait-it/"&gt;24 hr period&lt;/a&gt;. If you didn't hear about it, &lt;a href="http://www.aeroxp.org/2009/01/zune-30-bug-overinflated/"&gt;the problem was due to a device driver&lt;/a&gt;, which wasn't controlled by Microsoft. This is exactly the problem Microsoft has to deal with: crappy hardware vendors. I remember the sad, sad day I found out the Zune was built using Toshiba hardware. I have hoped so much that this would change, but it hasn't, yet... yet. I say that, not knowing of things to come, but hoping that Microsoft will realize the err in&amp;#160;its ways. &lt;a href="http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/888/Microsoft-Needs-to-Sell-Hardware.aspx"&gt;Microsoft should take tighter control over hardware&lt;/a&gt; by using quality hardware vendors. Hell, the Zune issue is nothing compared to the red ring of death issues the Xbox faces. I don't know anything about the Xbox hardware, tho, so I can't say much about that. Heck, Microsoft can't either, considering they haven't fixed the problem yet, as far as I know. I'd like to see Microsoft either form a division focused on delivering great hardware --&amp;#160;like phones, Zunes, Xboxes, desktops, and laptops -- or pony up and buy a company. There has been &lt;a href="http://search.live.com/results.aspx?q=zune+phone"&gt;a lot of speculation&lt;/a&gt; to that effect with the &lt;a href="http://www.microsoft.com/presspass/press/2008/feb08/02-11Acquisition.mspx?rss_fdn=Press%20Releases"&gt;purchase of Danger in early 2008&lt;/a&gt;, but Microsoft has claimed the "Zune Phone" won't happen. &lt;a href="http://search.live.com/results.aspx?q=zune+phone+ces+2009"&gt;That doesn't stop the rumors from piling up&lt;/a&gt;, tho. All I can say is that, if my vote was worth anything, I'd be voting for Lenovo. I've purchased 2 and am about to get another. I've even thought about replacing my desktop with a Lenovo. What's even better, tho, is the idea of having a &lt;a href="http://anythingtech.net/all-content/lenovos-android-phone-resemble-iphone/"&gt;Lenovo phone&lt;/a&gt;. As much as I like my &lt;a href="http://www.htc.com/www/product.aspx?id=49518"&gt;HTC Touch Pro (AT&amp;amp;T Fuze)&lt;/a&gt; -- minus the crap AT&amp;amp;T does to it, that is -- my love affair with Lenovo laptops really has me lusting after their new phone. If only it'd make it to the US... along with the &lt;a href="http://www.htc.com/www/product.aspx?id=64790"&gt;HTC Touch HD&lt;/a&gt;, which I still want. All this really boils down to one question, in my mind: Will Microsoft reconsider a higher level of control after dealing with one problem after another from hardware vendors? I kind of doubt it, but I'll keep&amp;#160;hope alive.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=HSKV6i--20U:kgX0Z7TquQw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=HSKV6i--20U:kgX0Z7TquQw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=HSKV6i--20U:kgX0Z7TquQw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/HSKV6i--20U" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Tue, 06 Jan 2009 15:11:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1087</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1087/Lessons-Learned-from-the-Great-Zune-Massacre.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1086/Getting-the-Value-of-a-Dependency-Property.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1086</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1086&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Getting the Value of a Dependency Property</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/r35rLa4tTVU/Getting-the-Value-of-a-Dependency-Property.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="WPF/Silverlight" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/xaml.png" /&gt;&lt;/p&gt;
&lt;p&gt;WPF and Silverlight have a daunting learning curve. There's no doubt about it. All we can do is take one bite at a time and, eventually, &lt;a href="http://search.live.com/results.aspx?q=%22how+do+you+eat+an+elephant%22"&gt;we'll finish the elephant&lt;/a&gt;. I've talked about&amp;#160;&lt;a href="http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1081/WPF-and-Silverlight-XAML-Tooling.aspx"&gt;my approach to today's&amp;#160;WPF/Silverlight&amp;#160;tooling&lt;/a&gt; and &lt;a href="http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1082/Custom-Routed-Events-in-WPF.aspx"&gt;a good intro to routed events and commands&lt;/a&gt;, but there's so much more. I haven't talked about dependency properties, but that's probably the second concept you'll have to grasp (before events/commands) as you ramp up on the wide world of XAML. I'm going to skip over it, for now, because I've found something else worth noting: how the value of dependency properties are determined. Obviously, if you don't understand the concepts behind dependency properties, you'll need to &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc794276.aspx"&gt;brush up&lt;/a&gt;, first.&lt;/p&gt;
&lt;p&gt;Traditionally, determining the value of a property is simple: you get it's value (referred to as "local value" in WPF/Silverlight). That's it. A call to &lt;span class="Code"&gt;person.FirstName&lt;/span&gt; would return the value stored in the private &lt;span class="Code"&gt;person._firstName&lt;/span&gt; field. If it hasn't been set, then the default value of that type would be used. Simple. If we need to inject any custom logic here, we typically start by doing so in the accessor. For instance, if we want to ensure the value cannot be empty, we add a check to the setter. Things can (and will) get more complex, tho. For instance, we might have a need to allow others to add in their own validation. This would traditionally be handled by an event handler with a &lt;span class="Code"&gt;&lt;span class="class"&gt;Person&lt;/span&gt;.FirstNameChanged&lt;/span&gt; event. For better or worse, this is all custom and has a lot of room for "creativity." WPF seeks to standardize this and adds a bit of a framework around dependency properties to do so. Determining the value of a dependency property is accomplished in a five-step process.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Get&lt;/li&gt;
    &lt;li&gt;Evaluate&lt;/li&gt;
    &lt;li&gt;Animate&lt;/li&gt;
    &lt;li&gt;Coerce&lt;/li&gt;
    &lt;li&gt;Validate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For the most part, these are all pretty simple to understand. The first step is arguably the most complex, in my mind, because getting the base value isn't as simple as the aforementioned &lt;span class="Code"&gt;person.FirstName&lt;/span&gt; example.&lt;/p&gt;
&lt;h2&gt;1. Get the Base Value&lt;/h2&gt;
&lt;p&gt;Obviously, you need to know what value you're working with before you can proceed, but with features like templating and property inheritance, what the heck is the value!? In school, you had PEMDAS; in WPF you have... well, something a bit more detailed.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Local value&lt;/li&gt;
    &lt;li&gt;Style triggers&lt;/li&gt;
    &lt;li&gt;Template triggers&lt;/li&gt;
    &lt;li&gt;Style setters&lt;/li&gt;
    &lt;li&gt;Theme style triggers&lt;/li&gt;
    &lt;li&gt;Theme style setters&lt;/li&gt;
    &lt;li&gt;Property value inheritance&lt;/li&gt;
    &lt;li&gt;Default value&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I'm not going to dig into each of these. I simply want to mention a few important aspects to keep in mind. First, "local value" refers to any call to &lt;span class="Code"&gt;&lt;span class="class"&gt;DependencyObject&lt;/span&gt;.SetValue()&lt;/span&gt; (i.e. &lt;span class="Code"&gt;&lt;span class="xml"&gt;&lt;span class="attribute"&gt;Height&lt;/span&gt;="123"&lt;/span&gt;&lt;/span&gt; in XAML or code or &lt;span class="Code"&gt;&lt;span class="xml"&gt;&lt;span class="attribute"&gt;Canvas.Left&lt;/span&gt;="123"&lt;/span&gt;&lt;/span&gt; in XAML). The only other thing to concern yourself with, if you're a beginner to dependency properties, is the default value. Default values are not necessarily the same as that of the underlying type. For instance, &lt;span class="Code"&gt;&lt;span class="class"&gt;FrameworkElement&lt;/span&gt;.Height&lt;/span&gt; has a default value of "NaN" (not a number), despite the fact that it's type, &lt;span class="Code"&gt;&lt;span class="keyword"&gt;double&lt;/span&gt;&lt;/span&gt;, has a default of &lt;span class="Code"&gt;0&lt;/span&gt;. Default types for dependency properties are set when the dependency property is registered.&lt;/p&gt;
&lt;h2&gt;2. Evaluate&lt;/h2&gt;
&lt;p&gt;If the value from step one derives from &lt;span class="Code"&gt;System.Windows.&lt;span class="class"&gt;Expression&lt;/span&gt;&lt;/span&gt;, such as data bindings, WPF converts that to a real value. Pretty self-explanatory.&lt;/p&gt;
&lt;h2&gt;3. Animate&lt;/h2&gt;
&lt;p&gt;If the dependency property is currently being animated, the value we've retrieved/evaluated is pretty much ignored in favor of the value set by the animation.&lt;/p&gt;
&lt;h2&gt;4. Coerce&lt;/h2&gt;
&lt;p&gt;Next is the injection of&amp;#160;custom code via the &lt;span class="Code"&gt;&lt;span class="class"&gt;CoerceValueCallback&lt;/span&gt;&lt;/span&gt; delegate, if one is registered. Being custom code, you're really left to your imagination on what you can and should do here, but one common scenario is to ensure the value is within expected bounds.&lt;/p&gt;
&lt;h2&gt;5. Validate&lt;/h2&gt;
&lt;p&gt;Lastly, we inject one last bit of custom code via the &lt;span class="Code"&gt;&lt;span class="class"&gt;ValidateValueCallback&lt;/span&gt;&lt;/span&gt; delegate, if one is registered. Validation returns a simple true of false, so there's not much you can do if you made it this far with a bad value. If validation fails, an exception is thrown. For this reason, be sure you take advantage of both coercion and validation, if you have a specific domain you're working in.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=r35rLa4tTVU:xHMOQx83XDc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=r35rLa4tTVU:xHMOQx83XDc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=r35rLa4tTVU:xHMOQx83XDc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/r35rLa4tTVU" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Sat, 03 Jan 2009 21:28:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1086</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1086/Getting-the-Value-of-a-Dependency-Property.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1085/ReSharper-Nightly-Builds-The-45-Saga.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1085</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1085&amp;PortalID=2&amp;TabID=142</trackback:ping><title>ReSharper Nightly Builds: The 4.5 Saga</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/socEJEl63wA/ReSharper-Nightly-Builds-The-45-Saga.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="ReSharper" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/resharper.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://resharper.blogspot.com/2008/07/whats-next-life-after-release.html"&gt;JetBrains started work on ReSharper 4.5 recently&lt;/a&gt;; but, more importantly, they just&amp;#160;made &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds"&gt;nightly builds available online&lt;/a&gt;. &lt;a href="http://michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1042/Resharper-Nightly-Builds-Game-On.aspx"&gt;I've said it before&lt;/a&gt; and I'll say it again:&amp;#160;this is the best Visual Studio add-in I've seen... and &lt;a href="http://www.joltawards.com/finalists.html#devenvirons"&gt;I'm not the only one who thinks so&lt;/a&gt;.&amp;#160;I'm a huge productivity geek and ReSharper helps feed my addiction to speed... as in quick. JetBrains won't give you drugs. Although, ReSharper may seem like it, when you work on a machine without it. Development without ReSharper is somewhat analogous to drug withdrawals... cold sweats, lots of twitching, and wondering if you'll be able to finish in time. Okay, maybe not, but I do dread life without it.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=socEJEl63wA:8RaA0OkOcFI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=socEJEl63wA:8RaA0OkOcFI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=socEJEl63wA:8RaA0OkOcFI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/socEJEl63wA" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Wed, 31 Dec 2008 16:31:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1085</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1085/ReSharper-Nightly-Builds-The-45-Saga.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1084/MSDN-Subscription-January-2009.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1084</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1084&amp;PortalID=2&amp;TabID=142</trackback:ping><title>MSDN Subscription: January 2009</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/1XNb-8l_7ps/MSDN-Subscription-January-2009.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="MSDN" src="http://www.michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/msdn.png" /&gt;&lt;/p&gt;
&lt;p&gt;The following consists of the &lt;strong&gt;English&lt;/strong&gt; DVD updates released under the &lt;strong&gt;MSDN Premium (Team Suite)&lt;/strong&gt; subscription level for &lt;strong&gt;January 2009&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Servers&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc&amp;#160;4614 / Part X15-28400&lt;/em&gt;
    &lt;ul&gt;
        &lt;li&gt;Microsoft Customer Care Framework 2009 (English)&lt;/li&gt;
        &lt;li&gt;Microsoft Desktop Optimization Pack 2008 R2 (English, Portuguese-Brazil, Chinese-Simplified, Chinese-Traditional, French, German, Italian, Japanese, Korean, Russian, Spanish)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Applications&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Disc&amp;#160;3099.02 / Part &lt;/em&gt;X15-28380
    &lt;ul&gt;
        &lt;li&gt;Hyper-V™ Server 2008 (Chinese-Hong Kong S.A.R., Chinese-Simplified, English, French, German, Italian, Japanese, Korean, Portuguese-Brazil, Russian, Spanish)&lt;/li&gt;
        &lt;li&gt;Microsoft Virtual PC 2007 (English, French, German, Italian, Japanese, Spanish)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the &lt;a href="http://msdn.microsoft.com/en-us/subscriptions/index/default.aspx"&gt;MSDN Subscriptions Index&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=1XNb-8l_7ps:tjg-I1OLkec:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=1XNb-8l_7ps:tjg-I1OLkec:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=1XNb-8l_7ps:tjg-I1OLkec:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/1XNb-8l_7ps" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Tue, 30 Dec 2008 13:21:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1084</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1084/MSDN-Subscription-January-2009.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1083/2008-Year-of-the-Cloud.aspx#Comments</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1083</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1083&amp;PortalID=2&amp;TabID=142</trackback:ping><title>2008: Year of the Cloud</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/Utnosfssox0/2008-Year-of-the-Cloud.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="2008: Year of the Cloud" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/2008.png" /&gt;&lt;/p&gt;
&lt;p&gt;Every year, there's one underlying theme that seems to be pushed in the technology arena more than anything.&amp;#160;This year, I feel like it's the year of the cloud. The last time I did this was five years ago, so I'll have to back-fill a few years, but here are the themes I've&amp;#160;noticed over the past 11 years.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;2008&lt;/strong&gt;: Year of the Cloud&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2007&lt;/strong&gt;: Year of User Experience&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2006&lt;/strong&gt;: Year of AJAX/Web 2.0&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2005&lt;/strong&gt;: Year of SaaS&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2004&lt;/strong&gt;: &lt;a href="http://geekswithblogs.net/flanakin/archive/2004/03/17/3066.aspx"&gt;Year of Offshore Outsourcing&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2003&lt;/strong&gt;: &lt;a href="http://geekswithblogs.net/flanakin/archive/2004/01/28/1597.aspx"&gt;Year of the Architect&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2002&lt;/strong&gt;: Year of Web Services&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2001&lt;/strong&gt;: Year of XML/.NET&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2000&lt;/strong&gt;: Year of Enterprise Java&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;1999&lt;/strong&gt;: Year of Linux&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;1998&lt;/strong&gt;: Year of the Web&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We've been approaching "the year of the &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;cloud&lt;/a&gt;" for a while, now. You can actually look back to 1998, when the web started to really catch on. A few years later, as Java started to build momentum and then .NET hit the scenes, which is when XML as a standard communication language started to catch on. Also tied to the .NET release was a huge push for&amp;#160;web services.&amp;#160;As this was more and more successful,&amp;#160;&lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;service-oriented architecture (SOA)&lt;/a&gt; started to boom. In my mind, that was a big boon to the outsourcing trends, which have seemingly quieted down a bit, but not completely. SOA also led to the &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service"&gt;software as a service (SaaS)&lt;/a&gt; trend, which triggered Microsoft's &lt;a href="http://en.wikipedia.org/wiki/Software_plus_services"&gt;software plus services (S+S)&lt;/a&gt; &lt;a href="http://www.microsoft.com/softwareplusservices"&gt;push&lt;/a&gt;, but that was more of a side story. With everything moving to the web, backed by [typically open] services, &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;asynchronous Javascript and XML (AJAX)&lt;/a&gt; was the next big push. This was tied to the "&lt;a href="http://en.wikipedia.org/wiki/Web_2.0"&gt;Web 2.0&lt;/a&gt;" moniker, which I'd argue wasn't quite what &lt;a href="http://en.wikipedia.org/wiki/Tim_Berners_Lee"&gt;Tim Berners-Lee&lt;/a&gt; intended. Either way, this led to the big push for better &lt;a href="http://en.wikipedia.org/wiki/User_experience"&gt;user experiences&lt;/a&gt;, which &lt;a href="http://michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/828/User-Interface-vs-User-Experience.aspx"&gt;many people confuse with user interface design&lt;/a&gt;. The Web 2.0 push also kept the industry on its web focus, which is&amp;#160;where&amp;#160;we are left today.&lt;/p&gt;
&lt;p&gt;It's easy to look back and see how we got here. Trends show that architectural changes typically take two or three years to gain momentum in the community, so we'll probably have a couple of years before the next major architecture peaks. The trend towards distributed computing has grown more and more, but I have a feeling things are going to start coming back a little. We've been pushing out to the web&amp;#160;for a lot of reasons; one of which is the rise of the Mac. What we've been losing out on, however, is the power of the desktop. I see the S+S push to continue, but more as an underlying theme than a strong focus. Services will continue to be the foundation, maintaining the importance of cloud computing, but the desktop will be where the processing occurs. I see Silverlight proving a huge success, which will eventually bring .NET to the Mac. This will probably bring Novell and Microsoft a little closer together, with respect to Microsoft's relationship with Mono, but this may simply be a change in focus for Mono. Oh, and when I say, "bring .NET to the Mac," I'm not talking about the scaled-down version in Silverlight. I'm talking about the real deal. I see WPF and Silverlight merging along with the smart client architecture built into .NET today. This will take more than a few years, but it seems to be inevitable. Most likely, by the time all this happens, multi-core will be a way of life, as opposed to the we-should-be-thinking-about-threading thoughts most developers have today. Armed with a strong multi-threaded foundation, which is easy to use, the combined WPF/Silverlight presentation tier will quickly overtake Flash and Air. By this time, we should also start to see more integration into our everyday lives...&lt;/p&gt;
&lt;p&gt;Okay, I'm probably getting a little out of hand here. If I go much further, we're going to be on the USS Enterprise, so I'll stop while I'm ahead. I'll just leave it at, it'll be interesting to see what's next. My money's on the power of the desktop, which we've lost over the past 10 years.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=Utnosfssox0:ultibTSl8Yg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=Utnosfssox0:ultibTSl8Yg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=Utnosfssox0:ultibTSl8Yg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/Utnosfssox0" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Fri, 05 Dec 2008 21:23:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1083</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1083/2008-Year-of-the-Cloud.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1082/Custom-Routed-Events-in-WPF.aspx#Comments</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1082</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1082&amp;PortalID=2&amp;TabID=142</trackback:ping><title>Custom Routed Events in WPF</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/7qRfmLOyYgA/Custom-Routed-Events-in-WPF.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="WPF/Silverlight (XAML)" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/xaml.png" /&gt;&amp;#160;Routed events are one of the foundational components of the WPF and Silverlight architecture. If you're not familiar with the concepts behind routed events, check out &lt;a href="http://www.softinsight.com/bnoyes"&gt;Brian Noyes&lt;/a&gt;'&amp;#160;&lt;a href="http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetRss"&gt;&lt;img title="Syndicated feed" height="16" alt="Syndicated feed" width="16" border="0" src="http://michaelflanakin.com/portals/michaelflanakin.com/images/icons/feed_16x.gif" /&gt;&lt;/a&gt; MSDN Magazine article, &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc785480.aspx"&gt;Understanding Routed Events and Commands in WPF&lt;/a&gt;. This is a great start to understanding the architecture, but Brian doesn't tackle creating your own routed events. After seemingly endless searches, I finally whipped out Reflector to get to the bottom of it. It's pretty simple, but it is different.&lt;/p&gt;
&lt;p&gt;For this scenario, I have a collection of items and I needed to raise an event when the selected item changes. Pretty basic. There are three components to this: &lt;strong&gt;(1)&lt;/strong&gt; the routed event identifier, &lt;strong&gt;(2)&lt;/strong&gt; accessor, and &lt;strong&gt;(3)&lt;/strong&gt; event raising call. Again, not too far off what we're used to, but it is slightly different.&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="keyword"&gt;public static readonly&lt;/span&gt; &lt;span class="class"&gt;RoutedEvent&lt;/span&gt; SelectedIndexChangedEvent = &lt;span class="class"&gt;EventManager&lt;/span&gt;.RegisterRoutedEvent("SelectedIndexChanged", &lt;span class="class"&gt;RoutingStrategy&lt;/span&gt;.Bubble, &lt;span class="keyword"&gt;typeof&lt;/span&gt;(&lt;span class="class"&gt;RoutedEventHandler&lt;/span&gt;), &lt;span class="keyword"&gt;typeof&lt;/span&gt;(&lt;span class="class"&gt;MyControl&lt;/span&gt;));&lt;br /&gt;
&lt;br /&gt;
&lt;span class="comment"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;
/// Occurs when the selected index changes.&lt;br /&gt;
/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="keyword"&gt;public event&lt;/span&gt; &lt;span class="class"&gt;RoutedEventHandler&lt;/span&gt; SelectedIndexChanged&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;add&lt;/span&gt; { AddHandler(SelectedIndexChangedEvent, &lt;span class="keyword"&gt;value&lt;/span&gt;); }&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;remove&lt;/span&gt; { RemoveHandler(SelectedIndexChangedEvent, &lt;span class="keyword"&gt;value&lt;/span&gt;); }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;This is where I got stuck. I tried the traditional method to raise the event:&lt;/p&gt;
&lt;p class="code"&gt;&lt;span class="comment"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;
/// Raises the &amp;lt;see cref="SelectedIndexChanged"/&amp;gt; event.&lt;br /&gt;
/// &amp;lt;/summary&amp;gt;&lt;br /&gt;
/// &amp;lt;param name="args"&amp;gt;The &amp;lt;see cref="RoutedEventArgs"/&amp;gt; instance containing the event data.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="keyword"&gt;protected virtual void&lt;/span&gt; OnSelectedIndexChanged(&lt;span class="class"&gt;RoutedEventArgs&lt;/span&gt; args)&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span class="keyword"&gt;if&lt;/span&gt; (SelectedIndexChanged != &lt;span class="keyword"&gt;null&lt;/span&gt;)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; SelectedIndexChanged(&lt;span class="keyword"&gt;this&lt;/span&gt;, args);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Obviously, we wouldn't be here if this would have worked. Luckily, all we need to do is replace the &lt;span class="code"&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;/span&gt; block: &lt;span class="Code"&gt;RaiseEvent(args)&lt;/span&gt;. I should also mention that, when you initialize the event arguments, you need to specify the routed event it's being triggered for. this is as simple as &lt;span class="code"&gt;&lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="class"&gt;RoutedEventArgs&lt;/span&gt;(SelectedIndexChangedEvent)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;There can (and probably should) be some deeper thinking with respect to the best way to make this call, but I'm not going to cover that here. I have some half-baked ideas about this as well as what hooking up a routed event &lt;em&gt;should&lt;/em&gt; look like, but I'll save that for another time.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=7qRfmLOyYgA:K_g1CL62QF0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=7qRfmLOyYgA:K_g1CL62QF0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=7qRfmLOyYgA:K_g1CL62QF0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/7qRfmLOyYgA" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Thu, 04 Dec 2008 16:38:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1082</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1082/Custom-Routed-Events-in-WPF.aspx</feedburner:origLink></item><item><comments>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1081/WPF-and-Silverlight-XAML-Tooling.aspx#Comments</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/RssComments.aspx?TabID=142&amp;ModuleID=609&amp;ArticleID=1081</wfw:commentRss><trackback:ping>http://www.michaelflanakin.com/DesktopModules/DnnForge%20-%20NewsArticles/Tracking/Trackback.aspx?ArticleID=1081&amp;PortalID=2&amp;TabID=142</trackback:ping><title>WPF and Silverlight (XAML) Tooling</title><link>http://feeds.michaelflanakin.com/~r/flanakin/~3/wgyDuJN4JI4/WPF-and-Silverlight-XAML-Tooling.aspx</link><description>&lt;p&gt;&lt;img style="float: right" alt="WPF/Silverlight XAML" src="http://michaelflanakin.com/portals/michaelflanakin.com/weblog/2008/xaml.png" /&gt;&lt;/p&gt;
&lt;p&gt;If you haven't played with either WPF or Silverlight, you first need to understand the tooling we have available: Visual Studio, Blend, and Design. Most people don't consider Expression Design, but I'd argue that it's perhaps the best way to get started, depending on what you're doing. This is probably common sense, but if you haven't played with each of the tools, you may not realize how valuable each is to your end goal.&lt;/p&gt;
&lt;p&gt;Any developer will most likely want to start with Visual Studio. Try it. You'll find yourself wondering where to start. If you're an old school web developer, like me, you'll stare at the XML code and wonder what to type and finally fall back on the toolbox. If you're a drag-and-drop type (either Win or Web Forms), you'll probably go directly to the toolbox. In either case, you'll most likely find it useful to tweak both the designer and XML... well, that's not completely true. If you're comfortable with XML, you'll eventually stop using the designer because it's just too much of a pain to deal with in Visual Studio. &lt;strong&gt;Visual Studio is the&amp;#160;best environment [today] if you want to modify markup or code.&lt;/strong&gt; Don't choose Visual Studio if you're a drag-and-drop type of developer. No matter what type of developer you are, however, you'll find yourself wondering if there's a better way because it just doesn't "feel" right. This is when you'll begin to wonder about that "Blend" thing you heard about.&lt;/p&gt;
&lt;p&gt;If you're proficient in Flash development or claim the "designer" moniker, you'll probably start with Expression Blend. &lt;strong&gt;Blend is the best tool to build an interface along with some key interaction details (read: animations).&lt;/strong&gt;&amp;#160; The problem with blend is, there's absolutely no intellisense in XAML, which I find ridiculous. And, just to put salt in the wound, you can't even edit code (C# and VB) files with the tool. This really drives in the fact that the tool is intended for no-code applications. These don't exist. In my experience, Blend will become less and less useful over time. Why? Because you'll start to realize you can't do everything in XAML and will have to move some things to code. This, in conjunction to run-time bindings in XAML will render the Blend design-time experience useless. Visual Studio is the same in this aspect, but it just because apparent that you'll prefer the intellisense, since you'll want to work with the XAML. Unlike Visual Studio, tho, you'll find yourself tweaking the designer more than the XAML. Coding isn't the only thing that will take you out of Blend, tho.&lt;/p&gt;
&lt;p&gt;Let's face it, most people start looking at WPF and Silverlight because they want glam. They want beautiful applications&amp;#160;with all kinds of frou-frou animations and transitions. This drives me crazy, but I'm not surprised. &lt;strong&gt;Choose WPF and/or Silverlight &lt;em&gt;not &lt;/em&gt;because it &lt;em&gt;can&lt;/em&gt; be&amp;#160;pretty, but because it's the next generation user interface technology. &lt;/strong&gt;This means, if you're building a new Windows application, don't even look at Win Forms. WPF is &lt;em&gt;the&lt;/em&gt; way to go. Microsoft hasn't said it, but Win Forms is dead to me. If you have an existing app, I'd recommend you start looking into interop scenarios. Whether you're looking at WPF and/or Silverlight as the next gen platform or not, you're still going to want that glam I mentioned. This is when you should take a look at the often ignored, red-headed step-child of the Expression suite.&lt;/p&gt;
&lt;p&gt;Today, Expression Design is a vector graphics editor. Don't expect to switch to Design for raster images (i.e. GIF, JPG, PNG) --&amp;#160;which is what I was hoping to do --&amp;#160;you'll find yourself missing crucial capabilities. I keep Paint.NET on hand for these needs.&amp;#160;&lt;strong&gt;Design is best used to build creative visual interfaces.&lt;/strong&gt;&amp;#160;I've used it to theorize and bring certain design elements to life. You might do this with windows, buttons, and other framing elements, for instance. I simply find Design to be a better interface for adding glam to my user interface. Note that I'm not referring to animations. Use Blend for animation; use&amp;#160;Design for static visual elements, like rotation, embossing, and the like.&lt;/p&gt;
&lt;p&gt;To sum it all up, here's what&amp;#160;I believe a&amp;#160;WPF/Silverlight project should looked like.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Know the difference between graphic and interaction design.&lt;/strong&gt; Essentially this is the &lt;a href="michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/828/User-Interface-vs-User-Experience.aspx"&gt;user interface vs. user experience&lt;/a&gt; debate, it's important to &lt;a href="http://michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/960/UI-vs-UX-Revisited.aspx"&gt;know the difference&lt;/a&gt; for staffing purposes. There is a difference and it's substantial. Don't assume that a graphic designer can architect an ideal interaction or vice-versa.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Get a graphic designer. &lt;/strong&gt;Unless you have an eye for graphic design, you won't be getting the eye candy you're probably looking for. If you have a passion for this, but it isn't your calling (like me), you might be able to get there eventually, but your time is probably better spent elsewhere.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Get an interaction designer. &lt;/strong&gt;The fact that we have dialog after dialog and&amp;#160;click after click proves how important this one is. I'd argue this is more important than a graphic designer, but I might be biased. The good news is, this can be learned a lot easier than the artistic nature of graphic design. Don't think you can get there without dedication, tho. There are&amp;#160;some scientific guidelines, but I have yet to see a good roadmap. It's more about opening your mind and removing yourself and what you might do from the process.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Design is&amp;#160;the graphic designer's scratch pad. &lt;/strong&gt;Whether you start with wire-frames or set your sights on the real deal, Design is great for slapping something together that will eventually be useful. Tweak and tweak and tweak&amp;#160;until&amp;#160;you get something&amp;#160;that looks right. Then, export to XAML.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Blend brings your design to life. &lt;/strong&gt;Now that you have your XAML, you'll probably need to tweak it to make it slightly more human-readable and maintainable as well as do some initial bindings and animations. This is where three worlds collide. Graphic designers will feel awkward in Blend, but will still be able to be relatively production; interaction designers don't really have a tool, so it will depend on where they came from, but Blend is arguably the best place for them to get started; and, developers are typically more code-focused, so Blend will be awkward for them, too. The bottom line is, Blend isn't the perfect tool for anyone, but it does fill a need. Use it to add interactivity to your design.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Visual Studio gets the job done.&lt;/strong&gt; When you're ready to make your app do something real, open it in Visual Studio. Arguably the worlds best development environment -- although not without its flaws -- you know why you're here. 'Nuff said.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a developer who is very comfortable with markup, I've found that this has changed for me over time. I still believe it's a great workflow that supports some moderate back-and-forth -- at least, between Visual Studio and Blend -- but my habits have changed over time. As I've become more and more familiar with XAML, I tend to create visual and interactive effects in Design and Blend, respectively, and then just look at the XAML to figure out how it's done. Occasionally, I'll open my app in Blend, but not too often. This just depends on how big of an effect I'm trying to implement.&lt;/p&gt;
&lt;p&gt;The bottom line is, get some experience in all three of these tools. You'll find your own comfort zone. It may include the all-too-bloated and usability-hating Photoshop with a XAML exporter instead of Design or augmenting XAML editing&amp;#160;with a light-weight&amp;#160;tool like &lt;a href="http://blogs.msdn.com/llobo/archive/tags/XamlPadX/default.aspx"&gt;XamlPadX&lt;/a&gt; or &lt;a href="http://www.kaxaml.com"&gt;Kaxaml&lt;/a&gt;. No matter what you grow into, know there will be growing pains. WPF and Silverlight have a huge learning curve, but you're buying into the future. The curve is there for a reason, but will hopefully be lessened as the tools improve. I'm also hoping for some major improvements in .NET 4, but I'll try to touch on that later.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=wgyDuJN4JI4:RLIsjTMhgjA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.michaelflanakin.com/~ff/flanakin?a=wgyDuJN4JI4:RLIsjTMhgjA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flanakin?i=wgyDuJN4JI4:RLIsjTMhgjA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flanakin/~4/wgyDuJN4JI4" height="1" width="1"/&gt;</description><dc:creator>Michael Flanakin</dc:creator><pubDate>Mon, 01 Dec 2008 15:51:00 GMT</pubDate><guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:1081</guid><feedburner:origLink>http://www.michaelflanakin.com/Weblog/tabid/142/articleType/ArticleView/articleId/1081/WPF-and-Silverlight-XAML-Tooling.aspx</feedburner:origLink></item></channel></rss>
