<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
   <channel>
      <title>Important .NET Feeds</title>
      <description>Aggregated blog feeds from .NET component vendors</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=dda481022640178fcceaeca5d059d021</link>
      <pubDate>Sun, 29 Nov 2009 13:50:47 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>Presenting in Europe Next Week(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/11/27/presenting-in-europe-next-week.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/11/27/presenting-in-europe-next-week.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;I’m off to Europe next week to do a bunch of technical presentations.&amp;#160; I’m presenting for 5-6 hours in a bunch of different cities, and will be doing talks that cover: ASP.NET 4 and VS 2010, ASP.NET MVC 2, and Silverlight 4.&lt;/p&gt; &lt;p&gt;Below are details on the different cities I’m visiting, and how to register to attend the talks:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://reg.payments.no/microsoft/&quot;&gt;Oslo, Norway - December 1st&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032433666&amp;amp;Culture=sv-SE&quot;&gt;Stockholm, Sweden – December 2nd&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032433863&amp;amp;Culture=da-DK&quot;&gt;Copenhagen, Denmark – December 3rd&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032433782&amp;amp;Culture=en-US&quot;&gt;Brussels, Belgium – December 4th&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I’ll also be attending the BizSpark Camp in Paris on December 8th and will be doing a presentation there as well:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032433417&amp;amp;Culture=fr-FR&quot;&gt;Paris, France – December 8th&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Hope to see some of you at once of these events in person!&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I’m also now using Twitter for quick updates and to share links. Follow me at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;twitter.com/scottgu&lt;/a&gt;&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7265713&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7265713</guid>
         <pubDate>Fri, 27 Nov 2009 00:33:49 -0800</pubDate>
      </item>
      <item>
         <title>Screenshots: Amazon Kindle 2 gets Better Battery Life and Native PDF Support(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/Gpl_k-EEk6c/ScreenshotsAmazonKindle2GetsBetterBatteryLifeAndNativePDFSupport.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/Gpl_k-EEk6c/ScreenshotsAmazonKindle2GetsBetterBatteryLifeAndNativePDFSupport.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;I love my Kindle. I've talked about this before in my quest for the perfect ebook reader:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;2006: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/SonyReaderAndAmazonKindleWillEBooksHappenThisTime.aspx&quot;&gt;Sony Reader and Amazon Kindle - Will eBooks happen this time?&lt;/a&gt; &lt;/li&gt; &lt;li&gt;2008: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/AmazonKindle.aspx&quot;&gt;Amazon Kindle&lt;/a&gt; &lt;/li&gt; &lt;li&gt;2009: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/AYearWithAnAmazonKindleAndNewKindleCases.aspx&quot;&gt;A year with an Amazon Kindle (and new Kindle Cases)&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Late 2009: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/AmazonKindleVsAmazonKindleDXTheFinalWord.aspx&quot;&gt;Amazon Kindle vs. Amazon Kindle DX - The Final Word&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;It's always come down to this. If you want to read PDFs, get a Kindle DX. The screen is larger and it's just better for 8.5x11 or A4 documents. &lt;strong&gt;The Kindle 2 is for novels and the DX is for documents. &lt;/strong&gt;At least, until now.&lt;/p&gt; &lt;p&gt;Today the situation just got a little blurrier. My Kindle 2 has been firmware version 2.0.3 for a while now. However, soon you'll get 2.3 pushed to you over wireless, or &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.amazon.com/gp/help/customer/display.html?ie=UTF8&amp;amp;nodeId=200324680&quot;&gt;you can go get it yourself manually if, like me, you can't wait&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Manually installing is trivial. Download the update, copy it to the root of your Kindle 2 via USB, go to Settings and hit Update Kindle. It'll take about 5-10 minutes.&lt;/p&gt; &lt;p&gt;Not only does the Kindle 2 get a built-in PDF reader, you also get longer battery life. How? Well, I love my Kindle, truly, but it's true that if the 3G radio is on and you forget about it, you'll find a dead Kindle in a few days, usually just before a trip. Nothing more embarrassing than telling the dude in the airline seat next to you that &quot;my book has a dead battery.&quot; ;)&lt;/p&gt; &lt;p&gt;The new firmware is smarter about when it turns the radio on and they say: &lt;em&gt;&quot;You can now read for up to 1 week on a single charge with wireless on. Turn wireless off and read for up to 2 weeks.&quot; &lt;/em&gt;I have yet to test this, but I can say that with the radio off, yes, it'll be on standby for a week or two, easy.&lt;/p&gt; &lt;p&gt;You can also manually rotate the Kindle 2 screen, previously a DX-only feature.&lt;/p&gt; &lt;p&gt;Here's how things look on the Kindle 2 with a PDF using the older firmware, then using the new 2.3 firmware. The first PDF I'm using for A-B testing is &quot;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.producingoss.com&quot;&gt;Producing Open Source Software&lt;/a&gt;&quot; from &lt;a rel=&quot;nofollow&quot; title=&quot;http://www.producingoss.com&quot; target=&quot;_blank&quot; href=&quot;http://www.producingoss.com&quot;&gt;http://www.producingoss.com&lt;/a&gt;. I also use the free ASP.NET MVC chapter from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://tinyurl.com/aspnetmvc&quot;&gt;http://tinyurl.com/aspnetmvc&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Now, a pile of screenshots because there's no other way to get the point across. Forgive me. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;You can click any of these images to get the FULL 800x600 resolution screenshot directly from my Kindle 2.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.0.3 - a PDF converted by emailing to my Kindle&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-29642_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-29642&quot; border=&quot;0&quot; alt=&quot;screen_shot-29642&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-29642_thumb.gif&quot; width=&quot;302&quot; height=&quot;402&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.3 - Same PDF viewed with the Native PDF Viewer&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10326_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10326&quot; border=&quot;0&quot; alt=&quot;screen_shot-10326&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10326_thumb.gif&quot; width=&quot;302&quot; height=&quot;402&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10328_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10328&quot; border=&quot;0&quot; alt=&quot;screen_shot-10328&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10328_thumb.gif&quot; width=&quot;402&quot; height=&quot;302&quot;/&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.3 - Wrox Book Cover viewed with the Native PDF Viewer&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10322_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10322&quot; border=&quot;0&quot; alt=&quot;screen_shot-10322&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10322_thumb.gif&quot; width=&quot;302&quot; height=&quot;402&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.3 - Wrox Book viewed with the Native PDF Viewer ROTATED&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10324_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10324&quot; border=&quot;0&quot; alt=&quot;screen_shot-10324&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10324_thumb.gif&quot; width=&quot;402&quot; height=&quot;302&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.3 - Wrox Book viewed with the Native PDF Viewer &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10323_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10323&quot; border=&quot;0&quot; alt=&quot;screen_shot-10323&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10323_thumb.gif&quot; width=&quot;302&quot; height=&quot;402&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Most importantly, is Code readable? Well, yes and no. It's readable, but it's not comfortable. It depends on the code and on the way the PDF is formatted. In the Wrox PDF example, the code was formatted kind of gray, which doesn't help given the Kindle screen. The important thing to note is that PDF formatting and fonts appear to be respected 100%. If it's clear and readable on your PC, it'll at least be readable on the Kindle, assuming the limitations of the screen hardware.&lt;/p&gt; &lt;p&gt;Note that when you rotate the screen (with the font button) that you can see the layout and text more clearly, but you'll only see the top or bottom half of the page. When you hit Prev/Next Page you'll move up and down the page before you actually turn a page. It's not perfect, but it's something. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.3 - Wrox Book with Code and Tables viewed with the Native PDF Viewer &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10329_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10329&quot; border=&quot;0&quot; alt=&quot;screen_shot-10329&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10329_thumb.gif&quot; width=&quot;302&quot; height=&quot;402&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firmware 2.3 - Wrox Book with Code and Tables viewed with the Native PDF Viewer ROTATED&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10330_2.gif&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;screen_shot-10330&quot; border=&quot;0&quot; alt=&quot;screen_shot-10330&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/AmazonKindle2getsbetterbatterylifeandNat_134E7/screen_shot-10330_thumb.gif&quot; width=&quot;402&quot; height=&quot;302&quot;/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;For a standard A4 or 8.5x11&quot; page, it's not really easy to read on a 3.6 in (91 mm) × 4.8 in screen. Expect to read PDFs rotated.&lt;/p&gt; &lt;p&gt;Your Kindle 2 just got a new lease on life. This is totally new, free functionality for your Kindle 2. It's now a competent PDF reader. If you're a coder or a PDF reader, be thrilled. Now go get it.&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/bFMCSvx34nWEPv8BaBOfEok9FYc/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/bFMCSvx34nWEPv8BaBOfEok9FYc/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/bFMCSvx34nWEPv8BaBOfEok9FYc/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/bFMCSvx34nWEPv8BaBOfEok9FYc/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=Gpl_k-EEk6c:0kYpyG5bAhU:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=Gpl_k-EEk6c:0kYpyG5bAhU:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=Gpl_k-EEk6c:0kYpyG5bAhU:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=Gpl_k-EEk6c:0kYpyG5bAhU:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=Gpl_k-EEk6c:0kYpyG5bAhU:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=Gpl_k-EEk6c:0kYpyG5bAhU:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=Gpl_k-EEk6c:0kYpyG5bAhU:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=Gpl_k-EEk6c:0kYpyG5bAhU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=Gpl_k-EEk6c:0kYpyG5bAhU:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/Gpl_k-EEk6c&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=aab58497-43df-448a-935a-cb0dfab74abf</guid>
         <pubDate>Tue, 24 Nov 2009 22:22:03 -0800</pubDate>
         <category>Reviews</category>
      </item>
      <item>
         <title>Microsoft CFO Liddell to leave by year-end(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/z6b65BAv4eI/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/z6b65BAv4eI/&lt;br /&gt;&lt;br /&gt;Microsoft Chief Financial Officer (CFO) Chris Liddell is leaving Microsoft after four years to pursue other interests, company officials announced via a November 24 press release issued quietly just before the start of the Thanksgiving holiday.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/z6b65BAv4eI&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4652</guid>
         <pubDate>Tue, 24 Nov 2009 20:33:53 -0800</pubDate>
         <category>Corporate strategy</category>
      </item>
      <item>
         <title>Microsoft isn't the only one developing a hardware-accelerated browser(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/4wqRR6olJTc/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/4wqRR6olJTc/&lt;br /&gt;&lt;br /&gt;Microsoft, with IE 9, isn't the only browser provider planning to harness hardware acceleration. Mozilla is planning to do the same with Firefox. Firefox developers have posted a prototype demonstrating the ability to take advantage of Direct2D and DirectWrite. Google is interested in the possibilities of hardware-accelerating Chrome, as well, as News.com's Stephen Shankland notes.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/4wqRR6olJTc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4650</guid>
         <pubDate>Tue, 24 Nov 2009 07:40:17 -0800</pubDate>
      </item>
      <item>
         <title>Can (and will) Microsoft keep Silverlight compatible across platforms?(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/-FRUOyQCEX0/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/-FRUOyQCEX0/&lt;br /&gt;&lt;br /&gt;Microsoft is adding more and more WPF features to Silverlight (and vice versa). But there is a downside to this strategy: By adding technologies like COM support to Silverlight, Microsoft is doing damage to its story that Silverlight is a cross-platform browser plug-in that supports Windows, Mac -- and, thanks to the Mono folks at Novell , Linux -- equally.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/-FRUOyQCEX0&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4648</guid>
         <pubDate>Tue, 24 Nov 2009 06:47:25 -0800</pubDate>
      </item>
      <item>
         <title>Oredev Keynote - Information Overload and Managing the Flow: Effectiveness and Efficiency(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/lLrhIJIb9kQ/OredevKeynoteInformationOverloadAndManagingTheFlowEffectivenessAndEfficiency.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/lLrhIJIb9kQ/OredevKeynoteInformationOverloadAndManagingTheFlowEffectivenessAndEfficiency.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;I am by no means an expert on being effective or doing things efficiently, but I do OK and I get some stuff done. Most importantly, I think, I am attempting at least to be conscious as I do work. &lt;/p&gt; &lt;p&gt;Recently I was in Malmo, Sweden presenting at the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vimeo.com/user2649908&quot;&gt;Øredev&lt;/a&gt; conference. I presented this keynote as well as a talk on ASP.NET MVC 2 and also &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/Oredev2009LIVENowRecordedClosingPanelVideo.aspx&quot;&gt;did a few panels, one of which we recorded LIVE and streamed online&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Here's my talk from that Friday keynote. I include links to each of the Creative Commons photos I used from Flickr, as well as links to each of the web pages where I did my research or where I used a diagram. I also tried to call out each place where the thoughts were not mine. &lt;/p&gt; &lt;p&gt;This talk is/was a mashup of the various techniques that I try to apply in my everyday life. There's a little GTD, a little Covey, a little Pomodoro, a little Jon Udell, a little 43 Folders, a little Merlin Mann, a little Gina Trapani, and a little Hanselman. I also show some of the tools I used to manage the flow of information in my life. I hope you enjoy it. I'm&amp;#160; pretty happy with the way it turned out, given that I was freaking out about it for a week.&lt;/p&gt; &lt;p&gt;You can &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.vimeo.com/7680468&quot;&gt;watch the talk in HD here&lt;/a&gt;, or if you're viewing this page from hanselman.com directly, you can watch it embedded below. The sound &lt;em&gt;is &lt;/em&gt;a little hot (it's overdriven by the sound guy) so please forgive us.&lt;/p&gt; &lt;iframe class=&quot;embeddedvideo&quot; src=&quot;http://vimeo.com/moogaloop.swf?clip_id=7680468&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;&lt;/iframe&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vimeo.com/7680468&quot;&gt;Scott Hanselman - Information Overload and Managing the Flow&lt;/a&gt; from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vimeo.com/user2649908&quot;&gt;Øredev&lt;/a&gt; on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/naUg5R2Q2KZ5gtAh7YL6V6641Ag/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/naUg5R2Q2KZ5gtAh7YL6V6641Ag/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/naUg5R2Q2KZ5gtAh7YL6V6641Ag/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/naUg5R2Q2KZ5gtAh7YL6V6641Ag/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lLrhIJIb9kQ:TraIaqlyp3o:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=lLrhIJIb9kQ:TraIaqlyp3o:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lLrhIJIb9kQ:TraIaqlyp3o:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lLrhIJIb9kQ:TraIaqlyp3o:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=lLrhIJIb9kQ:TraIaqlyp3o:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lLrhIJIb9kQ:TraIaqlyp3o:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=lLrhIJIb9kQ:TraIaqlyp3o:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lLrhIJIb9kQ:TraIaqlyp3o:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lLrhIJIb9kQ:TraIaqlyp3o:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/lLrhIJIb9kQ&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=e4d5cd7c-ffeb-418b-9e9e-1d8a1a5cc1f6</guid>
         <pubDate>Mon, 23 Nov 2009 14:36:03 -0800</pubDate>
      </item>
      <item>
         <title>IE8 SmartScreen in action(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/11/23/ie8-smartscreen-in-action.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/11/23/ie8-smartscreen-in-action.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Last week at PDC, as we were about to start talking to people about IE9, I saw the following notification from my Facebook account:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From: Facebook [mailto:notification+mwm5axbx@facebookmail.com] &lt;br&gt;Sent: Tuesday, November 17, 2009 10:05 AM&lt;/p&gt;
&lt;p&gt;Dina posted something on your Wall and wrote:&lt;/p&gt;
&lt;p&gt;&quot;funny vid of u, you see it? http://www.facebook.com/l/ca339;hTTP://www.N70.InFO/2d&quot;&lt;/p&gt;
&lt;p&gt;To see your Wall or to write on Dina's Wall, follow the link below:&lt;/p&gt;
&lt;p&gt;&amp;lt;..&amp;gt;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;The Facebook Team&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The message was from someone I know pretty well, and I believed the message. The address itself (http://www.n70.info/2d) wasn’t that suspicious; there are a lot of URL shortening services, and the .info domain has many &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.css3.info/&quot;&gt;legitimate&lt;/a&gt; sites on it. So I clicked the it: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;IE8 SmartScreen blocking page indicating that the requested URL is unsafe&quot; src=&quot;http://ieblog.members.winisp.net/images/Dean_facebook_smartscreen.png&quot;&gt; &lt;/p&gt;
&lt;p&gt;and thought – whew.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;IE8’s SmartScreen now blocks malware sites over two million times a day. IE8 offers a lot of protection from real-world attacks: phishing protection, a cross-site scripting filter, and Protected Mode (I may run as an administrator, but my browser doesn’t). With &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.cenzic.com/pr_200911091/&quot;&gt;attacks on the rise&lt;/a&gt;, using (or upgrading to) a browser with this much protection is more important than ever. IE8 also offers great reliability because of process-isolation, and offers users the ability to manage add-ons that affect &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lifehacker.com/5318940/internet-explorer-determines-which-add+ons-slow-down-browsing&quot;&gt;performance and stability&lt;/a&gt;. InPrivate Browsing and InPrivate Filtering are also quite &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.pcmag.com/article2/0,2817,2346892,00.asp&quot;&gt;handy&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I wrote back to my friend, and she was surprised. You can read &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.facebook.com/security?v=app_10442206389&quot;&gt;Facebook’s guidance&lt;/a&gt; about what to do if this happens to you or a friend. &lt;/p&gt;
&lt;p&gt;Dean Hachamovitch&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9927527&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927527</guid>
         <pubDate>Mon, 23 Nov 2009 13:32:00 -0800</pubDate>
      </item>
      <item>
         <title>Migrating ASP.NET MVC 1.0 applications to ASP.NET MVC 2 Beta (updated!)(Eilon)</title>
         <link>http://weblogs.asp.net/leftslipper/archive/2009/11/23/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2-beta-updated.aspx</link>
         <description>http://weblogs.asp.net/leftslipper/archive/2009/11/23/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2-beta-updated.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Thanks to the great feedback I’ve received on my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/leftslipper/archive/2009/10/19/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2.aspx&quot;&gt;ASP.NET MVC conversion tool for ASP.NET MVC 2 Preview 2&lt;/a&gt; I’ve updated it to support conversions to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://go.microsoft.com/fwlink/?LinkID=157068&quot;&gt;ASP.NET MVC 2 Beta&lt;/a&gt;. I’ve included a number of bugs fixes and improvements based on the feedback:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The JavaScript files have been updated to be compatible with ASP.NET MVC 2 Beta&lt;/li&gt; &lt;li&gt;A “Scripts” folder will be automatically created if one does not already exist&lt;/li&gt; &lt;li&gt;References to the System.Web.Mvc.dll assembly will be updated to use the fully-qualified name (public key token, etc.)&lt;/li&gt; &lt;li&gt;UI improvements&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/leftslipper/image_4B614125.png&quot;&gt;&lt;img title=&quot;ASP.NET MVC Solution Converter&quot; style=&quot;border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;&quot; height=&quot;538&quot; alt=&quot;ASP.NET MVC Solution Converter&quot; src=&quot;http://weblogs.asp.net/blogs/leftslipper/image_thumb_37032DAD.png&quot; width=&quot;584&quot; border=&quot;0&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;h2&gt;Download&lt;/h2&gt; &lt;p&gt;The app is a single executable: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/leftslipper/MvcAppConverter-MVC2Beta.zip&quot;&gt;Download MvcAppConverter.zip (226 KB)&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Usage&lt;/h2&gt; &lt;p&gt;The only requirement for this tool is that you have .NET Framework 3.5 SP1 on the machine. You do not need to have Visual Studio or ASP.NET MVC installed (unless you want to open your project!). Even though the tool performs an automatic backup of your solution it is recommended that you perform a manual backup of the solution as well.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;To convert an ASP.NET MVC 1.0 project built with Visual Studio 2008 to an ASP.NET MVC 2 project in Visual Studio 2008 perform these steps: &lt;ul&gt; &lt;li&gt;Launch the converter &lt;/li&gt; &lt;li&gt;Select the solution &lt;/li&gt; &lt;li&gt;Click the “Convert” button &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;To convert an ASP.NET MVC 1.0 project built with Visual Studio 2008 to an ASP.NET MVC 2 project in Visual Studio 2010: &lt;ul&gt; &lt;li&gt;Perform the above steps, then open the project in Visual Studio 2010 and it will perform the remaining conversion steps &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;What it can do&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Open up ASP.NET MVC 1.0 projects from Visual Studio 2008 (no other versions of ASP.NET MVC or Visual Studio are supported) &lt;/li&gt; &lt;li&gt;Create a full backup of your solution’s folder &lt;/li&gt; &lt;li&gt;For every VB or C# project that has a reference to System.Web.Mvc.dll it will (this includes ASP.NET MVC web application projects as well as ASP.NET MVC test projects): &lt;ul&gt; &lt;li&gt;Update references to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Add a reference to System.ComponentModel.DataAnnotations 3.5 (if not already present) &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;For every VB or C# ASP.NET MVC Web Application it will: &lt;ul&gt; &lt;li&gt;Change the project type to an ASP.NET MVC 2 project &lt;/li&gt; &lt;li&gt;Update the root ~/web.config references to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Update the root ~/web.config to have a binding redirect from ASP.NET MVC 1.0 to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Update the ~/Views/web.config references to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Add or update the JavaScript files (add jQuery, add jQuery.Validate, add Microsoft AJAX, add/update Microsoft MVC AJAX, add Microsoft MVC Validation adapter) &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Unknown project types or project types that have nothing to do with ASP.NET MVC will not be updated &lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;What it can’t do&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;It cannot convert projects directly to Visual Studio 2010 or to .NET Framework 4. &lt;/li&gt; &lt;li&gt;It can have issues if your solution contains projects that are not located under the solution directory. &lt;/li&gt; &lt;li&gt;If you are using a source control system it might have problems overwriting files. It is recommended that before converting you check out all files from the source control system. &lt;/li&gt; &lt;li&gt;It cannot change code in the application that might need to be changed due to breaking changes between ASP.NET MVC 1.0 and ASP.NET MVC 2. Consult the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://go.microsoft.com/fwlink/?LinkID=157066&quot;&gt;readme&lt;/a&gt; for information on breaking changes. &lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;Feedback, Please!&lt;/h2&gt; &lt;p&gt;If you need to convert a project to ASP.NET MVC 2 please try out this application and hopefully you’re good to go. If you spot any bugs or features that don’t work leave a comment here and I will try to address these issues in an updated release.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7263695&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7263695</guid>
         <pubDate>Mon, 23 Nov 2009 11:55:47 -0800</pubDate>
      </item>
      <item>
         <title>Orchard team looking for a new developer(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/11/23/orchard-team-looking-for-a-new-developer.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/11/23/orchard-team-looking-for-a-new-developer.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) 2005 Bertrand Le Roy&quot; border=&quot;0&quot; alt=&quot;(c) 2005 Bertrand Le Roy&quot; align=&quot;left&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/Dragonfly_5E7683B7.jpg&quot; width=&quot;244&quot; height=&quot;164&quot;/&gt; My team is looking for a new full-time developer. The project is to build a completely new open-source CMS based on ASP.NET MVC 2. It’s a lot of fun :)&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://careers.microsoft.com/JobDetails.aspx?ss=&amp;amp;pg=0&amp;amp;so=&amp;amp;rw=1&amp;amp;jid=9434&amp;amp;jlang=EN&quot;&gt;https://careers.microsoft.com/JobDetails.aspx?ss=&amp;amp;pg=0&amp;amp;so=&amp;amp;rw=1&amp;amp;jid=9434&amp;amp;jlang=EN&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7263678&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/Edzm4a8r3dM&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7263678</guid>
         <pubDate>Mon, 23 Nov 2009 11:24:19 -0800</pubDate>
      </item>
      <item>
         <title>Office Starter 2010: The fine print on Microsoft's Works replacement(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/IjCGgtAxIUk/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/IjCGgtAxIUk/&lt;br /&gt;&lt;br /&gt;More information is coming in from various testers regarding the Office Starter 2010 build that Microsoft released to a group of selected testers late last week -- including details on macro and file type support. Do any of these make Office Starter a non-starter, in your book?&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/IjCGgtAxIUk&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4643</guid>
         <pubDate>Mon, 23 Nov 2009 07:33:23 -0800</pubDate>
      </item>
      <item>
         <title>Enabling the ASP.NET Ajax script loader for your own scripts(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/11/23/enabling-the-asp-net-ajax-script-loader-for-your-own-scripts.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/11/23/enabling-the-asp-net-ajax-script-loader-for-your-own-scripts.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) 2009 Bertrand Le Roy&quot; border=&quot;0&quot; alt=&quot;(c) 2009 Bertrand Le Roy&quot; align=&quot;left&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/IMG_2351_078C57E8.jpg&quot; width=&quot;244&quot; height=&quot;164&quot;/&gt; In previous posts, I’ve shown different ways to build a client-side class browser, using the ASP.NET Ajax Libary and jQuery.&lt;/p&gt; &lt;p&gt;In this post, I’ll focus on a few lines of code from the latest version of that sample. Those few lines of code enable my custom script to benefit from the script loader’s features such as lazy and parallel loading and dependency management.&lt;/p&gt; &lt;p&gt;An important feature of the script loader is the separation of the script meta-data from the script code itself. The meta-data can include the name of the script, its dependencies, instructions on how to figure out if it’s already loaded, its debug and release URL patterns and a declaration of the lazy components and plug-ins it introduces. The script loader can also handle composite scripts but I won’t cover that in this post.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;strong&gt;name&lt;/strong&gt; of the script is what will be used to reference it from other scripts and to generate the URL from a pattern. It shouldn’t include the “.js” extension.&lt;/li&gt; &lt;li&gt;The &lt;strong&gt;dependencies&lt;/strong&gt; and executionDependencies are each a simple array of script names that the script depends on. I’ll explain the difference in a minute.&lt;/li&gt; &lt;li&gt;The &lt;strong&gt;is loaded&lt;/strong&gt; criterion is a JavaScript expression that returns true if the script is already loaded. This is usually a test on an object that the script file defines. For example, the “templates” script uses !!(Sys.UI &amp;amp;&amp;amp; Sys.UI.Templates). It can assume Sys because it’s defined by start.js. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Debug and release patterns&lt;/strong&gt; are expressions that enable the framework to map script names into debug and release URLs. The ASP.NET Library uses “%/MicrosoftAjax{0}.debug.js” and “%/MicrosoftAjax{0}.js” where % gets replaced with the path where the script loader was downloaded from (this can be CDN or local) and {0} gets replaced with the script name. You can create your own pattern or just provide fixed URLs if you have only one script file. The debug pattern is optional.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lazy components and plug-ins&lt;/strong&gt; are helpers that the script loader can create for you and that enable developers to start using your components before they are even loaded and hide the script loading aspects as much as possible. For example, it’s that feature that enables you to write this while still having only start.js loaded: &lt;pre class=&quot;code&quot;&gt;Sys.create.dataView(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#myDataView&quot;&lt;/span&gt;, { data: myData
});&lt;/pre&gt;
The code that needed to be written for this helper to be created was this: &lt;pre class=&quot;code&quot;&gt;behaviors: [&lt;span style=&quot;color:maroon;&quot;&gt;&quot;Sys.UI.DataView&quot;&lt;/span&gt;]&lt;/pre&gt;
This gets automatically transformed by the script loader into the Sys.create.dataView method, before it even tries to load the actual script that defines Sys.UI.DataView. And if you have jQuery loaded as well, you’ll also get a jQuery plug-in out of it for free, which means that you can do: &lt;pre class=&quot;code&quot;&gt;$(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.data&quot;&lt;/span&gt;).dataView({data: myData});&lt;/pre&gt;
and instantiate DataView controls over the results of a selector query in one operation. Groovy. Of course, you can do the same with the behaviors and controls that you write in your own scripts, with lots of options to customize names, add parameters, etc. &lt;/li&gt;
&lt;/ul&gt; &lt;p&gt;In the case of the class library code, here’s the meta-data declaration code that I had to write:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;Sys.loader.defineScript({ name: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;classBrowserTree&quot;&lt;/span&gt;, releaseUrl: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;%/TreejQuery.js&quot;&lt;/span&gt;, executionDependencies:&lt;br /&gt; [&lt;span style=&quot;color:maroon;&quot;&gt;&quot;jQuery&quot;&lt;/span&gt;, &lt;span style=&quot;color:maroon;&quot;&gt;&quot;Templates&quot;&lt;/span&gt;, &lt;span style=&quot;color:maroon;&quot;&gt;&quot;ComponentModel&quot;&lt;/span&gt;], isLoaded: !!(window.jQuery &amp;amp;&amp;amp;&lt;br /&gt; window.jQuery.fn.classBrowserTreeView)
});&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This declares that my script, named “classBrowserTree”, can be found at the URL TreejQuery.js relative to the base URL of the script loader, that it depends on jQuery, Templates and ComponentModel (which themselves have their own dependencies) and that the loader can determine whether it’s already loaded by evaluating the classBrowserTreeView jQuery plug-in.&lt;/p&gt; &lt;p&gt;Now, loading that script and all its dependencies is as simple as writing this:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;Sys.require(Sys.scripts.classBrowserTree);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Notice that as you’re typing this, you actually get full IntelliSense in Visual Studio on the name of the script, which is great for speed and to avoid typos:&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:5px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;ScriptLoaderIntelliSense&quot; border=&quot;0&quot; alt=&quot;ScriptLoaderIntelliSense&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/ScriptLoaderIntelliSense_10B86D5C.png&quot; width=&quot;520&quot; height=&quot;387&quot;/&gt; &lt;/p&gt; &lt;p&gt;One of the things that enable the script loader to do its job is a special way to write your script that makes it possible to separate the loading and parsing of the code from its execution.&lt;/p&gt; &lt;p&gt;Don’t freak out (yet) though as the code you have to introduce is very lightweight and it doesn’t prevent your script from being loaded &lt;em&gt;without&lt;/em&gt; the script loader (with a plain old script tag for example).&lt;/p&gt; &lt;p&gt;Reversely, a script that doesn’t have the special script loader code can be handled by the script loader but its dependencies must be declared using “dependencies” instead of “executionDependencies” in the meta-data declaration code, which will in effect disable the more advanced features of the script loader such as parallel loading.&lt;/p&gt; &lt;p&gt;The special code in question is the following:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;(&lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;() { &lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;execute() { &lt;span style=&quot;color:#006400;&quot;&gt;// Your code goes here.
&lt;/span&gt; } &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(window.Sys &amp;amp;&amp;amp; Sys.loader) { Sys.loader.registerScript(&lt;br /&gt; &lt;span style=&quot;color:maroon;&quot;&gt;&quot;classBrowserTree&quot;&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;, execute); } &lt;span style=&quot;color:blue;&quot;&gt;else &lt;/span&gt;{ execute(); }
})();&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;What you see here is a (function() {…})(); wrapper, which is standard practice to isolate code from the global namespace (essentially, it’s a local scope); we also have another named scope in there that we arbitrarily call “execute” (but the name doesn’t matter). This is where you’ll typically put your actual code. Then we have the bootstrapping code that looks for the script loader. If it isn’t found, the code in the execute function is immediately run. If it &lt;em&gt;is&lt;/em&gt; found, the execute function is registered with the script loader but is not immediately executed.&lt;/p&gt; &lt;p&gt;This wrapper code is what enables the script loader to do its magic. Thanks to this little bit of code, it doesn’t care at all in what order the scripts are being loaded, because it can delay the time when any script actually gets executed until all its dependencies have been successfully loaded.&lt;/p&gt; &lt;p&gt;This also allows the script loader to load scripts in parallel, even if one depends on another. Normally a script loader would have to download a dependent script first and wait for it to completely load before loading the next script. This ‘serializes’ the loading process and is not good for performance. Modern browsers can download 6 to 8 scripts simultaneously. Separating the loading of a script from its execution allows the loader to take advantage of that, and in most cases, even complex dependency trees can be downloaded completely in parallel, meaning the total time is not the sum of each script, but only the longest one.&lt;/p&gt; &lt;p&gt;Of course, in order to be wrappable, your code needs to be able to run in a non-global scope. This is good practice anyways and is relatively easy to achieve in most cases, so if it can’t, it may be a good idea to try to determine why and fix it.&lt;/p&gt; &lt;p&gt;And this is it. I hope I’ve convinced you that the script loader can help you to improve the performance of your applications at a really low cost. It also provides a very worthy client-side equivalent of the server-side ScriptManager that ASP.NET has been providing to developers for years: switching the whole application between debug and release scripts is a breeze, which minimizes the risk of deploying debug scripts in production; dependencies are being handled automatically; script combination is handled.&lt;/p&gt; &lt;p&gt;(many thanks to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/infinitiesloop&quot;&gt;Dave Reed&lt;/a&gt; for helping with this post and of course for implementing an awesome script loader)&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7262909&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/SXMcOqEZfQE&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7262909</guid>
         <pubDate>Mon, 23 Nov 2009 07:00:00 -0800</pubDate>
      </item>
      <item>
         <title>LIDNUG: Online chat with me Monday Nov 23rd(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/11/22/lidnug-online-chat-with-me-monday-nov-23rd.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/11/22/lidnug-online-chat-with-me-monday-nov-23rd.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot;&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;This past week was a busy one – with lots of announcements and cool releases happening at this year’s &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://microsoftpdc.com/&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;PDC conference&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.&amp;#160; All of the PDC keynotes and breakout sessions are now posted online for anyone to watch for free.&amp;#160; You can find sessions to watch &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://microsoftpdc.com/Sessions&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;My PDC keynote covered our new Silverlight 4 release and was on Day 2.&amp;#160; You can watch it &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/67G2Q4&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; (I start at the 1 hour, 2 minute, and 45 second mark).&lt;/font&gt;&lt;/p&gt; &lt;h3&gt;&lt;u&gt;&lt;font face=&quot;Arial&quot;&gt;LIDNUG Online Chat Monday November 23rd&lt;/font&gt;&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I’ll be doing a &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://events.linkedin.com/LIDNUG-Scott-Guthrie-Talks-Shop/pub/144324&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;free online web chat&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; Monday November 23rd at 11:30am PST where you can ask any questions about anything (including PDC announcements).&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The chat is hosted by the LIDNUG user group.&amp;#160; You can sign up and attend for free &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://events.linkedin.com/LIDNUG-Scott-Guthrie-Talks-Shop/pub/144324&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.&amp;#160; The chat will be recorded and I’ll update this post with a link to the recording when it is over.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;You can ask questions either through the chat tool – or by posting them to Twitter.&amp;#160; To ask questions via twitter simply post a tweet using this format:&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;@ScottGu #LidnugLiveQ &lt;em&gt;question goes here&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;em&gt;Post Show Update&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;: You can now download the audio version of the talk &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/6din68&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.&lt;/font&gt;&lt;/p&gt; &lt;h3&gt;&lt;u&gt;&lt;font face=&quot;Arial&quot;&gt;Other PDC Resources&lt;/font&gt;&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I’ll be doing more blog posts about some of what was announced at PDC this past week.&amp;#160; Below are a few good posts that summarize some of the announcements from my team in the meantime:&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/83wA3e&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;Silverlight 4 Overview&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/8coLxh&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;Silverlight 4 Resources&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; (includes links to all SL4 videos at PDC) &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://haacked.com/archive/2009/11/17/asp.net-mvc-2-beta-released.aspx&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;ASP.NET MVC 2 Beta&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jamessenior.com/post/News-on-the-ASPNET-Ajax-Library.aspx&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;ASP.NET AJAX Library Beta&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;&amp;#160; &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope this helps,&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Scott&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;P.S. In addition to blogging, I’m also now using Twitter for quick updates and to share links. Follow me at: &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;twitter.com/scottgu&lt;/font&gt;&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;&lt;font face=&quot;Arial&quot;&gt; (@scottgu is my twitter name)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7263333&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7263333</guid>
         <pubDate>Sun, 22 Nov 2009 23:30:16 -0800</pubDate>
      </item>
      <item>
         <title>Office Starter 2010 private beta, with 'Office to GO,' goes to testers(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/Q2ONGX9RpsE/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/Q2ONGX9RpsE/&lt;br /&gt;&lt;br /&gt;Microsoft released a bunch of public betas of various Office 2010 products this week. But it also released another one under non-disclosure to a select group of testers: Office Starter 2010. Microsoft made the code for Office Starter 2010 available to select testers via its Connect Web site late this week.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/Q2ONGX9RpsE&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4632</guid>
         <pubDate>Fri, 20 Nov 2009 08:21:02 -0800</pubDate>
      </item>
      <item>
         <title>Will Microsoft's Silverlight dampen the appeal of Google's Chrome OS?(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/G9ngLTSNpqY/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/G9ngLTSNpqY/&lt;br /&gt;&lt;br /&gt;I'm not one of those ready to write Windows an RIP certificate now that Google has finally taken (some of) the wraps off its Chrome OS. In fact, after reading through industry watchers' questions and Google's answers about it, I'm thinking that Chrome OS may not look quite so appealing by the time it rolls out in late 2010. Here's why.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/G9ngLTSNpqY&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4627</guid>
         <pubDate>Fri, 20 Nov 2009 06:40:03 -0800</pubDate>
      </item>
      <item>
         <title>Microsoft still working on an Adobe Lightroom competitor, but with a social twist(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/e1PNgq9XabA/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/e1PNgq9XabA/&lt;br /&gt;&lt;br /&gt;It's been almost two years since I first got tips about Microsoft &quot;SmartFlow,&quot; a product which allegedly was going to be a competitor with Adobe's Photoshop Lightroom post-production software for professional photographers. I had thought that incubation project may have been quietly eliminated somewhere along the way. But it's still alive and is in a new group with a new twist.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/e1PNgq9XabA&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4619</guid>
         <pubDate>Thu, 19 Nov 2009 07:28:07 -0800</pubDate>
      </item>
      <item>
         <title>RIA Services: Jumpstarting RIA Development()</title>
         <link>http://www.nikhilk.net/RIA-Services-Jumpstarting-RIA-Development.aspx</link>
         <description>http://www.nikhilk.net/RIA-Services-Jumpstarting-RIA-Development.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt=&quot;Screenshot of finished Contacts application&quot; style=&quot;float:right;margin-left:10px;margin-bottom:10px;&quot;/&gt;In my post on &lt;a rel=&quot;nofollow&quot;&gt;RIA Services: From Vision to Architecture&lt;/a&gt;, a while back (right after MIX09), I mentioned that I like to think of RIA Services as RAD for RIA. At that point we had a very early preview of framework bits with little tools support. A large part of jumpstarting your development actually centers around good tooling. VS2010 brings tooling for RIA Services (now: WCF RIA Services).&lt;/p&gt;
&lt;p&gt;Scott Hanselman demonstrated some key features used in building a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jeffhandley.com/archive/2009/11/18/contososales.aspx&quot;&gt;Contacts application&lt;/a&gt; (as shown on the right) during the keynote at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoftpdc.com&quot;&gt;PDC09&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The latest version of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.silverlight.net/getstarted/riaservices/&quot;&gt;RIA Services&lt;/a&gt; is now available for download. It works on .NET 4 and VS2010 as well. You can also check out a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.silverlight.net/learn/videos/silverlight-4-beta-videos/ria-services-support-visual-studio-2010/&quot;&gt;video tutorial&lt;/a&gt; on using RIA Services and Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;In this post, I want to highlight the range of tooling features that span from the start to getting an application up and running.&lt;/p&gt;
&lt;p style=&quot;clear:both;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/RIA-Services-Jumpstarting-RIA-Development.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=247</guid>
         <pubDate>Thu, 19 Nov 2009 01:03:31 -0800</pubDate>
         <category>Silverlight</category>
      </item>
      <item>
         <title>Pivot: Microsoft's experiment to 'view the Web as a web'(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/aAY96Qn2fDg/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/aAY96Qn2fDg/&lt;br /&gt;&lt;br /&gt;Microsoft's Live Labs -- its Research and MSN mash-up -- fielded a new test project on November 18 known as &quot;Pivot.&quot; Pivot (not to be confused with Microsoft's recently renamed PowerPivot) is meant to combine search, browsing and recommendations to create a more unified Web experience, according to a description on the Live Labs Web site.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/aAY96Qn2fDg&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4612</guid>
         <pubDate>Wed, 18 Nov 2009 15:10:44 -0800</pubDate>
      </item>
      <item>
         <title>Silverlight 4 Debuts with Killer Demos at PDC09()</title>
         <link>http://www.nikhilk.net/Silverlight4-Killer-Demos-At-PDC09.aspx</link>
         <description>http://www.nikhilk.net/Silverlight4-Killer-Demos-At-PDC09.aspx&lt;br /&gt;&lt;br /&gt;Lots of wow from this morning with Silverlight 4 (and RIA Services) taking center stage in the keynote, here at PDC09.&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/Silverlight4-Killer-Demos-At-PDC09.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=246</guid>
         <pubDate>Wed, 18 Nov 2009 14:35:45 -0800</pubDate>
         <category>Silverlight</category>
      </item>
      <item>
         <title>Microsoft shares a few tidbits on IE9 and (lots) more on Silverlight 4(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/rl9KcwIzluw/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/rl9KcwIzluw/&lt;br /&gt;&lt;br /&gt;Microsoft shared some information about what's coming in Internet Explorer 9 and Silverlight 4 during its November 18 Professional Developers Conference (PDC) keynotes.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/rl9KcwIzluw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4606</guid>
         <pubDate>Wed, 18 Nov 2009 11:20:09 -0800</pubDate>
      </item>
      <item>
         <title>Microsoft Office 2010, SharePoint 2010 public betas now available for download(Mary Jo Foley)</title>
         <link>http://feedproxy.google.com/~r/zdnet/microsoft/~3/QVjKUzCGUNg/</link>
         <description>http://feedproxy.google.com/~r/zdnet/microsoft/~3/QVjKUzCGUNg/&lt;br /&gt;&lt;br /&gt;Microsoft released on November 18 the public beta of Office 2010. It can be downloaded by anyone for free, as of 1 pm ET today, as can new public betas of SharePoint Server 2010 and Office Web Apps.&lt;img src=&quot;http://feeds.feedburner.com/~r/zdnet/microsoft/~4/QVjKUzCGUNg&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.zdnet.com/microsoft/?p=4600</guid>
         <pubDate>Wed, 18 Nov 2009 10:11:09 -0800</pubDate>
      </item>
      <item>
         <title>An Early Look At IE9 for Developers(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/11/18/an-early-look-at-ie9-for-developers.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/11/18/an-early-look-at-ie9-for-developers.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We’re just about a month after the Windows 7 launch, and wanted to show an early look at some of the work underway on Internet Explorer 9.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;At the PDC today, in addition to demonstrating some of the progress on performance and interoperable standards, we showed how IE and Windows will make the power of PC hardware available to web developers in the browser. Specifically, we demonstrated hardware-accelerated rendering of all graphics and text in web pages, something that other browsers don’t do today. Web site developers will see performance gains and other benefits without having to re-write their sites. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Performance Progress&lt;/b&gt;. Browser performance involves many different sub-systems within the browser. Different sites – and different activities within the same site – place different loads and demands on the browser. &lt;/p&gt;
&lt;p&gt;For example, two news sites might look similar to a user but have very different performance characteristics. Because of how the developers authored the sites, one site might spend most of its time in the Javascript engine and DOM, while the other site might spend most of its time in layout and rendering. A site that’s more of an “application” than a page (like web-based email, or the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Office_Web_Apps&quot;&gt;Office Web Apps&lt;/a&gt;) can exercise browser subsystems in completely different ways depending on the user’s actions. &lt;/p&gt;
&lt;p&gt;The chart below shows how much time different sites spends in different subsystems of IE. For example, it shows that one major news site spends most of its time in the script engine and marshalling, while another spends most of its time in script and rendering, and the Excel Web App spends very little of its time running script at all. &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;chart of which IE subsystems different websites spend their time in. The chart shows that each site has a very different allocation of which subsystems they spend time in.&quot; alt=&quot;chart of which IE subsystems different websites spend their time in. The chart shows that each site has a very different allocation of which subsystems they spend time in.&quot; src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_1.png&quot; longDesc=&quot;http://ieblog.members.winisp.net/misc/dean_pdc.txt&quot;&gt;&lt;/p&gt;
&lt;p&gt;Note that this chart shows the percentages of total time spent in each subsystem, not relative time between sites. It focuses on just the primary browsing sub-systems and doesn’t include “frame” functionality (like anti-phishing), or third-party software that’s running in the IE process (like toolbars, or controls like Flash). It also factors out networking since that’s dependent on the users network speed. Notice also that a site’s profile can change significantly across scenarios; for example, the Excel Web App profile for loading a file is quite different from the profile for selecting part of the sheet. &lt;/p&gt;
&lt;p&gt;The script engine is just one of these browser subsystems. There are many benchmarks for script performance. One common test of script performance is from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://webkit.org/blog/152/announcing-sunspider-09/&quot;&gt;Apple’s Webkit team&lt;/a&gt;, the SunSpider test. The chart below shows the relative performance of different browsers on the same machine running the SunSpider test. &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;chart of IE, FF, Chrome and Safari performance of Sunspider test. The IE9 results on sunspider are competitve with FF 3.6, Chrome4 and the nightly webkit build. &quot; alt=&quot;chart of IE, FF, Chrome and Safari performance of Sunspider test. The IE9 results on sunspider are competitve with FF 3.6, Chrome4 and the nightly webkit build. &quot; src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_2.png&quot; longDesc=&quot;http://ieblog.members.winisp.net/misc/dean_pdc.txt&quot;&gt;&lt;/p&gt;
&lt;p&gt;In addition to IE7 and the current “final release” versions of major browsers, we’ve included the latest pre-release “under development” builds of the major browsers. We’re just about a month after IE8 was released as part of the Windows 7 launch, and the version of IE under development is no longer an outlier.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;It is worth noting that once the differences are this small, the other subsystems that contribute to performance become much more important, and perceiving the differences may be difficult on real-world sites. That said, we remain committed to improving script performance. &lt;/p&gt;
&lt;p&gt;We’re looking at the performance characteristics of &lt;i&gt;all&lt;/i&gt; the browser sub-systems as real-world sites use them. Our goal is to deliver better performance across the board for real-world sites, not just benchmarks. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Standards Progress.&lt;/b&gt; Our focus is providing rich capabilities – the ones that most developers want to use – in an interoperable way.&amp;nbsp; Developers want more capabilities in the browser to build great apps and experiences; they want them to work in an interoperable way so they don’t have to re-write and re-test their sites again and again. The standards process offers a good means to that end.&lt;/p&gt;
&lt;p&gt;As engineers, when we want to assess progress, we develop a test suite that exercises the breadth and depth of functionality. With IE8, we delivered a highly-interoperable implementation of CSS 2.1 and contributed over 7,200 tests to the W3C. Standards that do not include validation tests are much more difficult to implement consistently, and more difficult for site developers to rely on. &lt;/p&gt;
&lt;p&gt;Some standards tests – like Acid3 – have become widely used as shorthand for standards compliance, even with some &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://shaver.off.net/diary/2008/03/27/the-missed-opportunity-of-acid-3/&quot;&gt;shortcomings&lt;/a&gt;. Acid3 tests about 100 aspects of different technologies (many still in the “working draft” stage of standardization), including many edge cases and error conditions. Here’s the latest build of IE9 running Acid3:&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;screen shot of ACID3 test showing a score of 32.&quot; alt=&quot;screen shot of ACID3 test showing a score of 32.&quot; src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_3.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;As we improve support in IE for technologies that site developers use, the score will continue to go up. A more meaningful (from the point of view of web developers) example of standards support involves rounded corners. Here’s IE9 drawing rounded corners, along with the underlying mark-up: &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;screenshot of a box with rounded corners. each corner is rounded differently. &quot; alt=&quot;screenshot of a box with rounded corners. each corner is rounded differently. &quot; src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_4.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Another example of standards support that matters to web developers is CSS3 selectors. Here’s a test page that some people in the web development community put together at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.css3.info/selectors-test/&quot;&gt;css3.info&lt;/a&gt;; it’s a good illustration of a more thorough test, and one that shows some of the progress we’ve made since releasing IE8:&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;screenshot of css3.info test page showing many passing test cases.&quot; alt=&quot;screenshot of css3.info test page showing many passing test cases.&quot; src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_5.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Community testing efforts like this one can be helpful. Ultimately, we want to work with the community and W3C and other members of the working groups to define true validation test suites, like the one that we’re all working on together for CSS 2.1, for the standards that matter to developers. For example, this &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://samples.msdn.microsoft.com/ietestcenter/html5.htm&quot;&gt;link&lt;/a&gt; tests one of the HTML5 storage APIs; some browsers (including IE8) support it today, while others don’t. &lt;/p&gt;
&lt;p&gt;The work we do here, both in the product and on test suites, is a means to an end: a rich interoperable platform that developers can rely on.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Bringing the power of PC hardware and Windows to web developers in the browser.&lt;/b&gt; The PC platform and ecosystem around Windows deliver amazing hardware innovation. The browser should be a place where the benefits of that hardware innovation shine through for web developers. &lt;/p&gt;
&lt;p&gt;We’re changing IE to use the DirectX family of Windows APIs to enable many advances for web developers. The starting point is moving all graphics and text rendering from the CPU to the graphics card using Direct2D and DirectWrite. Graphics hardware acceleration means that rich, graphically intensive sites can render faster while using less CPU. (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Charles/IE-9-Surfing-on-the-GPU-with-D2D/&quot;&gt;This interview&lt;/a&gt; includes screen captures of a few examples.) Now, web developers can take advantage of the hardware ecosystem’s advances in graphics while they continue to author sites with the same interoperable standards patterns they’re used to. &lt;/p&gt;
&lt;p&gt;In addition to better performance, this technology shift also increases font quality and readability with sub-pixel positioning:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;96 point Gabriola on a Lenovo X61 ThinkPad at 100% Zoom using GDI (note jaggies):&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img title='text &quot;Direct2D&quot; in 96pt Gabriola font using GDI rendering. The rendering looks somewhat jagged. ' alt='text &quot;Direct2D&quot; in 96pt Gabriola font using GDI rendering. The rendering looks somewhat jagged. ' src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_6.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;96 point Gabriola on a Lenovo X61 ThinkPad at 100% Zoom: Direct2D (without jaggies):&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img title='text &quot;Direct2D&quot; in 96pt Gabriola font using Direct2D rendering. The rendering looks much smoother than how it is rendered in GDI. ' alt='text &quot;Direct2D&quot; in 96pt Gabriola font using Direct2D rendering. The rendering looks much smoother than how it is rendered in GDI. ' src=&quot;http://ieblog.members.winisp.net/images/Dean_PDC_7.png&quot;&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Last week, Channel 9 interviewed several of the engineers on the team. You can find videos of the interviews here: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Charles/IE-9-Standards-and-Interoperability/&quot;&gt;Introduction, and Interoperable Standards&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Charles/IE-9-First-look-at-the-new-JS-Engine/&quot;&gt;Early look at the Script Engine&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Charles/IE-9-Surfing-on-the-GPU-with-D2D/&quot;&gt;Hardware accelerated graphics and text in the browser via Direct2D&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;While we’re still early in the product cycle, we wanted to be clear to developers about our approach and the progress so far. We’re applying the feedback from the IE8 product cycle, and we’re committed to delivering on another version of IE. &lt;/p&gt;
&lt;p&gt;Thanks, &lt;br&gt;Dean Hachamovitch &lt;br&gt;General Manager, Internet Explorer&lt;/p&gt;
&lt;p&gt;Update 11/23/09 - The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://microsoftpdc.com/Sessions/KEY02&quot;&gt;IE9 demo from PDC&lt;/a&gt; is now available.&amp;nbsp; The IE content starts around minute 48.&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9924056&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9924056</guid>
         <pubDate>Wed, 18 Nov 2009 09:23:00 -0800</pubDate>
      </item>
      <item>
         <title>PDC09 - A Call to Dream()</title>
         <link>http://www.nikhilk.net/PDC09-Call-To-Dream.aspx</link>
         <description>http://www.nikhilk.net/PDC09-Call-To-Dream.aspx&lt;br /&gt;&lt;br /&gt;Immediate thoughts after Ray Ozzie's keynote at PDC09&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/PDC09-Call-To-Dream.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=245</guid>
         <pubDate>Tue, 17 Nov 2009 11:15:12 -0800</pubDate>
         <category>(All)</category>
      </item>
      <item>
         <title>PDC week! Panel on OSS + ASP.NET(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/11/16/pdc-week-panel-on-oss-asp-net.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/11/16/pdc-week-panel-on-oss-asp-net.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;margin:0px 10px 10px 0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;left&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PDC2009Icantwait_88A8/image_3.png&quot; width=&quot;325&quot; height=&quot;88&quot;/&gt;I’ll be at PDC tomorrow, Wednesday and Thursday. If you are attending and want to say hi, you’re most likely to find me in the Web Pavilion (in the big room, next to the Surface lounge).&lt;/p&gt; &lt;p&gt;Please also join us for a panel discussion on Wednesday about Open Source on ASP.NET. We’ll have the following people on the panel to answer your questions, and ask you a few too:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Scott Hanselman&lt;/li&gt; &lt;li&gt;Shaun Walker&lt;/li&gt; &lt;li&gt;Sara Ford&lt;/li&gt; &lt;li&gt;Glenn Block&lt;/li&gt; &lt;li&gt;Clemens Vasters&lt;/li&gt; &lt;li&gt;Myself&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The discussion will be between 2PM and 3PM, in the Web Pavilion.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7257068&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/ycSUo47dUnE&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7257068</guid>
         <pubDate>Mon, 16 Nov 2009 14:13:48 -0800</pubDate>
      </item>
      <item>
         <title>Metrics in software and physics(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/11/13/metrics-in-software-and-physics.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/11/13/metrics-in-software-and-physics.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;A Horrible experiment&quot; border=&quot;0&quot; alt=&quot;A Horrible experiment&quot; align=&quot;left&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/IMG_3417_49AFDA4B.jpg&quot; width=&quot;164&quot; height=&quot;244&quot;/&gt; Every so often, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://codebetter.com/blogs/david_laribee/archive/2009/11/13/code-coverage-what-is-it-good-for.aspx&quot;&gt;somebody points out how bad of a metric code coverage is&lt;/a&gt;. And of course, on its own, it doesn’t tell you much: after all, it’s a single number. How could it possibly reflect all the subtlety (or lack thereof) of your designs and of your testing artillery? Of course, within all the various *DD approaches, some better than others enable you to know whether or not your code conforms to its requirements, but I thought I’d take a moment to reflect on the general idea of a software metric and how it relates to the mothers of all metrics: physical ones, cause you know, I used to be a scientist. Proof: the lab coat on the picture.&lt;/p&gt; &lt;p&gt;The theory of measurement is at the center of all experimental physics. This comes from the realization that any observation of the natural world is ultimately indirect.&lt;/p&gt; &lt;p&gt;For example, when you look at a red ball, you don’t directly perceive it. Rather, photons hit it, some of them are absorbed by the surface of the ball (violet, blue, green and yellow ones, but not red ones) and some of them bounce back (the red ones if you’ve been following). Those red photons that bounced back then hit your eyes, where a lens distorts their paths so that all those photons that came from a specific point on the ball converge to roughly the same spot on your retina. Then, the photoreceptor cells on the retina transform the light signal into electric impulses in your optic nerve, which conveys all that information into your brain and then, only then the complex mechanisms of conscience give you the wonderful illusion of seeing a red ball in front of your eyes.&lt;/p&gt; &lt;p&gt;The brain reconstructs a model of the universe, but what it really ever perceives is a pattern of electric impulses. Everything in between is a rather elaborate &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://rubegoldberg.com/&quot;&gt;Rube-Goldberg&lt;/a&gt; contraption that can be trusted most of the time but that is actually &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.bing.com/images/search?q=optical+illusions&quot;&gt;rather easy to fool&lt;/a&gt;. That it can be fooled at all is the simple consequence that what you observe is an indirect and partial measure of reality rather than reality itself.&lt;/p&gt; &lt;p&gt;When we measure anything in physics, we build our own devices that transform objective reality into perceivable quantities. For example, when physicists say &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://exoplanet.eu/&quot;&gt;they have “seen” a planet around a faraway sun&lt;/a&gt;, they don’t (always) mean that they put their eyes on the smaller end of a telescope and perceived the shape of that planet with their own eyes like I saw the red ball of the previous paragraph. No, what they saw is something like this on a computer monitor:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.iop.org/EJ/article/1538-4357/529/1/L45/995832.html&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:10px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;What a beautiful planet!&quot; border=&quot;0&quot; alt=&quot;What a beautiful planet!&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/fg2_73632F71.gif&quot; width=&quot;520&quot; height=&quot;355&quot;/&gt;&lt;/a&gt;This shows the very small (1.5%) variation of the light coming from the star as the planet transits in front of it. All this really tells them is that something dark that takes about 1.5% of the area of the star passed in front of it. By repeating that observation, they can see that it happens every 3.5 days. That’s it. No image, just measures of the amount of light coming out of a powerful telescope aimed at a star against time.&lt;/p&gt; &lt;p&gt;But just from that minimal data and our centuries old knowledge of celestial mechanics, researchers were able to deduce that a planet 1.27 times the size of Jupiter but 0.63 times its mass and a surface gravity about the same as Earth’s was orbiting that star. That’s an impressively precise description of a big ball of gas that is 150 light years away (that’s 1.4 million billion kilometers in case you’re wondering or 880 thousand billion miles if you insist on using an archaic unit system).&lt;/p&gt; &lt;p&gt;The Rube Goldberg device that enables us to see that big ball of gas from so far away is a mix of optics, electronics and &lt;em&gt;knowledge&lt;/em&gt;, the latter being the really awesome part. Science is awesome. The bottom line of all this is that although it seems less “direct” than seeing the red ball with our own eyes, it does just as well deserve to be described as “seeing” it. The only difference is that we’re not seeing with our eyes but more with our brains. How awesome is that?&lt;/p&gt; &lt;p&gt;Where was I?&lt;/p&gt; &lt;p&gt;Yes, you might be wondering what this has to do with software. Well, all that long digression was to show that little data is necessary to infer a lot about the object you’re observing. So code coverage? Sure, it’s just a number, but combined with a few other numbers, it can help get a reliable picture of software quality.&lt;/p&gt; &lt;p&gt;Another point I’d like to make is that a lot of resistance to software metrics comes from the illusion that we know a lot more about our own code than any tool can tell us. But as anyone who has ever tried to read code he wrote only five years ago knows, that is delusional. What you know about your code is a combination of what you remember and what you &lt;em&gt;intended&lt;/em&gt; to write, neither of which is particularly reliably representative of what your code is doing. Tools give us a much more reliable picture. Sure, it’s a narrow projection of the code and it doesn’t capture its full reality, but that is exactly the point of a measure: to project a complex object along a scale of our choosing. What set of projections you choose to make is what determines their relevance.&lt;/p&gt; &lt;p&gt;The conclusion of all this is that we should assume that our code is an unknown object that needs to be measured, like that big ball of gas 150 light years away, if we want to get an objective idea of its quality without having our judgment clouded by our own assumptions.&lt;/p&gt; &lt;p&gt;And probably the best tool you can use to do exactly this by the way is &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ndepend.com/&quot;&gt;NDepend&lt;/a&gt; by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://codebetter.com/blogs/patricksmacchia/default.aspx&quot;&gt;Patrick Smacchia&lt;/a&gt;.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7254161&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/GdOm3JDtY3o&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7254161</guid>
         <pubDate>Fri, 13 Nov 2009 23:32:00 -0800</pubDate>
      </item>
      <item>
         <title>My Favorite IE Add-on: Mouse Gestures by Ralph Hare(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/11/13/my-favorite-ie-add-on-mouse-gestures-by-ralph-hare.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/11/13/my-favorite-ie-add-on-mouse-gestures-by-ralph-hare.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I spend a lot of time dealing with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ieinternals/archive/tags/problems/default.aspx&quot;&gt;problems&lt;/a&gt; users encounter when using Internet Explorer. As a result, when I write about add-ons, I’m usually talking about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ieinternals/archive/2009/08/21/agcore-addon-hangs-Internet-Explorer.aspx&quot;&gt;misbehaving code&lt;/a&gt; that is wrecking the browser. However, it’s not all doom-and-gloom out there, and I’m delighted to share my favorite browser add-on with you.&lt;/p&gt;
&lt;p&gt;I first came across Ralph Hare’s work when perusing the IE add-on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.codeproject.com/KB/shell/MouseGestures.aspx&quot;&gt;sample code&lt;/a&gt; at CodeProject. Ralph and I both liked mouse gestures and wished that Internet Explorer offered them. For those of you who have never used mouse gestures, basically, they allow you to trigger commands like back, forward, refresh, etc, without using the keyboard or clicking on toolbar buttons or menus. While not everyone wants to use mouse gestures, some of us find them incredibly compelling. This sweet spot makes gestures the sort of feature ripe for implementation as an add-on.&lt;/p&gt;
&lt;p&gt;Fortunately for all of us, Ralph is a great developer and he put together &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/&quot;&gt;a fantastic gestures add-on&lt;/a&gt; for IE which has evolved and improved a lot over the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/history.asp&quot;&gt;last six years&lt;/a&gt;. I’ve installed his add-on on every computer I’ve used since discovering it, and I now find it annoying to use browsers that don’t support gestures. It’s an ironic turn of events for me, since I’ve been a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.bayden.com/SlickRun/&quot;&gt;keyboard snob&lt;/a&gt; for over a decade. :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What makes this add-on so great?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respect for the User&lt;/strong&gt;. The gestures add-on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2009/09/09/guidelines-for-add-on-developers.aspx&quot;&gt;respects&lt;/a&gt; your existing browser settings, and does not attempt to change your default homepage, search provider, favorites, user-agent string, etc. There’s no junk (e.g. adware, unexpected toolbars, etc) bundled with it either.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stability&lt;/strong&gt;. I’ve tried out a lot of different add-ons over the years, but almost always end up uninstalling each after a few days because they’re unstable and result in occasional or frequent browser crashes. In contrast, Ralph has delivered a rock-solid implementation of gestures; the few bugs I’ve found have been fixed quickly and the updated versions are automatically offered using an automatic notification service.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Best Practices&lt;/strong&gt;.&lt;strong&gt; &lt;/strong&gt;Ralph’s code is compiled following best-practices for &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2008/04/08/ie8-security-part-I_3A00_-dep-nx-memory-protection.aspx&quot;&gt;secure&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/aa753617(VS.85).aspx&quot;&gt;stable&lt;/a&gt; add-ons, including linking with the /NXCOMPAT and /DYNAMICBASE flags to opt-in to DEP/NX and ASLR memory protections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;. Many browser extensions are useful from time-to-time, but I’m not willing to suffer a performance penalty when not actively using an extension. For &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enhanceie.com/ie/dev.asp&quot;&gt;some types&lt;/a&gt; of extensions (menu extensions, toolbar buttons) this isn’t a problem, because the add-on code only loads when I actively use the add-on. However, an add-on like Mouse Gestures inherently needs to be available at all times, so high performance is an absolutely critical consideration.&lt;/p&gt;
&lt;p&gt;Ralph’s Browser Helper Object (BHO) is written in native C++, and designed and coded for speed. After installing, check out the &lt;em&gt;Load Time&lt;/em&gt; column inside&amp;nbsp;the IE&amp;nbsp;&lt;em&gt;Tools&lt;/em&gt; &amp;gt; &lt;em&gt;Manage Add-ons&lt;/em&gt; dialog:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Load Time Column in the Manage Add-ons Dialog&quot; src=&quot;http://ieblog.members.winisp.net/images/eric_gestures_1.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;As mentioned previously, the extension offers an auto-update mechanism, but Ralph ensures that this won't hurt startup performance. He does so by running the check in a background thread, and waiting for about a minute after tab startup to kick off the webservice call. Ralph also sets the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsxp.mvps.org/noexplorer.htm&quot;&gt;NoExplorer registry key&lt;/a&gt; to prevent his BHO from loading inside Windows Explorer. &lt;/p&gt;
&lt;p&gt;Even the default configuration is optimized for performance: by default, mouse trails aren’t shown, and if a user wants them, they can choose between &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/trails_basic.asp&quot;&gt;basic trails&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Basic Mouse Trails&quot; src=&quot;http://ieblog.members.winisp.net/images/eric_gestures_2.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;which work fine with all video cards, and the slightly fancier &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/trails_advanced.asp&quot;&gt;advanced trails&lt;/a&gt;&lt;em&gt;:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Advanced Mouse Trails&quot; src=&quot;http://ieblog.members.winisp.net/images/eric_gestures_3.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;which work best with higher-end hardware.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cross-Version Support&lt;/strong&gt;. Mouse Gestures is compiled in both 32-bit and 64-bit flavors (installed individually) making the gestures add-on one of the very few available for 64-bit IE. The add-on works in all versions of IE and I’ve personally used it on Windows XP, Server 2003, Vista, Server 2008, and Windows 7 without problems. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ease-of-Installation&lt;/strong&gt;. The 32bit and 64bit installers together weigh in just under 1 megabyte. The add-on is packaged using the same &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://nsis.sourceforge.net/Download&quot;&gt;NSIS installer&lt;/a&gt; that I use to install Fiddler. &lt;/p&gt;
&lt;p&gt;If you decide you don’t like the add-on, you can easily uninstall it using the &lt;em&gt;Add/Remove Programs&lt;/em&gt; control panel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customizability and Power&lt;/strong&gt;. You can customize its options using the &lt;em&gt;Mouse Gestures… &lt;/em&gt;item added to the browser &lt;em&gt;Tools &lt;/em&gt;menu. The configuration dialog allows you to assign gestures to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/builtin.asp&quot;&gt;built-in actions&lt;/a&gt;, define new gestures or actions, and change the appearance of mouse trails.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mouse Gestures Actions Customization Menu&quot; src=&quot;http://ieblog.members.winisp.net/images/eric_gestures_4.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;The most common gesture I use is&lt;em&gt; Down,Right &lt;/em&gt;which by default is bound to the &lt;em&gt;Close Tab&lt;/em&gt; action. I’ve also bound the &lt;em&gt;Down,Up&lt;/em&gt; and &lt;em&gt;Up,Down&lt;/em&gt; gestures to the &lt;em&gt;Toggle FullScreen Mode &lt;/em&gt;action; this is slightly simpler than hunting for the F11 key on my small but beloved Lenovo X200. &lt;/p&gt;
&lt;p&gt;If you’d like, you can bind any gesture to open any of your browser Favorites in the current tab, or a new foreground or background tab.&lt;/p&gt;
&lt;p&gt;One of the most powerful features of the add-on allows you to bind a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/scripts.asp&quot;&gt;JavaScript file&lt;/a&gt; to an action. I use this feature to bind a simple &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enhanceie.com/dl/RemoveImages.js&quot;&gt;page cleanup script&lt;/a&gt; to the &lt;em&gt;Left,Right&lt;/em&gt; gesture. When I’m reading an online newspaper or similar page with flashing images or other unwanted distractions, I simply hold the right mouse button and waggle the mouse—all of the images and flash objects are instantly removed, allowing me to read in peace.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mouse Gestures General Customization Menu&quot; src=&quot;http://ieblog.members.winisp.net/images/eric_gestures_5.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Price&lt;/strong&gt;. Mouse Gestures add-on is clearly a labor of love, and Ralph makes it available for free. If you’d like, you can help defray his web hosting costs using the unobtrusive “Donate via Paypal” link buried at the bottom of his site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you’re willing to get hooked on a new way of interacting with your browser, give Ralph’s &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ysgyfarnog.co.uk/utilities/mousegestures/&quot;&gt;Mouse Gestures&lt;/a&gt; add-on a try, and join me in thanking Ralph Hare for his great work!&lt;/p&gt;
&lt;p&gt;Eric Lawrence&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9906939&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906939</guid>
         <pubDate>Fri, 13 Nov 2009 14:45:00 -0800</pubDate>
      </item>
      <item>
         <title>Our little team is growing - Welcome to Jon Galloway and Pete Brown(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/i-6GOJVi0UI/OurLittleTeamIsGrowingWelcomeToJonGallowayAndPeteBrown.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/i-6GOJVi0UI/OurLittleTeamIsGrowingWelcomeToJonGallowayAndPeteBrown.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 0px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;stoninja&quot; border=&quot;0&quot; alt=&quot;stoninja&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/111c782b4740_B250/stoninja_3.png&quot; width=&quot;250&quot; height=&quot;260&quot;/&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Just about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/bluebadge.aspx&quot;&gt;two years ago I joined Microsoft&lt;/a&gt;. I'm fortunate to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/NewJobNewHouseNewBabyAndDesigningATotallyNewHomeOffice.aspx&quot;&gt;work in a home office&lt;/a&gt; with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/shanselman/stoninja&quot;&gt;a great team&lt;/a&gt; that I &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/HanselminutesOn9ManagingPeopleAndWisdomWithChrisSells.aspx&quot;&gt;now lead&lt;/a&gt;. We work for the group at Microsoft that runs &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.msdn.com&quot;&gt;MSDN&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.technet.com&quot;&gt;TechNet&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net&quot;&gt;ASP.NET&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://Silverlight.NET&quot;&gt;Silverlight.NET&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://WindowsClient.NET&quot;&gt;WindowsClient.NET&lt;/a&gt;, basically all the online education stuff. The giant group is called STO (Server &amp;amp; Tools Online) and our little group is &quot;&lt;em&gt;stoninja&lt;/em&gt;.&quot; That's our internal mailing alias. &lt;/p&gt; &lt;p&gt;We create content for all of the sites above but we're also active members of the community. We listen and drive feedback back into the product group. We're not part of the product evangelism group (DPE - Developer Platform Evangelism), but rather we focus primarily on online content creation. I like to think that we're the team that happens you after you go File|New Project, although we're constantly influencing what happens on both sides.&lt;/p&gt; &lt;p&gt;Fast forward to today and my little team is growing. &lt;/p&gt; &lt;span style=&quot;clear:both;&quot;&gt;&lt;/span&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/jgalloway/&quot;&gt;&lt;strong&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 0px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;jon galloway&quot; border=&quot;0&quot; alt=&quot;jon galloway&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/111c782b4740_B250/jongalloway_4ecf09c1-f864-410e-a525-08dab0b527b3.jpg&quot; width=&quot;154&quot; height=&quot;184&quot;/&gt;&lt;/strong&gt;&lt;/a&gt;I'd like to announce that &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/jgalloway/&quot;&gt;&lt;strong&gt;Jon Galloway&lt;/strong&gt;&lt;/a&gt; is joining my team, he's coming to work for us via our good friends at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.vertigo.com/portland&quot;&gt;Vertigo&lt;/a&gt; (who just announced a new &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.vertigo.com/portland&quot;&gt;Vertigo Software - &lt;strong&gt;Portland &lt;/strong&gt;office&lt;/a&gt; which is cool). It's a bit of a change for Jon and it's something he's always wanted to do. Jon's official title will be Community Program Manager but I like to think of each member of the team as a Community Liaison. We're a small group, but we're sneaky (like ninjas, just fat, middle-aged somewhat pasty ninjas) and we are continually applying pressure to what we think are the right places within Microsoft.&lt;/p&gt; &lt;p&gt;You might know Jon from the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://herdingcode.com/&quot;&gt;Herding Code&lt;/a&gt; podcast he does with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://odetocode.com/&quot;&gt;K. Scott Allen&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/kdente&quot;&gt;Kevin Dente&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lazycoder.com/&quot;&gt;Scott Koon&lt;/a&gt;. You might have read the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://oreilly.com/catalog/9780980285819/&quot;&gt;ASP.NET 2.0 Anthology&lt;/a&gt; book that he worked on with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.codinghorror.com&quot;&gt;Jeff&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.haacked.com&quot;&gt;Phil&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://odetocode.com/&quot;&gt;K. Scott&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.oreillynet.com/pub/au/3169&quot;&gt;Wyatt&lt;/a&gt;. Jon's also done open source and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/jgalloway/archive/2008/08/20/subtext-2-openid-login-support.aspx&quot;&gt;works on SubText&lt;/a&gt;. Jon will be focusing on ASP.NET (all of it). He'll help get the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://asp.net&quot;&gt;http://asp.net&lt;/a&gt; site in shape and provide a much needed pragmatic view of all things web. &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;span style=&quot;clear:both;&quot;&gt;&lt;/span&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/111c782b4740_B250/petebrown_2.jpg&quot;&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 0px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;petebrown&quot; border=&quot;0&quot; alt=&quot;petebrown&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/111c782b4740_B250/petebrown_thumb.jpg&quot; width=&quot;154&quot; height=&quot;202&quot;/&gt;&lt;/a&gt; Also joined just a few weeks ago is &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.irritatedvowel.com/blog&quot;&gt;&lt;strong&gt;Pete Brown&lt;/strong&gt;&lt;/a&gt;. Pete comes to us after a long stint as .NET Architect, Project Manager, and Client Technologies Evangelist at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.appliedis.com&quot;&gt;Applied Information Sciences&lt;/a&gt; (AIS). &lt;/p&gt; &lt;p&gt;You may know Pete from his &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://silverlightc64.codeplex.com/&quot;&gt;amazing C64 Emulator port to Silverlight&lt;/a&gt;. Pete has been working on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.windowsclient.net&quot;&gt;WindowsClient.NET&lt;/a&gt; site creating content and code samples that show some of the cool stuff you can do in Windows 7. He's started a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsclient.net/learn/video.aspx?v=289850&quot;&gt;multi-part video series just recently on the Windows 7 Sensor and Location APIs&lt;/a&gt; and will be filling the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsclient.net/learn/&quot;&gt;Learn&lt;/a&gt; section with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsclient.net/learn/&quot;&gt;even more great videos&lt;/a&gt; as well as working on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.com/windows&quot;&gt;http://msdn.com/windows&lt;/a&gt;. &lt;/p&gt; &lt;span style=&quot;clear:both;&quot;&gt;&lt;/span&gt; &lt;p&gt;When I came to work at Microsoft I posted a Venn diagram that looked like this:&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/2dc61d7e4a66_13443/image.png&quot;/&gt;&lt;/p&gt; &lt;p&gt;I hope Jon and Pete's personal Venn diagram looks like mine, or since they are working from home (my whole team is remote) perhaps like this one ;)&lt;/p&gt; &lt;p&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;Venn - Times when Happy vs. Times when wearing Pants&quot; border=&quot;0&quot; alt=&quot;Venn - Times when Happy vs. Times when wearing Pants&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/111c782b4740_B250/slide_3512_49971_large.jpg_3.gif&quot; width=&quot;320&quot; height=&quot;234&quot;/&gt;&lt;/p&gt; &lt;p&gt;Please welcome both &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net&quot;&gt;Jon&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.irritatedvowel.com/blog&quot;&gt;Pete&lt;/a&gt; to the team! The whole team - &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com&quot;&gt;&lt;strong&gt;Me&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.misfitgeek.com&quot;&gt;&lt;strong&gt;Joe&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.silverlight.net/blogs/jesseliberty/default.aspx&quot;&gt;&lt;strong&gt;Jesse&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.timheuer.com&quot;&gt;&lt;strong&gt;Tim&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.irritatedvowel.com/blog&quot;&gt;&lt;strong&gt;Pete&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; and &lt;/strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/jgalloway/&quot;&gt;&lt;strong&gt;Jon&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;- will be at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoftpdc.com&quot;&gt;PDC&lt;/a&gt; this year so do stop us and say Hello if you're there!&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/EHnTIVT0qFAVsZ27T3vP7Q7ybx0/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/EHnTIVT0qFAVsZ27T3vP7Q7ybx0/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/EHnTIVT0qFAVsZ27T3vP7Q7ybx0/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/EHnTIVT0qFAVsZ27T3vP7Q7ybx0/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=i-6GOJVi0UI:6rM8h2vHQdc:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=i-6GOJVi0UI:6rM8h2vHQdc:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=i-6GOJVi0UI:6rM8h2vHQdc:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=i-6GOJVi0UI:6rM8h2vHQdc:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=i-6GOJVi0UI:6rM8h2vHQdc:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=i-6GOJVi0UI:6rM8h2vHQdc:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=i-6GOJVi0UI:6rM8h2vHQdc:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=i-6GOJVi0UI:6rM8h2vHQdc:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=i-6GOJVi0UI:6rM8h2vHQdc:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/i-6GOJVi0UI&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=ef8d876b-d2a8-4597-a0af-a5d2e577351f</guid>
         <pubDate>Thu, 12 Nov 2009 13:54:31 -0800</pubDate>
      </item>
      <item>
         <title>Download Podcasts with Powershell(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/7gprmpbsbS0/DownloadPodcastsWithPowershell.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/7gprmpbsbS0/DownloadPodcastsWithPowershell.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;A number of people have mentioned to me that they didn't realize that &lt;strong&gt;Powershell&lt;/strong&gt; is &lt;em&gt;included by default &lt;/em&gt;in Windows 7. If you haven't yet jumped on the Powershell bandwagon, this is a good time. Powershell 2 includes a bunch of cool features like remoting (kind of like SSH) as well as a visual IDE for writing, editing and interactively debugging Powershell scripts.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/a06d16f82b73_DA0C/Windows%20PowerShell%20ISE%20(2)_2.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;margin:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;Windows PowerShell ISE (2)&quot; border=&quot;0&quot; alt=&quot;Windows PowerShell ISE (2)&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/a06d16f82b73_DA0C/Windows%20PowerShell%20ISE%20(2)_thumb.png&quot; width=&quot;450&quot; height=&quot;388&quot;/&gt;&lt;/a&gt; &lt;p&gt;Powershell great for system administration, but I mostly use it for quick and dirty &quot;portable&quot; apps that I don't feel like writing C#/VB for. Plus, I'm using .NET anyway, so it's all the same. &lt;/p&gt; &lt;p&gt;I wanted to download all my podcasts with Powershell, so I wrote this quick script in about 5 minutes. Other improvements I (or preferably you) could make to it could be: check the file size against the enclosure and re-download partials, rename the files to included a version of the title, include a progress bar.&lt;/p&gt; &lt;p&gt;Here's what I came up with. Perhaps you'll find it useful if you're not an iTunes/Zune person:&lt;/p&gt; &lt;pre&gt;cd &quot;C:&amp;#92;users&amp;#92;scottha&amp;#92;desktop&amp;#92;Hanselminutes Complete Download&quot;&lt;br /&gt;[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath&lt;br /&gt;$a = ([xml](new-object net.webclient).downloadstring(&quot;http://feeds.feedburner.com/HanselminutesCompleteMP3&quot;))&lt;br /&gt;$a.rss.channel.item | foreach{ &lt;br /&gt; $url = New-Object System.Uri($_.enclosure.url)&lt;br /&gt; $file = $url.Segments[-1]&lt;br /&gt; $file&lt;br /&gt; if (!(test-path $file))&lt;br /&gt; {&lt;br /&gt; (New-Object System.Net.WebClient).DownloadFile($url, $file)&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;Of course you'll want to change the first line and the RSS Feed URL as you like.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/a06d16f82b73_DA0C/Hanselminutes%20Complete%20Download_2.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;Hanselminutes Complete Download&quot; border=&quot;0&quot; alt=&quot;Hanselminutes Complete Download&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/a06d16f82b73_DA0C/Hanselminutes%20Complete%20Download_thumb.png&quot; width=&quot;450&quot; height=&quot;223&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If you've never used Powershell before, note that it's locked down from running scripts be default. You'll need to run it as Administrator once and run&lt;/p&gt; &lt;pre&gt;Set-ExecutionPolicy unrestricted&lt;/pre&gt; &lt;p&gt;This opens it up to run scripts, but it's not only VBS, the scripts won't run if you double-click them. You need to run powershell then type the name of your script to run it:&lt;/p&gt; &lt;pre&gt;.&amp;#92;myscript.ps1&lt;/pre&gt; &lt;p&gt;You can always set the execution policy back if it bothers you.&lt;/p&gt; &lt;p&gt;Hope this primitive mass podcast enclosure downloader is useful.&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/9Mnzl9z0-lNLZkB_oxPQWCFK33w/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/9Mnzl9z0-lNLZkB_oxPQWCFK33w/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/9Mnzl9z0-lNLZkB_oxPQWCFK33w/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/9Mnzl9z0-lNLZkB_oxPQWCFK33w/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=7gprmpbsbS0:IyFYVVP97hw:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=7gprmpbsbS0:IyFYVVP97hw:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=7gprmpbsbS0:IyFYVVP97hw:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=7gprmpbsbS0:IyFYVVP97hw:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=7gprmpbsbS0:IyFYVVP97hw:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=7gprmpbsbS0:IyFYVVP97hw:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=7gprmpbsbS0:IyFYVVP97hw:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=7gprmpbsbS0:IyFYVVP97hw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=7gprmpbsbS0:IyFYVVP97hw:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/7gprmpbsbS0&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=ec3f80c8-7b2b-4713-90ee-898d5b30aa15</guid>
         <pubDate>Mon, 09 Nov 2009 15:38:18 -0800</pubDate>
      </item>
      <item>
         <title>Herding Cats: Organize your Desktop Icons with Stardock Fences for Windows(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/-sPcg8aSXEk/HerdingCatsOrganizeYourDesktopIconsWithStardockFencesForWindows.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/-sPcg8aSXEk/HerdingCatsOrganizeYourDesktopIconsWithStardockFencesForWindows.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 10px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;screenshot&quot; border=&quot;0&quot; alt=&quot;screenshot&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/1cf957ba9b68_E31/screenshot_3.png&quot; width=&quot;404&quot; height=&quot;254&quot;/&gt; There are few issues that divide computer people like that thousand-year-old question: How many icons should you have on your desktop? Some folks say, &quot;Load 'em up! Make those pixels work for you.&quot; Others say, &quot;I like a fresh &lt;strike&gt;bowl&lt;/strike&gt; desktop with no icons.&quot; Some folks find a spot in between with just My Computer and the Recycle Bin.&lt;/p&gt; &lt;p&gt;For me, the desktop is my work space. It's where I live and breathe and it's in front of my face all the time. I want as much information on there as possible. If I wanted a picture of the beach, I'd live at the beach and look up from my keyboard. &lt;/p&gt; &lt;p&gt;I'm thrilled with Windows 7. Frankly, I'm not sure what I'm going to do with all the free time that I'm saving &lt;strong&gt;not &lt;/strong&gt;dicking around with my computer trying to get it to work. Many of the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/tools&quot;&gt;tools&lt;/a&gt; I've espoused over the years simply aren't needed in Windows 7 as they were filling gaps that are no longer there.&lt;/p&gt; &lt;p&gt;That said, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.stardock.com/products/fences/&quot;&gt;&lt;strong&gt;Fences&lt;/strong&gt;&lt;/a&gt; from Stardock is one of those apps that extends Windows in such a comfortable and natural way, it should be built in. What's wonderful about Fences is that it is so subtle but so powerful that it truly becomes part of Explorer and feels like it's always there. It's not like to many loud or garish utilities that take over some aspect of Windows and feel the need to announce their presence with bright colors obnoxious splashscreens. &lt;/p&gt; &lt;p&gt;&lt;img style=&quot;border-right-width:0px;margin:5px 0px 5px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/1cf957ba9b68_E31/image_3.png&quot; width=&quot;467&quot; height=&quot;329&quot;/&gt; Kudos, truly, to Stardock for showing not only a sense of restraint but also for embracing what I think of as the &quot;new Windows aesthetic.&quot; Years of ridiculous toolbars, poor icon design, the Crayola-color themes of Windows XP and general gaudiness has watered down Windows and made it almost impossible to consider it an &quot;visually attractive&quot; OS. I think it's great that Windows 7 has a definable style that developers are embracing. I'm thrilled each time I download and play with some throwaway little utility but the developer has taken the time to integrate a Windows 7 feature like JumpLists, Taskbar Progress or even just taken the time to create a decent high-res icon. This is definitely a cue we can take from the Apple folks. &lt;/p&gt; &lt;h3&gt;Fences Augments Windows Explorer&lt;/h3&gt; &lt;p&gt;Back to Fences. It allows you to create just that - little &quot;Fences&quot; around icons on your desktop. The Fences can be any color and can have labels or not, or just show labels on mouseover. &lt;/p&gt; &lt;p&gt;To create a Fence you just right-drag a rectangle and click &quot;create new fence here.&quot; Alternatively you can select from a series of presets to jump start your organization. You can also take snapshots when you get things just so. I do this for presentations because switching from 1920x1200 to 1024x768 tends to wreak havoc on icons and fences. Snapshots put things back they way they were. &lt;/p&gt; &lt;p&gt;Once you drag an icon into a fence, it auto-arranges with a satisfying animation as all the icons rearrange themselves to make room for the new addition.Another great subtle feature is if you double-click on the desktop it'll hide your icons. This is not only great for presentations where you might not want to let the eating public see the chaos in the kitchen, but it's also a nice compromise for those of you who want a clean desktop, but can also appreciate a a few icons here and there. You can even exclude specific icons (like perhaps My Computer) from quick-hide. &lt;/p&gt; &lt;p&gt;One obscure bug that I hope the Fences guys and gals fix is that there are some applications that take a regular folder, like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.mesh.com&quot;&gt;Live Mesh&lt;/a&gt; for example, and &quot;augment&quot; it to make it more than a regular folder. They might change the icons or plug in a sidebar window. For whatever reason, Fences can't see those Folders while they are different. For now, the workaround is to exit Mesh, move the folder into the Fence, then turn Mesh on. Truly a minor irritant and best, but still it'd be nice to see it fixed.&lt;/p&gt; &lt;p&gt;Regardless, I whole-heartedly recommend Fences and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.stardock.com/products/fences/&quot;&gt;&lt;strong&gt;encourage you to go download it NOW and try it out&lt;/strong&gt;&lt;/a&gt;. Note that when you install it, you should pay attention to what it installs, as it also added an &quot;auto-updater&quot; for Stardock products that you &lt;em&gt;may &lt;/em&gt;want to remove afterwards if those kinds of extra-applets bother you.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/Q3ySROvgY-AT9mJ2w5MBJSWf-Wk/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/Q3ySROvgY-AT9mJ2w5MBJSWf-Wk/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/Q3ySROvgY-AT9mJ2w5MBJSWf-Wk/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/Q3ySROvgY-AT9mJ2w5MBJSWf-Wk/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=-sPcg8aSXEk:6F4B0cxMga4:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=-sPcg8aSXEk:6F4B0cxMga4:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=-sPcg8aSXEk:6F4B0cxMga4:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=-sPcg8aSXEk:6F4B0cxMga4:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=-sPcg8aSXEk:6F4B0cxMga4:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=-sPcg8aSXEk:6F4B0cxMga4:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=-sPcg8aSXEk:6F4B0cxMga4:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=-sPcg8aSXEk:6F4B0cxMga4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=-sPcg8aSXEk:6F4B0cxMga4:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/-sPcg8aSXEk&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=7ddd09db-78b7-4872-8131-2ceb6cbf204f</guid>
         <pubDate>Sun, 08 Nov 2009 01:32:15 -0800</pubDate>
      </item>
      <item>
         <title>Oredev 2009 - LIVE (now recorded) Closing Panel Video(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/8w59yqf_eEo/Oredev2009LIVENowRecordedClosingPanelVideo.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/8w59yqf_eEo/Oredev2009LIVENowRecordedClosingPanelVideo.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Oredev2009LIVEnowrecordedClosingPanel_E557/bild_2.jpg&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 5px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;bild&quot; border=&quot;0&quot; alt=&quot;bild&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Oredev2009LIVEnowrecordedClosingPanel_E557/bild_thumb.jpg&quot; width=&quot;344&quot; height=&quot;259&quot;/&gt;&lt;/a&gt; I was at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.oredev.org&quot;&gt;Øredev 2009&lt;/a&gt; in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Malm%C3%B6&quot;&gt;Malmö, Sweden&lt;/a&gt; this week. &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.oredev.org&quot;&gt;Øredev&lt;/a&gt; is fast becoming one of the premier conferences in Europe focused on the software development process. It's a consciously technology agnostic conference so there was not only a .NET tracks and a Java track, but also tracks like Agile Ways, User Experience and Cloud Computing.&lt;/p&gt; &lt;p&gt;I believe there were something like 100 speakers so it was an incredibly diverse conference. I hung out with some friends from Sun, an iPhone hacker from AT&amp;amp;T, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/HanselminutesOn9DebuggingCrashDumpsWithTessFerrandezAndVS2010.aspx&quot;&gt;ASP.NET Debugger Tess Ferrandez&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Trygve_Reenskaug&quot;&gt;Trygve Reenskaug&lt;/a&gt; the inventor of the MVC Model, as well as old friends like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.dotnetrocks.com&quot;&gt;Carl and Richard&lt;/a&gt; and new ones like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.satisfice.com/&quot;&gt;James Bach&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Oredev was interesting for a number of reasons, not the least of which being that they didn't use regular plates and utensils, but rather &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://oredev.org/prod/oredev/site.nsf/BlogPosts/D22E7CB5EC295F92C12576650055FD6F&quot;&gt;organic ones made from collected banana leaves&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I presented at the keynote on Friday. My topic was &quot;&lt;strong&gt;Information Overload and Managing the Flow&lt;/strong&gt;&quot; and I talked about the differences between Effectiveness and Efficiency and how apply some personal introspective and get more work done. &lt;em&gt;That video will be up soon and I'll post it along with my slides ASAP. &lt;/em&gt;I also presented on ASP.NET MVC 2.&lt;/p&gt; &lt;h3&gt;Recorded Panel of Silly People&lt;/h3&gt; &lt;p&gt;One of the random but fun things we did was the final panel of the conference. These are always silly things, presented just before the beer and chips arrive, and they are a nice way for everyone to blow off steam. Basically some of the &lt;strike&gt;biggest egos&lt;/strike&gt; speakers participate in a panel where questions come from the audience and from Twitter. &lt;/p&gt; &lt;p&gt;The Panel was moderated by Björn Granvik, and the folks on the stage were:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;James Bach - Author of Lessons Learned in Software Testing&lt;/li&gt; &lt;li&gt;Ola Bini - Thoughtworker, core developer of JRuby and creator of Ioke&lt;/li&gt; &lt;li&gt;Stu Halloway - Author of Programming Clojure&lt;/li&gt; &lt;li&gt;Me - Me&lt;/li&gt; &lt;li&gt;Oren Eini (Ayende Rahien) - NHibernate Profiler, NHibernate, Castle, Rhino Mocks&lt;/li&gt; &lt;li&gt;Chris Hughes - AT&amp;amp;T iPhone Hacker&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Here's the video:&lt;/p&gt; &lt;iframe class=&quot;embeddedvideo&quot; width=&quot;480&quot; height=&quot;386&quot; id=&quot;utv274667&quot; name=&quot;utv_n_975860&quot; src=&quot;http://www.ustream.tv/flash/video/2503217&quot; type=&quot;application/x-shockwave-flash&quot;/&gt; &lt;p&gt;I had the idea to stream this panel live (I've done this a few times - fairly guerilla - at other conferences) over &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ustream.tv/recorded/2503217&quot;&gt;UStream.tv&lt;/a&gt;. I figured I'd just point my laptop webcam and crappy integrated mic at the stage and while it'd be lame, it'd be something fun to do as I know there's a bunch of people who'd like to participate.&lt;/p&gt; &lt;p&gt;Turns out the sound and video guys at this conference really know their stuff. We were able to jerry-rig a fairly nice little setup. They took the XLR cables and the complete mix from their mixing board and not only switched it down to a 1/8 male mic jack, but they also change it from line-output to mic-output to deal with my laptops lack of a line input. &lt;/p&gt; &lt;p&gt;Then, a guy said, hey, I've got a Professional Canon DV Video Camera with Firewire. It turns out I had a Firewire port on my laptop and I just plugged his camera in on a lark. Boom, Windows 7 found the drivers online and the Firewire Camera showed up as a webcam.&lt;/p&gt; &lt;p&gt;Using the uStream software, we mixed in video and audio and recorded this 60minute panel discussion. &lt;/p&gt; &lt;p&gt;To be clear, there is likely no actual &quot;content&quot; here. We were asked to &quot;edutain&quot; more than educate as it was the final fun of the conference. We were all pretty good friends by this point so we were flicking the mud fairly liberally. &lt;/p&gt; &lt;p&gt;&lt;em&gt;One warning if you listen to this without headphones, there are about three swear words on the recording.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I hope the fun we had comes out in this spontaneous recording. Also, thanks to the roughly 200 people who heard about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/shanselman&quot;&gt;this LIVE stream on Twitter&lt;/a&gt; and joined the chat and drove the discussion.&lt;/p&gt; &lt;p&gt;If you like this kind of thing, let me know and I'll continue to put together these kinds of web-events. Enjoy!&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/vUd-o5yxo-kVYCbB-YGHstlsHqw/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/vUd-o5yxo-kVYCbB-YGHstlsHqw/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/vUd-o5yxo-kVYCbB-YGHstlsHqw/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/vUd-o5yxo-kVYCbB-YGHstlsHqw/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=8w59yqf_eEo:RotaqfCr8Ls:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=8w59yqf_eEo:RotaqfCr8Ls:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=8w59yqf_eEo:RotaqfCr8Ls:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=8w59yqf_eEo:RotaqfCr8Ls:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=8w59yqf_eEo:RotaqfCr8Ls:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=8w59yqf_eEo:RotaqfCr8Ls:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=8w59yqf_eEo:RotaqfCr8Ls:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=8w59yqf_eEo:RotaqfCr8Ls:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=8w59yqf_eEo:RotaqfCr8Ls:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/8w59yqf_eEo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=df3b9e65-b0a0-4331-b028-114bb58bb22c</guid>
         <pubDate>Fri, 06 Nov 2009 16:46:44 -0800</pubDate>
         <category>Speaking</category>
      </item>
      <item>
         <title>Hanselminutes on 9 - Debugging Crash Dumps with Tess Ferrandez and VS2010(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/NM-VgzLgdWo/HanselminutesOn9DebuggingCrashDumpsWithTessFerrandezAndVS2010.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/NM-VgzLgdWo/HanselminutesOn9DebuggingCrashDumpsWithTessFerrandezAndVS2010.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-Debugging-Crash-Dumps-with-Tess-Ferrandez-and-VS2010/&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 0px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;Hanselminutes on 9 - Debugging Crash Dumps with Tess Ferrandez and VS2010&quot; border=&quot;0&quot; alt=&quot;Hanselminutes on 9 - Debugging Crash Dumps with Tess Ferrandez and VS2010&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/21ded00c8c56_720F/image_3.png&quot; width=&quot;404&quot; height=&quot;228&quot;/&gt;&lt;/a&gt;I'm in Sweden this week at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://oredev.org/&quot;&gt;Øredev&lt;/a&gt; and I got a chance to talk to legendary ASP.NET Debugger and Escalation Engineer &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/tess&quot;&gt;&lt;strong&gt;Tess Ferrandez&lt;/strong&gt;&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;In this video Tess shows me how to debug a dump of an ASP.NET Web Site with a pile of awesome &lt;strong&gt;and totally new features &lt;/strong&gt;in Visual Studio 2010. You can open up dump files in Visual Studio directly and see visual representations of parallel call stacks. If you spend any time in WinDBG you're going to be excited by these new improvements in the debugging experience.&lt;/p&gt; &lt;p&gt;I also talked to Tess for an extended Debugging 101 session on the full 30 minute audio edition of my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselminutes.com&quot;&gt;Hanselminutes Podcast&lt;/a&gt; out later this week.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/d6b6NP-O_ZjR4xUrtwGQWlMoKFs/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/d6b6NP-O_ZjR4xUrtwGQWlMoKFs/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/d6b6NP-O_ZjR4xUrtwGQWlMoKFs/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/d6b6NP-O_ZjR4xUrtwGQWlMoKFs/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=NM-VgzLgdWo:-M2Ex5PCus0:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=NM-VgzLgdWo:-M2Ex5PCus0:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=NM-VgzLgdWo:-M2Ex5PCus0:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=NM-VgzLgdWo:-M2Ex5PCus0:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=NM-VgzLgdWo:-M2Ex5PCus0:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=NM-VgzLgdWo:-M2Ex5PCus0:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=NM-VgzLgdWo:-M2Ex5PCus0:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=NM-VgzLgdWo:-M2Ex5PCus0:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=NM-VgzLgdWo:-M2Ex5PCus0:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/NM-VgzLgdWo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=2247a765-a44c-4c0e-b23a-c5d74287eaf4</guid>
         <pubDate>Thu, 05 Nov 2009 08:11:41 -0800</pubDate>
      </item>
      <item>
         <title>November Conferences(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/11/02/november-conferences.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/11/02/november-conferences.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;I’m doing keynotes at two big conferences later this month:&lt;/p&gt; &lt;h3&gt;&lt;u&gt;ASP.NET Connections in Las Vegas: November 9th to 12th&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;I’ll be doing a keynote talking about ASP.NET 4 and VS 2010 at the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/4m1tRB&quot;&gt;ASP.NET Connections conference&lt;/a&gt; next week.&amp;#160; I’ll also be doing an evening Q&amp;amp;A session together with the ASP.NET team.&lt;/p&gt; &lt;p&gt;ASP.NET Connections is a great conference that is jointly hosted with the VS, SharePoint, SQL and Windows Connections conferences (enabling you to choose from tons of great sessions).&amp;#160; The speakers at the event are also really top-notch.&lt;/p&gt; &lt;p&gt;You can learn more about the conference and register online &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/4m1tRB&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;PDC in Los Angeles: November 17th to 19th&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;I’m also doing a keynote at the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/3XAm5d&quot;&gt;Microsoft PDC conference&lt;/a&gt; in two weeks.&amp;#160; The PDC is Microsoft’s big platform conference, where we talk about future platform and technology roadmaps.&amp;#160; There is almost always some cool new stuff...&lt;/p&gt; &lt;p&gt;You can learn more about the conference and register online &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bit.ly/3XAm5d&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Hope I might be able to see some of you in person at one of these events!&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I’m also now using Twitter for quick updates and to share links. Follow me at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;twitter.com/scottgu&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt; (@scottgu is my twitter name)&lt;/em&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7245704&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;/font&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245704</guid>
         <pubDate>Mon, 02 Nov 2009 22:05:20 -0800</pubDate>
      </item>
      <item>
         <title>Participating at W3C’s TPAC 2009(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/11/02/participating-at-w3c-s-tpac-2009.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/11/02/participating-at-w3c-s-tpac-2009.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This week the W3C holds its annual &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3.org/2009/11/TPAC/&quot;&gt;Technical Plenary and Advisory Committee meeting&lt;/a&gt; (TPAC 2009). There will be about a dozen people from the IE team participating and this is a valuable opportunity to continue working together with other W3C members on the next generation of web standards. High quality specifications that improve interoperability between browsers are important. Our goal is to help ensure these new standards work well for web developers and will work well in&amp;nbsp;future versions of IE.&lt;/p&gt;
&lt;p&gt;We will participate in a number of browser related working group meetings including accessibility, CSS and HTML sessions. For many groups, this is the only face to face time participants will get and so this is a perfect time to put faces to email addresses. Held in Santa Clara, California this year, the close proximity to many of the companies involved in the W3C means a large number of attendees is expected.&lt;/p&gt;
&lt;p&gt;Over the last few months, some of us in the IE team have been working through the HTML5 working draft reviewing the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lists.w3.org/Archives/Public/public-html/2009Aug/0389.html&quot;&gt;specification text&lt;/a&gt;. It is interesting to exchange ideas and help the specification become clearer and I am looking forward to seeing many of the people involved again. There has been a long discussion about the submission we made to the HTML working group about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lists.w3.org/Archives/Public/public-html/2009Sep/1216.html&quot;&gt;distributed extensibility&lt;/a&gt;. Tony Ross, the author of our &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lists.w3.org/Archives/Public/public-html/2009Sep/att-1216/MicrosoftDistributedExtensibilitySubmission.htm&quot;&gt;discussion document&lt;/a&gt;, will be participating in a panel on extensibility with Jonas Sicking from Mozilla on Wednesday.&lt;/p&gt;
&lt;p&gt;Eliot Graff, a lead technical editor for IE, who is helping &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lists.w3.org/Archives/Public/public-html/2009Oct/0747.html&quot;&gt;edit&lt;/a&gt; an updated draft of the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dev.w3.org/html5/canvas-api/canvas-2d-api.html&quot;&gt;Canvas API&lt;/a&gt; document that Doug Schepers &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lists.w3.org/Archives/Public/public-canvas-api/2009JulSep/0002.html&quot;&gt;started&lt;/a&gt; will also be at the HTML working group meeting this week.&lt;/p&gt;
&lt;p&gt;Kris Krueger, one of our lead test managers, has volunteered to help the newly formed Testing Task Force within the HTML working group. Having a comprehensive test suite that thoroughly tests a specification is a key step to ensuring implementations interoperate successfully. Kris will be taking part in the HTML working group meeting on Thursday and Friday.&lt;/p&gt;
&lt;p&gt;Paul Cotton, who was recently appointed as a co-chair of the HTML working group as Chris Wilson changed his focus to programmability in the web platform, will also be with us at the TPAC to help the overall work.&lt;/p&gt;
&lt;p&gt;On Thursday, the W3C has organised a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3.org/2009/11/TPAC/DevMeeting.html&quot;&gt;Developer Gathering&lt;/a&gt; for web and application developers who don’t normally participate in the W3C to join discussions about web standards. In my experience the participation of web developers is extremely important to check the overall ease of use of the specifications and APIs being proposed as standards.&amp;nbsp; One of our program managers, Sylvain Galineau, will be amongst the CSS Strike Force presenting CSS demos.&lt;/p&gt;
&lt;p&gt;I don’t have room in this short blog post to mention everyone who will be involved this week but I’ve tried to give a flavour for the work that we will be participating in. Above all, it’s fun to hang out with people you mostly see only by email so there will be lots of hallway conversations and debates over lunch or dinner. I can’t wait.&lt;/p&gt;
&lt;p&gt;Adrian Bateman &lt;br&gt;Program Manager&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9916341&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9916341</guid>
         <pubDate>Mon, 02 Nov 2009 16:54:00 -0800</pubDate>
      </item>
      <item>
         <title>Offline installer for Windows Live Essentials - WLSetup-All.exe(Scott Hanselman)</title>
         <link>http://feedproxy.google.com/~r/ScottHanselman/~3/lKMS3cs9ENo/OfflineInstallerForWindowsLiveEssentialsWLSetupAllexe.aspx</link>
         <description>http://feedproxy.google.com/~r/ScottHanselman/~3/lKMS3cs9ENo/OfflineInstallerForWindowsLiveEssentialsWLSetupAllexe.aspx&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://download.live.com&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;Windows Live Essentials&quot; border=&quot;0&quot; alt=&quot;Windows Live Essentials&quot; align=&quot;right&quot; src=&quot;http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/OfflineinstallerforWindowsLiveEssent.exe_14DEB/image_3.png&quot; width=&quot;355&quot; height=&quot;163&quot;/&gt;&lt;/a&gt; My brother and his wife came over today and the kids went trick or treating. His wife mentioned she wanted to make a quick DVD of the pictures and movies we took, so I suggested Movie Maker. However, they only have dial-up and wanted an offline installer I could just put on a USB Stick (I actually figured I'd put it on their camera's SD Card.)&lt;/p&gt; &lt;p&gt;I went to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://download.live.com&quot;&gt;http://download.live.com&lt;/a&gt; and searched all over, looking for an offline installer. I Googled with Bing, and then Googled with Google for things like &quot;Windows Live Offline Installer&quot; and found nothing but confusion.&lt;/p&gt; &lt;p&gt;Then I figured out this bizarre bit of UI on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://download.live.com&quot;&gt;Live Essentials download page&lt;/a&gt;. Rather than offering a small link for &quot;offline installer&quot; or a choice, you &lt;strong&gt;have &lt;/strong&gt;to click Download which will attempt to start a Download of Windows Live Essentials online bootstrapper. It will then go and download just the programs you want. &lt;/p&gt; &lt;p&gt;However, if you cancel the download immediately, there's a &quot;Try Again&quot; button and some text that no one (including me) reads:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&quot;Trying again downloads a standalone installer to your computer. This takes a little while, but may work better, depending on your connection settings.&quot;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;Um, OK. I wouldn't label that Try Again, but OK.&lt;/p&gt; &lt;p&gt;Long story short, here's direct downloads for the Windows Live Essentials &lt;em&gt;English Language &lt;/em&gt;ONLINE and OFFLINE installers. They are current as of the writing of this blog post. I'm not sure if they are version-specific downloads but I will try to keep them up to date.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://g.live.com/1rewlive3/en/wlsetup-all.exe&quot;&gt;&lt;strong&gt;Windows Live Essentials &lt;font color=&quot;#ff0000&quot;&gt;OFFLINE&lt;/font&gt; &lt;em&gt;English &lt;/em&gt;Installer&lt;/strong&gt;&lt;/a&gt; - 134 megabytes total.&lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://g.live.com/1rewlive3/en/wlsetup-web.exe&quot;&gt;&lt;strong&gt;Windows Live Essentials &lt;font color=&quot;#ff0000&quot;&gt;ONLINE&lt;/font&gt; &lt;em&gt;English &lt;/em&gt;Installer&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;-&amp;#160; 1 megabyte bootstrapper&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Or, if you want an offline installer in other languages, go to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://download.live.com&quot;&gt;http://download.live.com&lt;/a&gt;, click Download, cancel it, then click Try Again. I think it's weird, but there you go.&lt;/p&gt; &lt;p&gt;Enjoy.&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2009 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/OceqaZJIraiF9HABEUAfh-O8qZg/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/OceqaZJIraiF9HABEUAfh-O8qZg/0/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feedads.g.doubleclick.net/~a/OceqaZJIraiF9HABEUAfh-O8qZg/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/OceqaZJIraiF9HABEUAfh-O8qZg/1/di&quot; border=&quot;0&quot; ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lKMS3cs9ENo:TqNAeljmjI4:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=lKMS3cs9ENo:TqNAeljmjI4:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lKMS3cs9ENo:TqNAeljmjI4:MjquXQBfoPI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lKMS3cs9ENo:TqNAeljmjI4:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=lKMS3cs9ENo:TqNAeljmjI4:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lKMS3cs9ENo:TqNAeljmjI4:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?i=lKMS3cs9ENo:TqNAeljmjI4:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lKMS3cs9ENo:TqNAeljmjI4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?a=lKMS3cs9ENo:TqNAeljmjI4:5M_9TJJRyfI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ScottHanselman/~4/lKMS3cs9ENo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=8f21a578-aa43-4792-9407-ac539af45579</guid>
         <pubDate>Sat, 31 Oct 2009 23:52:46 -0700</pubDate>
         <category>Tools</category>
      </item>
      <item>
         <title>JavaScript class browser: once again with jQuery(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/10/30/javascript-class-browser-once-again-with-jquery.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/10/30/javascript-class-browser-once-again-with-jquery.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/MercuryWeb_1CBF87AD.jpg&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) 2004 Bertrand Le Roy&quot; border=&quot;0&quot; alt=&quot;(c) 2004 Bertrand Le Roy&quot; align=&quot;left&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/MercuryWeb_thumb_1373269F.jpg&quot; width=&quot;184&quot; height=&quot;244&quot;/&gt;&lt;/a&gt; I’ve already posted twice about that little class browser application. The first iteration was mostly declarative and can be found here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&quot;&gt;http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The second one was entirely imperative and can be found here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx&quot;&gt;http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This new version builds on top of the code for the imperative version and adds the jQuery dependency in an attempt to make the code leaner and simpler. I invite you to refer to the imperative code (included in the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/ClassBrowserWithjQuery.zip&quot;&gt;archive for this post&lt;/a&gt;) and compare it with the jQuery version, which shows a couple of ways the Microsoft Ajax Library lights up when jQuery is present.&lt;/p&gt; &lt;p&gt;The first thing I want to do here is convert the plain function I was using to build the browser’s namespace and class tree into a jQuery plug-in:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;$.fn.classBrowserTreeView = &lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;(options) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;opts = $.extend({},&lt;br /&gt; $.fn.classBrowserTreeView.defaults,&lt;br /&gt; options); &lt;span style=&quot;color:blue;&quot;&gt;return this&lt;/span&gt;;
};&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;That plug-in will have two options: the data to render (which will default to the root namespaces in the Microsoft Ajax Library), and the node template selector (which will default to “#nodeTemplate”):&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;$.fn.classBrowserTreeView.defaults = { data: Type.getRootNamespaces(), nodeTemplate: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;#nodeTemplate&quot;
&lt;/span&gt;};&lt;/pre&gt; &lt;p&gt;For the moment, as you can see, this plug-in does nothing. We want it to create a DataView control on each of the elements of the current wrapped set. We will do this by calling into the dataView plug-in.&lt;/p&gt; &lt;p&gt;You may be wondering where this plug-in might come from. Well, that’s the first kind of lighting up that the Microsoft Ajax Library’s script loader (start.js) will do in the presence of jQuery: every control and behavior will get surfaced as a jQuery plug-in, and components will get added as methods on the jQuery object. This is similar to what I had shown a while ago in this post, only much easier: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/bleroy/archive/2009/05/04/creating-jquery-plug-ins-from-microsoftajax-components.aspx&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/05/04/creating-jquery-plug-ins-from-microsoftajax-components.aspx&quot;&gt;http://weblogs.asp.net/bleroy/archive/2009/05/04/creating-jquery-plug-ins-from-microsoftajax-components.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;For example, we can write this in our own plug-in to create DataView components over the current jQuery wrapped set:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;return this&lt;/span&gt;.dataView({ data: opts.data, itemTemplate: opts.nodeTemplate,
});&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Now we can wire up the itemRendered event of the data view and start enriching the markup that the DataView control rendered for each data item. First, let’s get hold of the nodes in the rendered template and wrap them:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;elt = $(args.nodes);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Then, if the current node is representing a namespace, we want to hook up the expansion button’s click event so that it toggles visibility of the list of children, and we want to “unhide” the button itself (it has a “hidden” class in the default markup):&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(Type.isNamespace(args.dataItem)) { elt.find(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.toggleButton&quot;&lt;/span&gt;).click(&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;(e) { e.preventDefault(); &lt;span style=&quot;color:blue;&quot;&gt;return &lt;/span&gt;toggleVisibility(&lt;span style=&quot;color:blue;&quot;&gt;this&lt;/span&gt;); }).removeClass(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;hidden&quot;&lt;/span&gt;);
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;You can see here that we’re taking advantage of chaining.&lt;/p&gt; &lt;p&gt;Next thing is to set-up the node link itself. We start by inhibiting the link’s default action. Then we set the text for the link, and finally we set the command that will bubble up to the DataView when the link gets clicked:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;elt.find(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.treeNode&quot;&lt;/span&gt;).click(&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;(e) {&lt;br /&gt; e.preventDefault();&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;return false&lt;/span&gt;;&lt;br /&gt; }) .text(getSimpleName(args.dataItem.getName())) .setCommand(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;select&quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Here, I’m using a small plug-in to set the command:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;$.fn.setCommand = &lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;(options) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;opts = $.extend({},&lt;br /&gt; $.fn.setCommand.defaults, options); &lt;span style=&quot;color:blue;&quot;&gt;return &lt;/span&gt;$(&lt;span style=&quot;color:blue;&quot;&gt;this&lt;/span&gt;).each(&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;() { $.setCommand(&lt;span style=&quot;color:blue;&quot;&gt;this&lt;/span&gt;,&lt;br /&gt; opts.commandName,&lt;br /&gt; opts.commandArgument,&lt;br /&gt; opts.commandTarget); });
}
$.fn.setCommand.defaults = { commandName: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;select&quot;&lt;/span&gt;, commandArgument: &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;, commandTarget: &lt;span style=&quot;color:blue;&quot;&gt;null
&lt;/span&gt;};&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;I’m using $.setCommand here, which does get created by the framework for me, but I still need to create that small plug-in to make it work on a wrapped set instead of a static method off jQuery. I’ve sent feedback to the team that setCommand and bind should get created as plug-ins by the framework and hopefully it will happen in a future version.&lt;/p&gt; &lt;p&gt;The last thing we need to do here is to recursively create the child branches of our tree:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;elt.find(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;ul&quot;&lt;/span&gt;).classBrowserTreeView({ data: getChildren(args.dataItem)
});&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This just finds the child UL element of the current branch and calls our plug-in on the results with the children namespaces and classes as the data.&lt;/p&gt; &lt;p&gt;And this is it for the tree, we can now create it with this simple call:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;$(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#tree&quot;&lt;/span&gt;).classBrowserTreeView();&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;The details view rendering will only differ in minor ways from the code we had in our previous imperative version. The only differences is the use of jQuery to traverse and manipulate the DOM instead of the mix of native DOM APIs and Sys.get that we were using before. For example,&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;li&quot;&lt;/span&gt;).innerHTML =&lt;br /&gt; args.dataItem.getName ?&lt;br /&gt; args.dataItem.getName() :&lt;br /&gt; args.dataItem.name;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;becomes:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;$(args.nodes).filter(&quot;li&quot;).text(&lt;br /&gt; args.dataItem.getName ?&lt;br /&gt; args.dataItem.getName() :&lt;br /&gt; args.dataItem.name);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Notice how jQuery’s text method makes things a little more secure than the innerHTML we had used before.&lt;/p&gt; &lt;p&gt;Updating the details view with the data for the item selected in the tree is done by handling the select command of the tree from the following function:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;onCommand(sender, args) { &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(args.get_commandName() === &lt;span style=&quot;color:maroon;&quot;&gt;&quot;select&quot;&lt;/span&gt;) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;dataItem = sender.findContext(&lt;br /&gt; args.get_commandSource()).dataItem; &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;isClass = Type.isClass(dataItem) &amp;amp;&amp;amp;&lt;br /&gt; !Type.isNamespace(dataItem); &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;childData =&lt;br /&gt; (isClass ? getMembers : getChildren)(dataItem); &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;detailsChild =&lt;br /&gt; Sys.Application.findComponent(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;detailsChild&quot;&lt;/span&gt;); detailsChild.onItemRendering =&lt;br /&gt; isClass ?&lt;br /&gt; onClassMemberRendering :&lt;br /&gt; onNamespaceChildRendering; detailsChild.onItemRendered =&lt;br /&gt; onDetailsChildRendered; detailsChild.set_data(childData); $(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#detailsTitle&quot;&lt;/span&gt;).text(dataItem.getName()); $(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.namespace&quot;&lt;/span&gt;).css(&lt;br /&gt; &lt;span style=&quot;color:maroon;&quot;&gt;&quot;display&quot;&lt;/span&gt;,&lt;br /&gt; isClass ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;none&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot;&lt;/span&gt;); $(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.class&quot;&lt;/span&gt;).css(&lt;br /&gt; &lt;span style=&quot;color:maroon;&quot;&gt;&quot;display&quot;&lt;/span&gt;,&lt;br /&gt; isClass ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;none&quot;&lt;/span&gt;); $(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#details&quot;&lt;/span&gt;).css(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;display&quot;&lt;/span&gt;, &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot;&lt;/span&gt;); }
}&lt;/pre&gt; &lt;p&gt;Not much change here from the previous version, again, except for the use of jQuery and some chaining.&lt;/p&gt; &lt;p&gt;And that is pretty much it. I’ve made other changes in the script to make use of the new script loader in the Microsoft Ajax Library but that will be the subject of a future post.&lt;/p&gt; &lt;p&gt;Hopefully, this has shown you how the Microsoft Ajax Library can light up with jQuery. The automatic creation of plug-ins feels very much like native jQuery plug-ins and brings all the power of client templates to jQuery. Once we have bind and setCommand plug-ins as well, the Microsoft Ajax Library may become a very useful tool to jQuery programmers just as much as jQuery itself is a very useful tool to Microsoft Ajax programmers.&lt;/p&gt; &lt;p&gt;The code can be found here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/ClassBrowserWithjQueryUpdated.zip&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/ClassBrowserWithjQueryUpdated.zip&quot;&gt;http://weblogs.asp.net/blogs/bleroy/Samples/ClassBrowserWithjQueryUpdated.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; fixed a problem in Firefox &amp; Chrome.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7243389&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/Zri2npVOBNc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7243389</guid>
         <pubDate>Fri, 30 Oct 2009 10:43:00 -0700</pubDate>
      </item>
      <item>
         <title>Now Available: IEAK8 can create custom Internet Explorer 8 packages in 19 additional languages(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/10/29/now-available-ieak8-can-create-custom-internet-explorer-8-packages-in-19-additional-languages.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/10/29/now-available-ieak8-can-create-custom-internet-explorer-8-packages-in-19-additional-languages.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We are pleased to announce that the Internet Explorer Administration Kit (IEAK) 8 now supports creating custom Internet Explorer 8 packages in a total of 43 languages. IEAK8 can be downloaded from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ieak.microsoft.com/&quot;&gt;http://ieak.microsoft.com&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Custom Internet Explorer 8 packages can be created in the following platform and language combinations:&lt;/p&gt;
&lt;p&gt;Windows XP SP2 or SP3 x86: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total languages: &lt;ul&gt;
&lt;li&gt;Arabic, Bengali, Bulgarian, Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hebrew, Hindi, Hong Kong Chinese, Hungarian, Indonesian, Italian, Japanese, Kannada, Korean, Lithuanian, Latvian, Malayalam, Norwegian Bokmal, Polish, Portuguese (Brazil), Portuguese (Portugal), Punjabi, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Telugu, Thai, Turkish, Ukrainian &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;New languages: &lt;ul&gt;
&lt;li&gt;Bengali, Bulgarian, Croatian, Estonian, Hindi, Hong Kong Chinese, Indonesian, Kannada, Lithuanian, Latvian, Malayalam, Punjabi, Romanian, Serbian, Slovak, Slovenian, Telugu, Thai, Ukrainian &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Windows XP SP2 x64 and Windows Server 2003 SP2 x64:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total languages: &lt;ul&gt;
&lt;li&gt;Chinese (Simplified), Chinese (Traditional), German, English, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Russian &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Windows Server 2003 SP2 x86:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total languages: &lt;ul&gt;
&lt;li&gt;Chinese (Simplified), Chinese (Traditional), Czech, German, English, Spanish, French, Hungarian, Italian, Japanese, Korean, Dutch, Polish, Portuguese (Brazil), Portuguese (Portugal), Russian, Swedish, Turkish &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Windows Vista x86, Windows Vista SP1 x86 , Windows Server 2008 x86, and Windows 7 x86:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total languages: &lt;ul&gt;
&lt;li&gt;Arabic, Bengali, Bulgarian, Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hebrew, Hindi, Hong Kong Chinese, Hungarian, Indonesian, Italian, Japanese, Kannada, Korean, Latvian, Lithuanian, Malayalam, Norwegian Bokmal, Polish, Portuguese (Brazil), Portuguese (Portugal), Punjabi, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Telugu, Turkish, Thai, Ukrainian &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;New languages: &lt;ul&gt;
&lt;li&gt;Bengali, Bulgarian, Croatian, Estonian, Hindi, Hong Kong Chinese, Indonesian, Kannada, Latvian, Lithuanian, Malayalam, Punjabi, Romanian, Serbian, Slovak, Slovenian, Telugu, Thai, Ukrainian &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Windows Vista x64, Windows Vista SP1 x64, Windows Server 2008 x64, and Windows 7 x86:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total languages: &lt;ul&gt;
&lt;li&gt;Arabic, Bulgarian, Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Latvian, Lithuanian, Norwegian Bokmal, Polish, Portuguese (Brazil), Portuguese (Portugal), Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Thai, Turkish, Ukrainian, Hong Kong Chinese &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;New languages: &lt;ul&gt;
&lt;li&gt;Bulgarian, Croatian, Estonian, Latvian, Lithuanian, Romanian, Serbian, Slovak, Slovenian, Thai, Ukrainian, Hong Kong Chinese &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;To create custom packages in these new languages, you’ll need to install the latest version of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://technet.microsoft.com/en-us/ie/bb219517.aspx&quot;&gt;IEAK8&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Thanks, &lt;br&gt;Jatinder Mann &lt;br&gt;Internet Explorer Program Manager&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9914982&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9914982</guid>
         <pubDate>Thu, 29 Oct 2009 16:49:00 -0700</pubDate>
      </item>
      <item>
         <title>Add Reference Dialog Improvements (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/29/add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/29/add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;&lt;em&gt;[In addition to blogging, I am now using Twitter for quick updates and to share links. Follow me at: &lt;/em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;twitter.com/scottgu&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt; (@scottgu is my twitter name)]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This is the twelfth in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;a series of blog posts&lt;/a&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&amp;#160; Today’s post covers a small, but nice, change coming with VS 2010 – an “Add Reference” dialog that loads fast.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Add Reference Dialog in VS 2008&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The slow performance of the “Add Reference” dialog in previous releases of Visual Studio has been a common complaint that many a developer (including yours truly) has ranted about.&lt;/p&gt; &lt;p&gt;Previous releases of VS opened the “Add Reference” dialog on the “.NET” tab by default – and when that tab was loaded VS would synchronously scan the global assembly cache (GAC) retrieving .NET assembly information.&amp;#160; Because the GAC scan was done on the UI thread, it would freeze the IDE until the scan completed – which meant that you couldn’t cancel the operation, even if you didn’t want to use that tab.&amp;#160; &lt;/p&gt; &lt;p&gt;Because GAC scans can often take awhile (if you have lots of assemblies installed and/or a slow hard drive), you could end up having to wait a really long time for the dialog to respond.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Add Reference Dialog in VS 2010&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The Beta2 release of VS 2010 introduces a few welcome changes to the “Add Reference” dialog behavior that significantly improves its performance.&amp;#160; &lt;/p&gt; &lt;p&gt;The first improvement is that the “Add Reference” dialog in VS 2010 now defaults to opening on the “Projects” tab instead of the .NET tab.&amp;#160; This means that the dialog always loads really fast.&amp;#160; If you want to setup a project-to-project reference, or browse the file-system to select a file assembly, etc. you can now select these tabs immediately without having to wait for anything to load.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_0E7F4E62.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_1B792E73.png&quot; width=&quot;482&quot; height=&quot;408&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The second improvement is that the .NET and COM tabs now load asynchronously and do not block the UI thread while their lists are populated.&amp;#160; This means that if you accidentally click the tabs you are no longer blocked waiting for them to synchronously load – with VS 2010 you can now either click “Cancel” to close the dialog or click on another tab instead.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_1AA0C889.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_728E1969.png&quot; width=&quot;482&quot; height=&quot;408&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7242158&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7242158</guid>
         <pubDate>Thu, 29 Oct 2009 00:12:09 -0700</pubDate>
      </item>
      <item>
         <title>WPF 4 (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/26/wpf-4-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/26/wpf-4-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;&lt;em&gt;[In addition to blogging, I am now using Twitter for quick updates and to share links. You can follow me on Twitter at: &lt;/em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;twitter.com/scottgu&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt; (@scottgu is my twitter name)]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This is the eleventh in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;a series of blog posts&lt;/a&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&amp;#160; Today’s post covers WPF 4.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;WPF 4 Improvements&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;WPF (Windows Presentation Foundation) is one of the core components of the .NET Framework, and enables developers to build rich, differentiated Windows client applications.&amp;#160; WPF 4 includes major productivity, performance and capability improvements – in particular in the areas of Controls, XAML, Text, Graphics, Windows 7 integration (multitouch, taskbar integration, etc), Core Fundamentals, and Deployment.&amp;#160; This is the first of several posts I’ll do over the coming months about some of the improvements and new features.&lt;/p&gt; &lt;p&gt;I will do a separate post soon that covers some of the major advances coming with VS 2010’s WPF and Silverlight Designer – which also includes a ton of improvements.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Controls&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_13447686.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_35B90541.png&quot; width=&quot;375&quot; height=&quot;291&quot;/&gt;&lt;/a&gt; &lt;b&gt;Controls for Building Rich Clients &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF 4 adds a variety of new controls that make building rich line-of-business applications for the client easier and faster. The new, richer control set includes LOB essentials such as DataGrid, DatePicker, and Calendar controls.&lt;b&gt; &lt;/b&gt;These new controls are 99% API- and behaviorally-compatible with their Silverlight counterparts, enabling developers to create a consistent experience across the client and web while optimizing workflow by reusing code between Silverlight and WPF implementations.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Bag O'Tricks is back&lt;/b&gt;&lt;/p&gt; &lt;p&gt;We are also releasing an out-of-band collection of eight controls called the WPF Bag O’ Tricks download.&amp;#160; It includes the following controls: AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMapPanel.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Windows 7 &amp;amp; Office Ribbon Control&lt;/b&gt;&lt;/p&gt; &lt;p&gt;A new WPF Ribbon Control will be available for download shortly after the release of WPF 4. It features skins for Windows 7 and Office, as well as all the standard Ribbon features that end-users are familiar with, including tabs and groups, dynamic resizing, quick access toolbar, application menu, contextual tabs, key tips, and more.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_6261BF1A.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_416E4C73.png&quot; width=&quot;520&quot; height=&quot;129&quot;/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The WPF Ribbon will be fully extensible to meet changing guidelines for future releases. A CTP with a limited feature set is available today &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.codeplex.com/wikipage?ProjectName=wpf&amp;amp;title=WPF%20Ribbon%20Preview&quot;&gt;here&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_2E4D1FC7.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_46708A22.png&quot; width=&quot;360&quot; height=&quot;284&quot;/&gt;&lt;/a&gt;&lt;u&gt;GRAPHICS&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;Cached Composition&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Massive performance wins are possible with the new Cached Composition feature in WPF 4, which allows applications to cache arbitrary content including live and fully-interactive controls, vector geometry, etc. as bitmaps which persist in video memory. Once cached, these elements can be arbitrarily transformed, animated, manipulated, and can have Effects applied, all without having to re-render the cached element.&amp;#160; &lt;/p&gt; &lt;p&gt;This spares both the CPU and the GPU the cost of re-rendering content, and instead allows the GPU to render straight from the cache. The cache(s) understand dirty regions, so a blinking cursor in a cached textblock, for example, will only need to re-render the cursor between frames. There’s even a new Brush which specifically uses these intelligent caches – effectively a VisualBrush with vastly better performance.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Pixel Shader 3 Support&lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF 4 builds on top of the very popular ShaderEffect support first introduced in WPF 3.5 SP1 by allowing applications to now write Effects using Pixel Shader version 3.0. The PS 3.0 shader model is dramatically more sophisticated than PS 2.0, allowing for even more compelling Effects on supported hardware.&lt;/p&gt; &lt;p&gt;&lt;b&gt;LayoutRounding&lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF 4 adopts the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx&quot;&gt;UseLayoutRounding&lt;/a&gt; property, originally introduced in Silverlight 2. WPF’s layout engine frequently calculates sub-pixel positioning coordinates. This can lead to rendering artifacts as elements positioned on sub-pixel boundaries are anti-aliased over multiple physical pixels. &lt;/p&gt; &lt;p&gt;UseLayoutRounding will force the layout engine to place elements on whole pixel boundaries, thus removing most of the rendering artifacts caused by this problem – which generates cleaner and crisper UI by default.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_3E78E7C0.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_4F7D15A3.png&quot; width=&quot;349&quot; height=&quot;251&quot;/&gt;&lt;/a&gt; &lt;b&gt;Animation Easing Function&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Discrete, linear, and spline animations were supported with previous versions of WPF. WPF 4 introduces a new concept of Easing Functions – which allows application authors to create fluid behavior using animations. This can be used in an infinite number of ways, such as creating a springy behavior, or adding anticipation to an animation. Easing Functions customize the manner in which animations progress from start to finish.&amp;#160; The built-in easing functions provide a range of behaviors such as circular, exponential, elastic, and bouncy animation progress. The extensibility design also allows application authors to create custom easing functions to define the manner in which their animations progress. With this easy-to-use feature, designers can effortlessly create fluid, organic animations.&lt;/p&gt; &lt;p&gt;&lt;b&gt;CleartypeHint&lt;/b&gt;&lt;/p&gt; &lt;p&gt;The new CleartypeHint attached property allows application authors to enable higher-quality Cleartyped text rendering in many situations where it would have previously been disabled. Such situations include text in layered windows, text in VisualBrushes, DrawingBrushes, BitmapCacheBrushes, and anywhere else where the introduction of an intermediate render target would have previously resulted in grayscale text rendering.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;TEXT STACK&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;New Text Rendering Stack&lt;/b&gt;&lt;/p&gt; &lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/archive/2009/08/24/wpf-4-0-text-stack-improvements.aspx&quot;&gt;WPF text rendering stack&lt;/a&gt; has been completely replaced – a change that brings with it significant improvements to text rendering clarity, configurability, and support for international languages. The new text stack now supports display-optimized character layout, to produce text with comparable sharpness to Win32/GDI text:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_35A8DF74.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_098BE283.png&quot; width=&quot;446&quot; height=&quot;167&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;WPF’s new text stack also now supports explicitly selecting aliased, grayscale, or ClearType rendering modes:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_214319E9.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_32B37AC1.png&quot; width=&quot;137&quot; height=&quot;46&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The new text stack allows optimizing text hinting and snapping for either animated or static text. Additionally, the new text stack now supports fonts with embedded bitmaps. This allows many East Asian fonts to render with the sharpness to which Win32 users have grown accustomed. &lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;BindableRun&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Since the initial release of WPF, Run.Text has been a normal CLR property. This has meant that Run.Text lacks all the benefits of the WPF dependency property system, most notably the ability to be bound. In WPF 4, we have converted Run.Text to a dependency property allowing developers to use the first WPF supplied bindable Run.&amp;#160; More details can be found &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/archive/2009/09/01/bindable-run.aspx&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Custom Dictionaries&lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF includes a spell checker which before WPF 4 only used the OS-provided dictionary for input validation. This has been a major issue for apps which target specific industries with specialized terminology, as those apps were plagued by misspelling notifications. WPF 4 has introduced an API to allow an application to add words to the dictionaries used by WPF for spell checking.&amp;#160; More details can be found &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/archive/2009/10/02/custom-dictionaries.aspx&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Selection and Caret Brush &lt;/b&gt;&lt;/p&gt; &lt;p&gt;In a push to allow rich customization of the look and feel of WPF apps, developers can also now change the brush used to paint WPF text selection and carets via two simple properties: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/archive/2009/08/28/selection-brush.aspx&quot;&gt;SelectionBrush&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/archive/2009/09/01/caret-brush.aspx&quot;&gt;CaretBrush&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_59155E0C.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_50B188B5.png&quot; width=&quot;263&quot; height=&quot;108&quot;/&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_36DD5286.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_561FF959.png&quot; width=&quot;203&quot; height=&quot;108&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_1C30B66D.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_5396C79B.png&quot; width=&quot;445&quot; height=&quot;298&quot;/&gt;&lt;/a&gt;&lt;u&gt;WINDOWS 7 LIGHT UP&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;Windows 7 Multitouch Support&lt;/b&gt;&lt;/p&gt; &lt;p&gt;With the introduction of multi-touch input and manipulation processing support, WPF 4 provides a great way to light up your client applications in Windows 7. Multiple finger input are exposed through existing and new input events in WPF 4, while new manipulation and inertia events are now available for developers to use. New features include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Multi-touch Manipulation, Inertia (Pan, Zoom, Rotate) events on UIElement &lt;/li&gt; &lt;li&gt;Raw multi-touch events (Up, Move, Down) on UIElement, UIElement3D and ContentElement &lt;/li&gt; &lt;li&gt;Multiple capture supporting multiple active controls &lt;/li&gt; &lt;li&gt;ScrollViewer enhancement to support multi-touch panning &lt;/li&gt; &lt;li&gt;Touch device extensibility &lt;/li&gt; &lt;li&gt;Future Surface SDK compatibility &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Windows 7 Shell Integration&lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF 4 also exposes several new and key Windows 7 Shell features to WPF developers. These Shell features enable a richer, integrated user experience. The new taskbar is less cluttered and can convey more information at a glance. The Aero thumbnails support user commands. Jump lists provide access to contextual startup tasks and files available to the application.&lt;/p&gt; &lt;p&gt;WPF 4 integrates Windows 7 Jump List functionality, including:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_3F9D3505.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_28FAE6BE.png&quot; width=&quot;517&quot; height=&quot;168&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Tasks &lt;/li&gt; &lt;li&gt;Items &lt;/li&gt; &lt;li&gt;Recent and Frequent Lists integration &lt;/li&gt; &lt;li&gt;Custom Categories &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Windows 7 Taskbar integration, including:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Progress bar &lt;/li&gt; &lt;li&gt;Overlay Icon &lt;/li&gt; &lt;li&gt;Thumbnail buttons with commanding support &lt;/li&gt; &lt;li&gt;Description Text DWM Thumbnail clipping &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;In Windows 7, the taskbar has been redesigned to be less cluttered and to help users perform tasks with fewer clicks. WPF 4 provides integration with the Windows 7 taskbar in XAML, allowing applications to surface useful information to the user from the application's taskbar icon using icon overlays, progress bar, thumbnail toolbars, thumbnail description text, and thumbnail clipping. &lt;/p&gt; &lt;p&gt;There is also a new TaskbarItemInfo class in WPF 4 that is exposed as a dependency property.&amp;#160; It encompasses all the new taskbar features introduced in Windows 7. &lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_55A3A097.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_06C2DB38.png&quot; width=&quot;401&quot; height=&quot;94&quot;/&gt;&lt;/a&gt;&lt;b&gt;Icon Overlays &lt;/b&gt;&lt;/p&gt; &lt;p&gt;Icon overlays allow an application to communicate certain notifications and status to the user through its taskbar button by display of small overlays which appear at the lower-right corner of the button. &lt;/p&gt; &lt;p&gt;&lt;b&gt;Progress Bars &lt;/b&gt;&lt;/p&gt; &lt;p&gt;A taskbar button can be used to display simple progress information to the user without that user having to switch to the application window itself. Progress bars can be used to track file copies, downloads, installations, media burning, or any other operation that will take a period of time.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Thumbnail Toolbars&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Thumbnail Toolbars provide access to the key commands for an application without the user having to restore or activate the window. This feature enables application authors to embed an active toolbar control in a window's thumbnail preview. The application can show, enable, disable, or hide buttons from the thumbnail toolbar as required by its current state:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_5386A1CE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_0B58E5F2.png&quot; width=&quot;337&quot; height=&quot;235&quot;/&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;&lt;u&gt;WPF FUNDAMENTALS&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;New XAML/BAML Parser Engine &lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF 4 has replaced its implementation of XamlReader.Load(), BAML loading, Control &amp;amp; DataTemplates functionality with a new engine built on top of the new System.Xaml.dll.&amp;#160; As part of this effort, we’ve fixed many bugs and made many functionality improvements. Users of XamlReader.Load() can take advantage of several new language features in XAML2009 such as support for generic types. MarkupExtensions and TypeConverters can now get more services during object graph creation, enabling more scenarios, such as access to the Root object. Tools to analyze and manipulate XAML will also be much easier to create with many of the new low level APIs provided in System.Xaml.dll.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Data Binding Support for DLR&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Unlike CLR classes, the members of dynamic objects are defined at runtime. DynamicObject is a new abstract class in the .NET Framework 4 that allows developers to easily implement IDynamicMetaObjectProvider. With C#’s new DLR support with the ‘dynamic’ keyword, we are expecting some library implementations to switch to using DynamicObject and IDynamicMetaObjectProvider as a standard way to exposing runtime defined properties and members of objects. WPF 4 data binding support for IDynamicMetaObjectProvider will allow the use of natural property syntax to access dynamic properties.&lt;/p&gt; &lt;p&gt;This feature extends the WPF data binding engine to map the existing property and indexer access data binding syntax to support access to dynamic members offered by IDynamicMetaObjectProvider.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Visual State Manager (VSM) &lt;/b&gt;&lt;/p&gt; &lt;p&gt;Another new feature supporting the WPF-Silverlight continuum is the VisualStateManager, which introduces a simple new way to apply visual states to controls. This mechanism provides a way to easily customize both the look and feel of a control by providing the means to map the control logic to its respective start and end visual states.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_170E2D24.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_68487481.png&quot; width=&quot;534&quot; height=&quot;207&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;VSM is very flexible in that it automatically generates the transition animations in between the respective states, so the control author spends less time writing code and more time on the visual states that are defined in a control template. That means VSM can give a control author the ability to easily interchange the look and feel of controls, and VSM gives the control author a way to easily interchange how a control visually responds to user interaction.&amp;#160; This is fully supported with Expression Blend.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;HTML-XBAP Script Interop &lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF 4 provides the means for direct communication between an XBAP and script in the host HTML page (where the XBAP is loaded in an HTML frame or IFRAME element). The XBAP can get deep access to the HTML DOM, including to any ActiveX controls embedded in the containing HTML page and including handling of DOM events. &lt;/p&gt; &lt;p&gt;WPF exposes the main script object from the host frame. This is a dynamic object that represents the frame’s window object plus any custom script functions and global variables from script in the HTML page. From it, an application can invoke script functions directly or “dot into” the HTML DOM. The functionality is available in partial-trust XBAPs and under all supported versions of Internet Explorer and Firefox.&lt;/p&gt; &lt;p&gt;&lt;b&gt;UIAutomation Virtualization &lt;/b&gt;&lt;/p&gt; &lt;p&gt;WPF has introduced virtualized controls in past releases; however there was never a standardized way for an automation client to interact with a virtualized control. Two control patterns, ItemsContainerPattern and VirtualizedItemPattern, have been added in WPF 4 to support access and interact with virtualized elements. ItemsContainerPattern is used to access the virtualized controls &amp;amp; find virtualized items and VirtualizedItemPattern is used to realize virtualized items.&lt;/p&gt; &lt;p&gt;&lt;b&gt;SynchronizedInput Pattern&lt;/b&gt;&lt;/p&gt; &lt;p&gt;This is another UIA control pattern added in WPF 4. This pattern could be used by automation clients to track whether the given input event is routed to the correct element by WPF framework. This pattern has three associated automation events, viz. InputReachedTargetEvent, InputReachedOtherElementEvent and InputDiscardedEvent to indicate where the input is handled.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;CLIENT DEPLOYMENT&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;.NET Framework 4 Client Profile&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;To improve deployment size, time and overall experience of the .NET Framework 4 deployment, there is now a more compact version of .NET that is a subset of the full .NET Framework 4 - called the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/jgoldb/archive/2009/10/19/what-s-new-in-net-framework-4-client-profile-beta-2.aspx&quot;&gt;.NET Framework 4 Client Profile&lt;/a&gt;. The current redistributable size of the .NET Framework 4 Client Profile is about 30MB. The full Microsoft .NET Framework 4 is a pure superset of the Client Profile.&lt;/p&gt; &lt;p&gt;The goal of the .NET Framework 4 Client Profile is to improve and help streamline the deployment size, time, reliability and overall deployment experience for client applications. The Client Profile contains the functionality that most common desktop client applications (including Windows Forms and WPF applications) would need so it is anticipated that the majority of client application developers will target it instead of the Full .NET Framework 4. For that reason, most Visual Studio 2010 Beta 2 client project templates target the .NET Framework 4 Beta 2 Client Profile by default. &lt;/p&gt; &lt;p&gt;Unlike the .NET Framework 3.5 SP1 Client Profile, an important enhancement in the NET Framework 4 Client Profile is its support on all platforms and OSs, including those supported by the Full Framework like Windows Vista, Windows XP, Windows Servers 2003 and 2008, Windows 7, all for both x86 and x64.&amp;#160; &lt;/p&gt; &lt;p&gt;You can view or change the version of the framework that you target by opening your project’s properties window, and then select the &quot;Application&quot; page. You can then change the “Target framework” drop-down to either the full .NET Framework or the .NET Client Profile.&amp;#160; The project Publish property page also allows you to select the prerequisite needed for your ClickOnce deployment. In Beta2, VS2010 automatically selects the correct profile (Client Profile or Full) depending on your primary project target:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_2739F51D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_2CA865C1.png&quot; width=&quot;687&quot; height=&quot;553&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The same prerequisite dialog from above appears when you create “Setup and Deployment” projects (under “Add New Project”/“Other Project Types”). The NET4 Client Profile prerequisite entry is checked by default in this case.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Enhancements in NET4 Client Profile vs. NET 3.5 SP1 Client Profile&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Although the concept of a Client Profile is not new and was &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsclient.net/wpf/wpf35/wpf-35sp1-client-profile.aspx&quot;&gt;introduced in .NET Framework 3.5 SP1&lt;/a&gt;, the .NET Framework 4 Client Profile contains several important improvements:&lt;/p&gt; &lt;p&gt; &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;5&quot;&gt;&lt;tbody&gt; &lt;tr style=&quot;color:white;&quot; bgcolor=&quot;#000000&quot;&gt; &lt;td valign=&quot;top&quot; width=&quot;164&quot;&gt;&amp;#160;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;328&quot;&gt; &lt;p&gt;&lt;b&gt;.NET Framework 4 Client Profile (NEW)&lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;315&quot;&gt; &lt;p&gt;&lt;b&gt;.NET Framework 3.5 SP1 Client Profile &lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;164&quot;&gt; &lt;p&gt;&lt;b&gt;Supported OS &lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;328&quot;&gt; &lt;p&gt;Supported on all platforms and&amp;#160; OSs that are supported by the .NET Framework (excluding IA64 and the Server Core role in W2K8) &lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;315&quot;&gt; &lt;p&gt;Supported only on Windows XP 32-bit machines that did not have any .NET Framework version installed. &lt;/p&gt; &lt;p&gt;(Client Profile setup silently installs the full 3.5 SP1 Framework otherwise) &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;164&quot;&gt; &lt;p&gt;&lt;b&gt;Redistributable &lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;328&quot;&gt; &lt;p&gt;Supports redistributable as well as web download &lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;315&quot;&gt; &lt;p&gt;Supports web download only &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;164&quot;&gt; &lt;p&gt;&lt;b&gt;Add Remove Programs entries &lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;328&quot;&gt; &lt;p&gt;The full Framework comprises the Client Profile and another part called “Extended”. Thus it has two entries in the Add/Remove Programs dialog (or Programs and Features window). &lt;/p&gt; &lt;p&gt;If you installed the Full Framework, you can switch to the Client Profile by simply removing “Extended” from Add/Remove Programs. &lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;315&quot;&gt; &lt;p&gt;Single entry in Add Remove Programs &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;164&quot;&gt; &lt;p&gt;&lt;b&gt;Visual Studio &lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;328&quot;&gt; &lt;p&gt;Improved support for Client Profile targeting in Visual Studio 2010. &lt;/p&gt; &lt;p&gt;By default many Visual Studio 2010 Beta2 Client project target the NET4 Client Profile. &lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;315&quot;&gt; &lt;p&gt;Single checkbox in Visual Studio 2008 Service Pack 1 “Application” Project properties for .NET Framework 3.5 projects. Client Profile support unavailable in out-of-the-box VS 2008. &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;164&quot;&gt; &lt;p&gt;&lt;b&gt;Features &lt;/b&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;328&quot;&gt; &lt;p&gt;Includes new .NET 4&amp;#160; features (such as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.codeplex.com/MEF&quot;&gt;Managed Extensibility Framework&lt;/a&gt; (MEF), &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/C4AndTheDynamicKeywordWhirlwindTourAroundNET4AndVisualStudio2010Beta1.aspx&quot;&gt;C# 4 Dynamic Keyword,&lt;/a&gt; etc) as well as features previously included in NET 3.5 SP1 Full (Speech, WPF Spell Check, etc) &lt;/p&gt; &lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;315&quot;&gt; &lt;p&gt;Subset of features in .NET 3.5 SP1 Full &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt; &lt;p&gt;Because .NET 4.0 is a side-by-side release from previous releases of the .NET Framework, installation of the .NET 4.0 Framework does not require that prior versions of .NET on the machine need to be serviced/patched.&amp;#160; This means that the .NET 4.0 Client Profile installs much faster on a machine than the .NET 3.5 SP1 Client Profile.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Full Trust XBAP Deployment &lt;/b&gt;&lt;/p&gt; &lt;p&gt;Starting in WPF 4, the ClickOnce elevation prompt is also enabled for XAML Browser Applications (XBAPs) in Intranet and Trusted Zones, making it easier to deploy full-trust XBAPs. For XBAPs that require security permissions greater than the minimum code access security (CAS) permission grantset of the Intranet and Trusted Zones, the user will be able to click 'Run' on the ClickOnce elevation prompt when they navigate to the XBAP to allow the XBAP to run with the requested permissions. &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;As you can tell above – there is a bunch of great new functionality coming with WPF 4.0.&amp;#160; Below are a few links and resources you can follow to learn more some of these features:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Jaime+Rodriguez/New-Text-Stack-in-WPF-4/&quot;&gt;Channel 9: Chipalo Street explains what’s new and improved in WPF 4 Text&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/text/&quot;&gt;Chipalo also has a series of in-depth posts on the improvements in WPF 4’s new text stack.&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Jaime+Rodriguez/Graphics-improvements-in-WPF-4/&quot;&gt;Channel 9: A primer on WPF 4 Graphics with David Teitlebaum&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Jaime+Rodriguez/NET-4-Client-Profile/&quot;&gt;Channel 9: Jossef Goldberg delves into what’s new in the Client Profile in .NET Framework 4 &lt;/a&gt;&lt;/li&gt; &lt;li&gt;Jossef also has detailed posts that &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/jgoldb/archive/2009/05/27/net-framework-4-client-profile-introduction.aspx&quot;&gt;introduces .NET 4 Client Profile &lt;/a&gt;and details &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/jgoldb/archive/2009/10/19/what-s-new-in-net-framework-4-client-profile-beta-2.aspx&quot;&gt;what’s new in .NET 4 Beta 2 Client Profile&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/Jaime+Rodriguez/Whats-new-in-the-WPF-and-Silverlight-Cider-Designer-in-VS2010-beta2/&quot;&gt;Channel 9: Mark Wilson-Thomas demos what’s new in the Visual Studio 2010 WPF and Silverlight Designers &lt;/a&gt;&lt;/li&gt; &lt;li&gt;and there are &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsclient.net/wpfdesigner/&quot;&gt;additional Hands on labs and videos on Windows Client.net&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/jaimer/archive/2009/10/23/what-is-new-in-wpf-and-cider-on-the-net-framework-4-and-vs2010-beta-2-release.aspx&quot;&gt;Jaime Rodriguez’s highlights some of the key new features in WPF 4 and the WPF Designer in Visual Studio 2010 Beta 2&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I’ll do more posts in the coming months that also highlight some of the new WPF 4 capabilities and how to take advantage of them.&amp;#160; I’ll also be doing another post shortly that talks about the new VS 2010 WPF and Silverlight designer – which makes it possible to build great WPF and Silverlight applications using a WYSIWYG designer directly within Visual Studio 2010.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7240216&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7240216</guid>
         <pubDate>Mon, 26 Oct 2009 23:11:49 -0700</pubDate>
      </item>
      <item>
         <title>VS 2010 Code Intellisense Improvements (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/22/vs-2010-code-intellisense-improvements-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/22/vs-2010-code-intellisense-improvements-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;This is the tenth in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;a series of blog posts&lt;/a&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&amp;#160; &lt;/p&gt; &lt;p&gt;In today’s blog post I’m going to cover a small but really nice improvement to code intellisense with VS 2010 – which is its ability to better filter type and member code completion.&amp;#160; This enables you to more easily find and use APIs when writing code.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Code Intellisense with VS 2008&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;To help illustrate this intellisense improvements coming with VS 2010, let’s start by doing a simple scenario in VS 2008 where we want to write some code to enable an editing scenario with a GridView control.&lt;/p&gt; &lt;p&gt;We might start off by typing “GridView1.Edit” to bring up intellisense to see what Edit members are available on the control.&amp;#160; Doing this with VS 2008 brings up the intellisense drop-down and filters the current location in the dropdown to the members that start with the word “Edit”:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_09E715E4.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_1674C300.png&quot; width=&quot;543&quot; height=&quot;341&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This is great if the method/property/event we want to work with starts with “Edit” – but doesn’t really help us if the “Edit” member we are looking for starts with something else (for example: the “RowEditing” event or the “SetEditRow()” helper method).&amp;#160; We have to either manually scroll up and down looking for the other edit members, or pull up the object browser or help system to find them.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Code Intellisense with VS 2010&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Let’s now try out the same scenario with VS 2010.&amp;#160; When we type “GridView1.Edit” within VS 2010 we’ll find that the EditIndex property is still highlighted by default.&amp;#160; But the intellisense list has also been filtered so that it enables you to quickly locate all other members that have the word “Edit” &lt;em&gt;anywhere&lt;/em&gt; in them:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_00AADAA3.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_1FED8176.png&quot; width=&quot;579&quot; height=&quot;288&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This allows us to quickly see &lt;u&gt;all&lt;/u&gt; of the edit related methods/properties/events and more quickly find what we are looking for.&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;Searching for Keywords&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;This new intellisense filtering feature of VS 2010 is useful for searching for any member – regardless of what word it starts with.&amp;#160; For example, if we want to enable paging on a datagrid and can’t remember how to-do it, we could just type “GridView1.Paging” and it would automatically filter out everything but members that have the word paging.&amp;#160; Notice below how no members on the GridView class actually start with the word “Paging” – but I am still finding the two members that do have paging in them later in their names:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_7EFA0ECE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_332E3815.png&quot; width=&quot;621&quot; height=&quot;227&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Searching for Types&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This new intellisense filtering capability of VS 2010 is also useful for quickly finding classes and types. For example, when we type “List” to declare a variable, the editor will provide automatic filtering to show all types that have the word “List” somewhere in them (including IList&amp;lt;&amp;gt; and SortedList&amp;lt;&amp;gt; – which do not start with List):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_5270DEE8.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_55A2C6D0.png&quot; width=&quot;504&quot; height=&quot;335&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This makes it much easier to find type names you can’t entirely remember – without having to resort to searching through the object browser and/or using help documentation.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Pascal Case Intellisense&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The .NET Framework naming guidelines specify that type and member names should be “Pascal Cased” by default.&amp;#160; This means that each word in a type or member should start with a capitalized letter (for example: &lt;strong&gt;P&lt;/strong&gt;age&lt;strong&gt;I&lt;/strong&gt;ndex&lt;strong&gt;C&lt;/strong&gt;hanged).&amp;#160; &lt;/p&gt; &lt;p&gt;VS 2010’s intellisense filtering support now enables you to take advantage of this to quickly find and filter methods based on their pascal naming pattern.&amp;#160; For example, if we typed “GridView1.PIC” VS 2010 would filter to show us the members that have PIC in their name, as well as those members which have a pascal cased name where the word segments start with that letter sequence:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_74E56DA3.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_4215672F.png&quot; width=&quot;626&quot; height=&quot;177&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Notice above how PIC caused both “PageIndexChanged” and “PageIndexChanging” to show up.&amp;#160; This saves us a few keystrokes when resolving either member or type names.&amp;#160; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;I think you’ll find that the new intellisense filtering approach in VS 2010 makes it easier to quickly find and use classes and members when writing code.&amp;#160; You can take advantage of it with both VB and C#.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have recently been using Twitter to-do quick posts and share links. You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7236752&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7236752</guid>
         <pubDate>Thu, 22 Oct 2009 23:47:54 -0700</pubDate>
      </item>
      <item>
         <title>Searching and Navigating Code in VS 2010 (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/21/searching-and-navigating-code-in-vs-2010-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/21/searching-and-navigating-code-in-vs-2010-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;This is the ninth in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;a series of blog posts&lt;/a&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&amp;#160; In today’s blog post I’m going to cover some of the new code searching and navigation features that are now built-into VS 2010.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Searching and Navigating code&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Developers need to be able to easily navigate, search and understand the code-base they are working on.&amp;#160; In usability studies we’ve done, we typically find that developers spend more time reading, reviewing and searching existing code than actually writing new code.&amp;#160; &lt;/p&gt; &lt;p&gt;The VS 2010 code editor adds some nice new features that allow you to more productively search and navigate a code-base, and enable you to more easily understand how code is being used within a solution.&amp;#160; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Searching and Navigating the ASP.NET MVC Source Code &lt;/u&gt;&lt;/h3&gt; &lt;p&gt;For this blog post I’m going to use the ASP.NET MVC framework code-base (which has many thousand lines of code) to help demonstrate some of the new VS 2010 searching and navigation features.&amp;#160; If you have VS 2010 Beta 2 installed, you can follow along by downloading and opening the ASP.NET MVC framework source code from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471&quot;&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_5F9C65E4.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_04B9B051.png&quot; width=&quot;704&quot; height=&quot;492&quot;/&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;You should find that the performance of the below features is really fast with this project – despite it being many thousands of lines of code in size.&amp;#160; All of the features I’m demonstrating below are also now built-into VS 2010 (and work for all project types and for both VB and C#).&lt;/p&gt; &lt;h3&gt;&lt;u&gt;VS 2010 “Navigate To” Support&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Being able to quickly find and navigate code is important with both big and small solutions.&lt;/p&gt; &lt;p&gt;Visual Studio 2010 now supports a new (&lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;comma)&lt;/strong&gt; keyboard shortcut (meaning the control key is held down together with the comma key).&amp;#160; When you press the (&lt;strong&gt;Ctrl+comma)&lt;/strong&gt; combination, a new VS 2010 “Navigate To” dialog will appear that allows you to quickly search for types, files, variables and members within your solution – and then open and navigate to them:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_0713324F.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_41FA6518.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The “Navigate To” dialog provides an fast incremental search UI – with results immediately populating as soon as you start typing search terms.&amp;#160; For example, type “cont” (without pressing enter) and you’ll see that 176 results immediately show up within the results list as you start to type:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_12C87981.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_23CCA764.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Type a few more characters and you’ll see the list automatically filters to just those results that match “controller”:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_77AFAA72.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_3634F819.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You can use the scroll bar to scroll through the results – or alternatively press the tab key and then use the cursor arrows if you don’t want to take your hands off the keyboard.&amp;#160; You’ll find that the “Navigate To” window lists all types of results that match your search term – including Type names, Method/Property names, Field declarations, and file names:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_473925FC.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_5AE60F90.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Selecting any of the results in the results list will open the relevant source file within VS 2010 (if it isn’t already open) and take you immediately to the relevant source location (and highlight the relevant name within it):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_6BEA3D73.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_033541E5.png&quot; width=&quot;704&quot; height=&quot;492&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;Nice Fuzzy Search Capabilities&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;The “Navigate To” search box supports some nice “fuzzy search” capabilities that allow you to perform smart filters and searches without having to know exactly the name of the thing you are looking for.&amp;#160; These work well with the incremental/immediate search UI of the dialog – and allow you to refine your searches and get real-time results as you type.&lt;/p&gt; &lt;p&gt;To try this out let’s first search on the word “cache”.&amp;#160; Notice how the search results include not just items that start with the word “cache” – but also display any results that have the word “cache” in it:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_219F82CE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_075F19AA.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We can add multiple words to the search textbox to further filter the results.&amp;#160; For example, below I am filtering the list to only include those that have both “cache” &lt;em&gt;and&lt;/em&gt; “action” in the name:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_2D54CA00.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_7E22DE68.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Types and members within the .NET Framework using a naming design-guideline pattern called “Pascal Casing” – which means that the first letter of each word in a Type or Member name is capitalized.&amp;#160; The “Navigate To” dialog allows you to optionally use this “Pascal Casing” convention to quickly filter types. Just type the uppercase first letter of names in a type/member and it will automatically filter for results that match the uppercase pascal naming convention.&amp;#160; &lt;/p&gt; &lt;p&gt;For example, typing “AMS” will filter to the below results (just those types and members that have words in them that start with A then M then S):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_18EF0475.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_7C05DF9F.png&quot; width=&quot;714&quot; height=&quot;392&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The “Navigate To” dialog allows you to quickly filter and locate code with a minimum of keystrokes – and avoid you ever having to use the mouse, open the solution explorer, and click on a file directly.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;View Call Hierarchy&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Having the ability to quickly search and navigate to code is great.&amp;#160; Being able to also quickly discover how that code is being used is even better.&amp;#160; VS 2010 introduces a new “View Call Hierarchy” feature that allows you to quickly discover where a particular method or property within your code-base is being called from, and allows you to quickly traverse the call tree graph throughout the code-base (without having to run or debug the solution).&lt;/p&gt; &lt;p&gt;To use this feature, simply select a method or property name within your code-base, and then either type the (&lt;strong&gt;Ctrl+K,Ctrl+T) &lt;/strong&gt;keyboard shortcut combination, or right-click and select the “View Call Hierarchy” context menu command:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_76B6F8EE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_1997BA9F.png&quot; width=&quot;795&quot; height=&quot;586&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This will bring up a new “Call Hierarchy” tool window that by default shows up under the code editor.&amp;#160; Below you can see how the “Call Hierarchy” window is displaying the two methods within our solution that invoke the ViewPage.RenderView() method we selected above.&amp;#160; &lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_581D0845.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_5DF7ABDE.png&quot; width=&quot;779&quot; height=&quot;569&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We can then optionally drill down hierarchically into the first “RenderViewAndRestoreContentType” method to see who in-turn calls it:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_5CB312FF.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_22579D1E.png&quot; width=&quot;804&quot; height=&quot;617&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;For virtual methods/properties you can also use the call hierarchy window to see what types sub-class and override them.&lt;/p&gt; &lt;p&gt;Double clicking any of the members within the “Call Hierarchy” window will open the appropriate source file and take you immediately to that source location:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_79D8BB09.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_31AAFF2D.png&quot; width=&quot;801&quot; height=&quot;637&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This allows you to quickly navigate throughout a code-base and better understand the relationships between classes and methods as you code.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Highlighted References&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;With VS 2010, when you select or highlight a variable / parameter / field declaration within the code-editor, all subsequent usages of it are now automatically highlighted for you within the editor.&amp;#160; This makes it easy to quickly identify where and how a variable or parameter is being used.&lt;/p&gt; &lt;p&gt;For example, when we select the “controllerContext” parameter passed to the ControllerActionInvoker.GetParameterValue() method in the editor below, notice how the 4 usages of it within that method are also now automatically highlighted:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_5E53B906.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_2F21CD6F.png&quot; width=&quot;755&quot; height=&quot;619&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If I select a local variable within the method, all the places it is used are also now automatically highlighted:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_0DC227D3.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_139CCB6C.png&quot; width=&quot;755&quot; height=&quot;619&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If multiple usages are highlighted, you can cycle through them using the (&lt;strong&gt;Ctrl-Shift-up arrow)&lt;/strong&gt; and (&lt;strong&gt;Ctrl-Shift-Down arrow&lt;/strong&gt;) keystrokes to quickly move the cursor to the previous or next highlighted symbol.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The new VS 2010 text editor makes it easy to quickly search, navigate and explore code within a project or solution.&amp;#160; The performance of these operations is really fast (even with a large code-base) and are kept up to date as you work on the project and make changes to it.&amp;#160; The end result enables you to be much more productive.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have recently been using Twitter to-do quick posts and share links. You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7234625&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7234625</guid>
         <pubDate>Wed, 21 Oct 2009 00:50:57 -0700</pubDate>
      </item>
      <item>
         <title>VS 2010 and .NET 4.0 Beta 2(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/19/vs-2010-and-net-4-0-beta-2.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/19/vs-2010-and-net-4-0-beta-2.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt;
&lt;p&gt;I’m happy to announce that today we shipped the Beta 2 release of Visual Studio 2010 and .NET 4.0.&amp;nbsp; You can &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://go.microsoft.com/fwlink/?LinkID=151797&quot;&gt;download&lt;/a&gt;&amp;nbsp;it now.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_7D4408BA.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_7407CD79.png&quot; width=&quot;771&quot; height=&quot;611&quot;&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;u&gt;VS 2010 and .NET Improvements&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;VS 2010 and .NET 4 bring a huge number of improvements and additions. They include big advances for ASP.NET web development, WPF and WinForms client development, SharePoint development, Silverlight development, data development, parallel computing development, and cloud computing development.&amp;nbsp; VS 2010 also delivers a ton of improvements in the core IDE, code editors, programming languages, and enterprise design, architect, and testing tools.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;TFS 2010 is now easy to install (only 20 minutes to setup source control, bug and work item tracking, build automation, and continuous integration), can be installed on both servers as well as client OS and domain controller machines, and is now included with all MSDN subscriptions of Visual Studio.&lt;/p&gt;
&lt;p&gt;I’ve started a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;series of blog posts&lt;/a&gt; that will cover some of the improvements and feature additions in VS 2010 and .NET 4.&amp;nbsp; Stay tuned to my blog as I post many, many more posts over the coming months.&lt;/p&gt;
&lt;h3&gt;&lt;u&gt;VS 2010 Product Line SKU Simplifications&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;With VS 2010 we are simplifying the product lineup and pricing options of Visual Studio, as well as adding new benefits for MSDN subscribers.&amp;nbsp; With VS 2010 we will now ship a simpler set of SKU options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Visual Studio Express:&lt;/strong&gt; Free Express SKUs for Web, VB, C#, and C++ &lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Visual Studio 2010 Professional with MSDN&lt;/b&gt;: Professional development tools as you are used to today with the addition of source control integration, bug tracking, build automation, and more. It also includes 50 hours/month of Azure cloud computing. &lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Visual Studio 2010 Premium with MSDN&lt;/b&gt;: Premium has everything in Professional plus advanced development tools (including richer profiling and debugging, code coverage, code analysis and testing prioritization), advanced database support, UI testing, and more.&amp;nbsp; Rather than buying multiple “Team” SKUs like you would with VS 2008, you can now get this combination of features in one box with VS 2010. It also includes 100 hours/month of Azure cloud computing. &lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Visual Studio 2010 Ultimate with MSDN&lt;/b&gt;: Ultimate has everything in Premium plus additional advanced features for developers, testers, and architects including features like Intellitrace (formerly Historical Debugging), the new architecture tools (UML, discovery), test lab management, etc.&amp;nbsp; It also includes 250 hours/month of Azure cloud computing. &lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;&lt;u&gt;Side by Side Support with VS 2008&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;VS 2010 and .NET 4.0 can be installed side-by-side on the same machine as VS 2008 and .NET 3.5.&amp;nbsp; You can install the Beta 2 version on a machine and it will not impact your existing VS 2008 / .NET 3.5 development.&lt;/p&gt;
&lt;h3&gt;&lt;u&gt;Go-Live License Available&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;.NET 4 and VS 2010 Beta 2 include a “go-live” license which means you can start using the products for production projects.&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;VS 2010 and .NET 4.0 deliver some significant new capabilities and improvements. The goal with today’s Beta 2 release was to work hard on performance, stability, and the integration of the overall feature set.&amp;nbsp; The team’s focus is now transitioning to getting your feedback on the product and preparing for the final release candidate (RC) milestone.&amp;nbsp; Please send us any feedback you have on the Beta 2 release.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hope this helps,&lt;/p&gt;
&lt;p&gt;Scott&lt;/p&gt;
&lt;p&gt;P.S. In addition to blogging, I have recently been using Twitter to-do quick posts and share links. You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt;&lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7233502&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7233502</guid>
         <pubDate>Mon, 19 Oct 2009 22:01:00 -0700</pubDate>
      </item>
      <item>
         <title>Migrating ASP.NET MVC 1.0 applications to ASP.NET MVC 2(Eilon)</title>
         <link>http://weblogs.asp.net/leftslipper/archive/2009/10/19/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2.aspx</link>
         <description>http://weblogs.asp.net/leftslipper/archive/2009/10/19/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To help our customers adopt ASP.NET MVC 2 I built an application that helps upgrade Visual Studio 2008 solutions that use &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/mvc/download/&quot;&gt;ASP.NET MVC 1.0&lt;/a&gt; to use &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/downloads/details.aspx?familyid=D3F06BB9-5F5F-4F46-91E9-813B3FCE2DB1&amp;amp;displaylang=en&quot;&gt;ASP.NET MVC 2 Preview 2&lt;/a&gt;. This application is inspired by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/CheesyASPNETMVCProjectUpgraderForVisualStudio2010Beta1.aspx&quot;&gt;Scott Hanselman’s blog post&lt;/a&gt; on updating ASP.NET MVC projects to work in Visual Studio 2010 Beta 1.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/leftslipper/image_620D4FA7.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;&quot; height=&quot;504&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/leftslipper/image_thumb_139B4DEE.png&quot; width=&quot;584&quot; border=&quot;0&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;h1&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/h1&gt; &lt;p&gt;The app is a single executable: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/leftslipper/MvcAppConverter.zip&quot;&gt;Download MvcAppConverter.zip (220 KB)&lt;/a&gt;.&lt;/p&gt; &lt;h1&gt;&lt;b&gt;Usage&lt;/b&gt;&lt;/h1&gt; &lt;p&gt;The only requirement for this tool is that you have .NET Framework 3.5 SP1 on the machine. You do not need to have Visual Studio or ASP.NET MVC installed (unless you want to open your project!). Even though the tool performs an automatic backup of your solution it is recommended that you perform a manual backup of the solution as well.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;To convert an ASP.NET MVC 1.0 project built with Visual Studio 2008 to an ASP.NET MVC 2 project in Visual Studio 2008 perform these steps: &lt;ul&gt; &lt;li&gt;Launch the converter &lt;/li&gt; &lt;li&gt;Select the solution &lt;/li&gt; &lt;li&gt;Click the “Convert” button &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;To convert an ASP.NET MVC 1.0 project built with Visual Studio 2008 to an ASP.NET MVC 2 project in Visual Studio 2010: &lt;ul&gt; &lt;li&gt;Perform the above steps, then open the project in Visual Studio 2010 and it will perform the remaining conversion steps &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;&lt;b&gt;What it can do&lt;/b&gt;&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;Open up ASP.NET MVC 1.0 projects from Visual Studio 2008 (no other versions of ASP.NET MVC or Visual Studio are supported) &lt;/li&gt; &lt;li&gt;Create a full backup of your solution’s folder &lt;/li&gt; &lt;li&gt;For every VB or C# project that has a reference to System.Web.Mvc.dll it will (this includes ASP.NET MVC web application projects as well as ASP.NET MVC test projects): &lt;ul&gt; &lt;li&gt;Update references to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Add a reference to System.ComponentModel.DataAnnotations 3.5 (if not already present) &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;For every VB or C# ASP.NET MVC Web Application it will: &lt;ul&gt; &lt;li&gt;Change the project type to an ASP.NET MVC 2 project &lt;/li&gt; &lt;li&gt;Update the root ~/web.config references to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Update the root ~/web.config to have a binding redirect from ASP.NET MVC 1.0 to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Update the ~/Views/web.config references to ASP.NET MVC 2 &lt;/li&gt; &lt;li&gt;Add or update the JavaScript files (add jQuery, add jQuery.Validate, add Microsoft AJAX, add/update Microsoft MVC AJAX, add Microsoft MVC Validation adapter) &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Unknown project types or project types that have nothing to do with ASP.NET MVC will not be updated &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;&lt;b&gt;What it can’t do&lt;/b&gt;&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;It cannot convert projects directly to Visual Studio 2010 or to .NET Framework 4. &lt;/li&gt; &lt;li&gt;It can have issues if your solution contains projects that are not located under the solution directory. &lt;/li&gt; &lt;li&gt;If you are using a source control system it might have problems overwriting files. It is recommended that before converting you check out all files from the source control system. &lt;/li&gt; &lt;li&gt;It cannot change code in the application that might need to be changed due to breaking changes between ASP.NET MVC 1.0 and ASP.NET MVC 2. Consult the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://go.microsoft.com/fwlink/?LinkID=157066&quot;&gt;readme&lt;/a&gt; for information on breaking changes. &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;Feedback, Please!&lt;/h1&gt; &lt;p&gt;If you need to convert a project to ASP.NET MVC 2 please try out this application and hopefully you’re good to go. If you spot any bugs or features that don’t work leave a comment here and I will try to address these issues in an updated release.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7233210&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7233210</guid>
         <pubDate>Mon, 19 Oct 2009 12:38:23 -0700</pubDate>
      </item>
      <item>
         <title>How to render the same template on the server and client with minimal redundancy(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/10/19/how-to-render-the-same-template-on-the-server-and-client-with-minimal-redundancy.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/10/19/how-to-render-the-same-template-on-the-server-and-client-with-minimal-redundancy.aspx&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 10px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;(c) 2005 Bertrand Le Roy&quot; border=&quot;0&quot; alt=&quot;(c) 2005 Bertrand Le Roy&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/buildingreflection_6007098A.jpg&quot; width=&quot;180&quot; height=&quot;260&quot;/&gt; &lt;/h4&gt; &lt;p&gt;Last week, I wrote &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx&quot;&gt;a post about how the new Microsoft Ajax Library Preview 6 made it a lot easier to write unobtrusive and imperative data-driven applications&lt;/a&gt;. Because for the previous preview, I had written a cool little class browser using a declarative style, I thought it would be nice to rewrite this in a completely imperative way. The mistake I made though was to call it unobtrusive. Never mind that ‘unobtrusive’ is a perfectly well-defined word that actually existed way before JavaScript. ‘Unobtrusive JavaScript’ has a very specific meaning that people feel strongly about. To be worthy of that label, an application must basically conform to (at least) those two requirements:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Markup and behavior are strictly separated.&lt;/strong&gt; That means no DOM-0 event handlers, no custom attributes or tags, and even no microformats imo. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Graceful degradation / progressive enhancement.&lt;/strong&gt; This means that the application’s script is only used to improve what would work without script, in other words that the application is entirely usable without script. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;While my little sample strictly conformed to (1), it didn’t conform to (2). Not because I’m too dumb or ignorant, mind you, but because for this application, it didn’t make any sense at all: the application’s whole point is to display client-side script objects. The server does not have the first clue about the data that needs to be rendered. Which makes it impossible for anything to render without script. Which in turn triggered some unpleasant comments on the post: this was not really unobtrusive JavaScript in the full sense of the term. Not the library’s fault though, just my own for using the wrong example.&lt;/p&gt; &lt;h4&gt;The right example&lt;/h4&gt; &lt;p&gt;So I thought the best thing to fix this is to provide a more relevant example, one where the server could actually be a fallback scenario.&lt;/p&gt; &lt;p&gt;The new sample code is a fairly simple master-details view on a silly data set: jedi data. We have a WCF web service that is returning a list of jedis and their associated data, which the application can render on the server-side or on the client-side.&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:5px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;Jedis&quot; border=&quot;0&quot; alt=&quot;Jedis&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/Jedis_0779A810.png&quot; width=&quot;413&quot; height=&quot;176&quot;/&gt; Once you&amp;#160; have data that is available from both the server and client sides, your best and simplest tool to achieve progressive enhancement is the plain &amp;lt;a&amp;gt; tag. You can build the links in your application so that without script, they do something meaningful:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;?jedi=all&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;expandButton&quot;&amp;gt;&lt;/span&gt;+&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;What you see above is the + link on the top-left of the screen that will expand the list of jedis. To make it work client-side instead of the server-side, you use script to add a click handler that suppresses the default behavior of the link and replaces it with the equivalent client-side action:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;Sys.UI.DomEvent.addHandler(&lt;br /&gt; Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#expandButton&quot;&lt;/span&gt;), &lt;span style=&quot;color:maroon;&quot;&gt;&quot;click&quot;&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(e) { e.preventDefault(); jediList.fetchData(); &lt;span style=&quot;color:blue;&quot;&gt;return false&lt;/span&gt;; });&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;That’s fairly easy and has been possible since, well, I’m not sure but it’s been a looong time.&lt;/p&gt; &lt;p&gt;Now there’s the templated rendering. Rendering the same thing from the server and the client without repeating oneself too much is not as simple. The key to it is to render the server template with an empty data item and then to use the result of that as the client template.&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;jediList&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background:yellow;&quot;&gt;&amp;lt;%&lt;/span&gt;if (!isDetails) { &lt;span style=&quot;background:yellow;&quot;&gt;%&amp;gt;&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&lt;/span&gt;&lt;span style=&quot;background:yellow;&quot;&gt;&amp;lt;%&lt;/span&gt; } &lt;span style=&quot;background:yellow;&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&quot;background:yellow;&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;jedis = !isDetails ? &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Jedi&lt;/span&gt;&amp;gt;() {&lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Jedi&lt;/span&gt;()} : &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;JediService&lt;/span&gt;().GetJedis(); &lt;span style=&quot;color:blue;&quot;&gt;foreach &lt;/span&gt;(&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;jedi &lt;span style=&quot;color:blue;&quot;&gt;in &lt;/span&gt;jedis) { &lt;span style=&quot;background:yellow;&quot;&gt;%&amp;gt;
&lt;/span&gt; &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;?&lt;span style=&quot;color:red;&quot;&gt;jedi&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background:yellow;&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;= &lt;/span&gt;jedi.Name &lt;span style=&quot;background:yellow;&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&quot;&amp;gt;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;background:yellow;&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;= &lt;/span&gt;jedi.Name&lt;span style=&quot;background:yellow;&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&quot;background:yellow;&quot;&gt;&amp;lt;%&lt;/span&gt;} &lt;span style=&quot;background:yellow;&quot;&gt;%&amp;gt;
&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This way, there is only one template, only one version of the markup, that we are using on both the server and client sides. When rendered from the server with the actual data set, we get the list right away, and the browser just displays it (and search engines can see the list as well, something you can’t achieve with pure script). When rendered with the dummy dataset, we get the following:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;jediList&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt; &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;?jedi&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;all&quot;&amp;gt;all&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This markup can be used as a template on the client-side by this code:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;jediList = Sys.create.dataView(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#jediList&quot;&lt;/span&gt;, { dataProvider: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;JediService.svc&quot;&lt;/span&gt;, fetchOperation: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;GetJedis&quot;&lt;/span&gt;, autoFetch: &lt;span style=&quot;color:blue;&quot;&gt;false&lt;/span&gt;, itemRendered: &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(sender, args) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;link = args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;a&quot;&lt;/span&gt;); &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;dataItem = args.dataItem; link.innerHTML = dataItem.Name; Sys.UI.DomEvent.addHandler(&lt;br /&gt; link, &lt;span style=&quot;color:maroon;&quot;&gt;&quot;click&quot;&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(e) { e.preventDefault(); details.set_data(dataItem); &lt;span style=&quot;color:blue;&quot;&gt;return false&lt;/span&gt;; }); }
});&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;The details view is built on pretty much the same principle. The main difference is that it does have additional markup to delimit the fields that we’ll want to set dynamically. Here’s how it renders with the dummy data:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;details&quot;&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;span &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;jediName&quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;owns a &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;span &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;jediLightSaber&quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;lightsaber and is on the &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;span &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;jediSide&quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;side.
&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;All the itemRendered handler has to do then is fill in the blanks:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;details = Sys.create.dataView(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#details&quot;&lt;/span&gt;, { itemRendered: &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(sender, args) { args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#jediName&quot;&lt;/span&gt;).innerHTML =&lt;br /&gt; args.dataItem.Name; args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#jediLightSaber&quot;&lt;/span&gt;).innerHTML =&lt;br /&gt; args.dataItem.LightsaberColor; args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#jediSide&quot;&lt;/span&gt;).innerHTML =&lt;br /&gt; args.dataItem.DarkSide ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;dark&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;light&quot;&lt;/span&gt;; }
});&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;So what do you think?&lt;/p&gt; &lt;p&gt;Here’s the code (by the way, I’m using the Microsoft CDN in there): &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/ServerClientTemplates.zip&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/ServerClientTemplates.zip&quot;&gt;http://weblogs.asp.net/blogs/bleroy/Samples/ServerClientTemplate.zip&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7232857&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/2hlqWrQftnk&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7232857</guid>
         <pubDate>Mon, 19 Oct 2009 01:50:00 -0700</pubDate>
      </item>
      <item>
         <title>Announcing Microsoft Ajax Library (Preview 6) and the Microsoft Ajax Minifier(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;The ASP.NET team today &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;released a significant new update&lt;/a&gt; of the Microsoft Ajax Library (Preview 6).&amp;#160; This update includes a bunch of new capabilities and improvements to our client-side AJAX library, and can be used with any version of ASP.NET (including ASP.NET 2.0, 3.5 and 4.0), and can be used in both ASP.NET Web Forms and ASP.NET MVC projects.&amp;#160; Today’s release includes the following feature improvements:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Better Imperative Syntax&lt;/em&gt;: A new, simplified, code syntax for creating client controls. &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Client Script Loader&lt;/em&gt;: A new client-side script loader that can dynamically load all of the JavaScript files required by a client control or library automatically, and executes the scripts in the right order. &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Better jQuery Integration&lt;/em&gt;: All Microsoft Ajax controls are now automatically exposed as jQuery plug-ins. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;In addition to the client library improvements, we also today released a new (free) Microsoft AJAX Minifier tool.&amp;#160; This tool allows you to substantially improve the performance of your websites by reducing the size of your JavaScript files.&amp;#160; It can be run both as a command-line tool, and also ships as a Visual Studio MSBuild task that you can integrate into your VS projects to automatically minify your JavaScript files whenever you do a build.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Using the Microsoft AJAX Library (Preview 6)&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;There are two ways that you can start building applications with the Microsoft Ajax (Preview 6) release:&lt;/p&gt; &lt;p&gt;1) You can visit the ASP.NET CodePlex website and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;download the Preview 6 release&lt;/a&gt; (which also includes a large set of samples with it).&lt;/p&gt; &lt;p&gt;2) Alternatively, you can access the Microsoft Ajax Library scripts directly from the Microsoft Ajax Content Delivery Network (CDN).&amp;#160; You can do this by just adding the following script tag to either an .aspx or .html page:&lt;/p&gt; &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;script src=”&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ajax.microsoft.com/ajax/beta/0910/Start.js&quot;&gt;http://ajax.microsoft.com/ajax/beta/0910/Start.js&lt;/a&gt;” type=”text/javascript”&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt; &lt;p&gt;You read &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/09/15/announcing-the-microsoft-ajax-cdn.aspx&quot;&gt;my blog post&lt;/a&gt; from last month to learn more about the Microsoft AJAX CDN (or visit &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/ajax/cdn&quot;&gt;http://www.asp.net/ajax/cdn&lt;/a&gt;).&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Better Imperative Code Syntax with this release&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The ASP.NET team heard feedback from the community that many developers preferred an imperative code approach (as opposed to a declarative syntax approach) when creating client controls. With today’s release we are introducing a simple imperative code syntax for creating client controls and binding them to HTML elements within a page. This syntax is fully supported by the JavaScript Intellisense in both VS 2008 and VS 2010.&lt;/p&gt; &lt;p&gt;Below is an example of the imperative code you can now write to programmatically create a client-side DataView control that displays data from a WCF web service:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_4DEF31CE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_6D31D8A1.png&quot; width=&quot;579&quot; height=&quot;163&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The above code instantiates a new Microsoft Ajax DataView control and attaches the control to an HTML &amp;lt;div&amp;gt; element with the id “imageView”. The URL of the WCF service is specified with the “dataProvider” property, and the name of the method to call on the service is specified with the “fetchOperation” property.&amp;#160; The “autoFetch” property indicates that the control should automatically bind against the WCF service when it loads.&lt;/p&gt; &lt;p&gt;Below is what the “imageView” HTML &amp;lt;div&amp;gt; element that the DataView control is attached to looks like.&amp;#160; This &amp;lt;div&amp;gt; contains a template that will be used for displaying each data item retrieved from the service (note: templates were a feature we introduced with an earlier Microsoft Ajax Preview release):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_4C3E65FA.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_403C75C6.png&quot; width=&quot;501&quot; height=&quot;143&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The {{ Uri }} and {{ Name }} expressions within the template above are replaced with the Name and Uri properties of the images retrieved from the service.&amp;#160; The attribute namespace prefix “sys:src” on the &amp;lt;img&amp;gt; element is used to prevent browsers from attempting to load an image at the actual path &lt;i&gt;{Uri}&lt;/i&gt;. The value of the sys:src attribute gets plugged into the src attribute when the template is loaded.&lt;/p&gt; &lt;p&gt;When the page is rendered in the browser, we then get a simple photo gallery like below:&lt;/p&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_6AA8A6E3.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_5C89B7E6.png&quot; width=&quot;628&quot; height=&quot;531&quot;/&gt;&lt;/a&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Alternatively, if you don’t want to use a declarative binding syntax within a template, you can modify the template to be pure HTML markup like below (no more {{ }} expressions):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_64BDDD7D.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_63E57793.png&quot; width=&quot;477&quot; height=&quot;151&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You can then wire-up and specify a itemRendered event handler when you create the DataView control like below:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_23432B24.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_707324AF.png&quot; width=&quot;584&quot; height=&quot;179&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;You can then implement the “imageRendered” event handler using the JavaScript below, and use the Sys.bind() method to programmatically assign values to the &amp;lt;img&amp;gt; and &amp;lt;span&amp;gt; tags within the template:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_01775293.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_555A55A1.png&quot; width=&quot;747&quot; height=&quot;106&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This allows you to maintain your template as pure HTML markup, while still displaying the same photo gallery experience at runtime.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Using the Microsoft Ajax Client Script Loader&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The Microsoft AJAX Client-side library is now split up across multiple JavaScript files – allowing you to download and use only those script files that you actually need (reducing download sizes).&amp;#160; &lt;/p&gt; &lt;p&gt;Manually adding all of the script files required to use Ajax controls can be tedious though (and error prone). To make it easier to use both client controls as well individual client library components, we are introducing a new client script loader with today’s release. This client script loader helps you automatically load all of the scripts required by a control and execute the scripts in the right order when a page loads.&lt;/p&gt; &lt;p&gt;For example, the following page uses the client script loader to load all of the scripts required by the “watermark” control, and then wires up the watermark control to an &amp;lt;input&amp;gt; textbox:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_7FC686BE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_2C6F4098.png&quot; width=&quot;925&quot; height=&quot;598&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Notice the call to the Sys.require() method above. When you call Sys.require(), you supply the name of a client component (or an array of client components) that you want to load. The sys.require() client loader then automatically downloads all of the required script files in parallel (allowing your scripts to load faster and also allow you to avoid blocking the page from rendering).&amp;#160; When all of the scripts required by the components requested are loaded, the Sys.onReady() method is called and the watermark is created.&lt;/p&gt; &lt;p&gt;Above we are binding the “watermark” control to a &amp;lt;input&amp;gt; textbox with an id of “name”.&amp;#160; At runtime the watermark control will cause the textbox to have a watermark (that automatically disappears when a user sets the focus on the textbox and starts typing):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/clip_image006_0B7BCDF1.jpg&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;clip_image006&quot; border=&quot;0&quot; alt=&quot;clip_image006&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/clip_image006_thumb_518C8B04.jpg&quot; width=&quot;381&quot; height=&quot;236&quot;/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The client script loader supports many advanced features including automatic script combining and lazy loading. It can also be smart about downloading either debug or release versions of libraries. It also allows you to register your own libraries and have them automatically be loaded as well using the Sys.require() syntax.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Using Microsoft Ajax Library Controls with jQuery&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Microsoft ships jQuery as a standard part of the ASP.NET MVC framework, and also adds it by default to new ASP.NET Web Forms projects created with Visual Studio 2010.&lt;/p&gt; &lt;p&gt;With today’s preview we are making it easy to integrate jQuery and Microsoft Ajax controls, and enable developers using jQuery to use the Microsoft Ajax controls with a familiar jQuery plug-in API syntax.&amp;#160; Specifically, we are now exposing all Microsoft Ajax controls as jQuery plug-ins automatically. In other words, when you add jQuery to a page, you can use Microsoft Ajax controls just like jQuery plug-ins.&lt;/p&gt; &lt;p&gt;For example, the following script demonstrates how you can use jQuery to create a DataView that displays data from a WCF service (using a jQuery plugin like code syntax):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_57672E9D.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_3A7E09C8.png&quot; width=&quot;898&quot; height=&quot;243&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Notice above that I’m loading jQuery by calling the Sys.require() client-side loader API. You can load jQuery using the new client script loader, or alternatively you can just include the jQuery library in the page using a standard &amp;lt;script&amp;gt; tag. &lt;/p&gt; &lt;p&gt;Once jQuery is added to the page, Microsoft Ajax Library controls are automatically exposed as jQuery plug-ins.&amp;#160; This means you can create and attach Microsoft Ajax controls using a standard jQuery plugin syntax (like above), and fully integrate with the jQuery selector syntax.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Reducing the Size of JavaScript Files with the Microsoft Ajax Minifier&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;There are two common ways that people use to reduce the download size of a JavaScript file: compression and minification. &lt;/p&gt; &lt;p&gt;When you host your website on a Windows Server using IIS 7.0, you can configure IIS to automatically compress your JavaScript files using GZIP compression – which can provide a significant improvement on performance and the download size of files. However, you can get additional performance benefits by both compressing and &lt;i&gt;minifying&lt;/i&gt; your JavaScript files. Steve Sounders describes these additional benefits in his excellent book &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://www.amazon.com/dp/0596529309?tag=scoblo04-20&amp;amp;camp=0&amp;amp;creative=0&amp;amp;linkCode=as4&amp;amp;creativeASIN=0596529309&amp;amp;adid=081D052PBM7GF6D8JK4F&amp;amp;&quot;&gt;High Performance Web Sites&lt;/a&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt; &lt;p&gt;In addition to releasing Microsoft Ajax Library (Preview 6), we are today also releasing a new (free) &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;Microsoft Ajax Minifier utility&lt;/a&gt; that can help reduce the size of your JavaScript files considerably.&amp;#160; It was created by Ron Logon who works on the MSN team. You can &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;download the Microsoft Ajax Minifier&lt;/a&gt; from the ASP.NET CodePlex website for free.&amp;#160; &lt;/p&gt; &lt;p&gt;The following screenshot demonstrates the results of minifying the standard jQuery library using various minification tools such as Douglas Crockford’s JSMin, Dean Edward’s Packer, and the YUI Compressor. The bottom two files were minified using the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;Microsoft Ajax Minifier utility&lt;/a&gt;. Notice that the Microsoft Ajax Minifier has reduced jQuery from 125 KB to only 53 KB.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_359B560C.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_66BA90AC.png&quot; width=&quot;590&quot; height=&quot;163&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;Microsoft Ajax Minifier&lt;/a&gt; supports two levels of minification: normal and hypercrunched. When you use normal minification, the Microsoft Ajax Minifier removes all unnecessary whitespace, comments, curly braces, and semi-colons.&amp;#160; When you enable hypercrunching, the Microsoft Ajax Minifier becomes more aggressive in reducing the size of a JavaScript file, and it minifies local variable names and removes unreachable code.&lt;/p&gt; &lt;p&gt;Here’s a sample of a JavaScript file:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_1EF907C5.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_6C290150.png&quot; width=&quot;565&quot; height=&quot;174&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Here’s what the JavaScript file looks like after it has been minified with the Microsoft Ajax Minifier (with hypercrunching enabled):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/image_5254CB21.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/image_thumb_5CA5EF81.png&quot; width=&quot;645&quot; height=&quot;60&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Notice that all unnecessary whitespace has been removed. Notice also that the function parameters firstValue and secondValue have been renamed to b and a.&lt;/p&gt; &lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;Microsoft Ajax Minifier download&lt;/a&gt; includes the following components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ajaxmin.exe – A command-line tool for minifying JavaScript files. &lt;/li&gt; &lt;li&gt;ajaxmintask.dll – A MSBuild task for minifying JavaScript files in a Visual Studio project. &lt;/li&gt; &lt;li&gt;ajaxmin.dll – A component that you can use in your C# or VB.NET applications to minify JavaScript files. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;After you install the Microsoft Ajax Minifier, you can use the Microsoft Ajax Minifier command-line tool to minify a JavaScript file from a command-prompt.&amp;#160; &lt;/p&gt; &lt;p&gt;You also have the option of adding the Microsoft Ajax Minifier as a custom MSBuild task to Visual Studio. Adding the Microsoft Ajax Minifier MSBuild task to your Visual Studio project file allows you to automatically minify all of the JavaScript files in your project whenever you perform a build, and enables you to perform minification in an automated way.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Today’s release of the Microsoft Ajax Library has several exciting new features for client-side developers. The new simplified imperative syntax should appeal to JavaScript developers. The client script loader makes it much easier to create client controls and optimize the download of files. And, the jQuery integration enables developers using jQuery to take advantage of the client controls, templating, and data access features of the Microsoft Ajax Library without changing their programming style.&lt;/p&gt; &lt;p&gt;Finally, the new Microsoft Ajax Minifier enables you to significantly improve the performance of your Ajax applications by reducing the size of your JavaScript files. You can use the minifier from a command prompt or you can use the minifier when building a project in Visual Studio.&lt;/p&gt; &lt;p&gt;Read &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx&quot;&gt;Bertrand Le Roy’s Blog Post about Preview 6&lt;/a&gt; to learn even more about the release.&amp;#160; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;Click here to download&lt;/a&gt; both the Microsoft Ajax Library (Preview 6) release and the new Microsoft Ajax Minifier release.&amp;#160; &lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have recently been using Twitter to-do quick posts and share links. You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7231166&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7231166</guid>
         <pubDate>Thu, 15 Oct 2009 23:48:09 -0700</pubDate>
      </item>
      <item>
         <title>Entirely unobtrusive and imperative templates with Microsoft Ajax Library Preview 6(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/IMG_2305_0DB1EDD9.jpg&quot;&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 10px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;(c) 2009 Bertrand Le Roy&quot; border=&quot;0&quot; alt=&quot;(c) 2009 Bertrand Le Roy&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/IMG_2305_thumb_138C9172.jpg&quot; width=&quot;244&quot; height=&quot;164&quot;/&gt;&lt;/a&gt; Today is the release of the sixth preview of Microsoft Ajax Library. Don’t get fooled by the somewhat silly and long name: this is a major release in many ways. The scripts have been majorly refactored since preview 5. Check out the other posts out there (links at the bottom of this post) to see just some of the many new features that are in there. Some of my favorite are all the small improvements that have been made to make imperative instantiation of components and templated contents easier than ever. Many of you have told us that you preferred to do things imperatively and this release makes it a lot better.&lt;/p&gt; &lt;p&gt;When Preview 5 came out, I built a simple class browser using the declarative syntax. The class browser shows the hierarchy of namespaces and classes in a tree view on the left side of the page, and the details of whatever’s selected in the tree on the right side of the page:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/ClassBrowser2_36D98617.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;The JavaScript class browser&quot; border=&quot;0&quot; alt=&quot;The JavaScript class browser&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/ClassBrowser2_thumb_23B8596B.png&quot; width=&quot;504&quot; height=&quot;187&quot;/&gt;&lt;/a&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&quot;&gt;http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It still works (and an updated version is attached to this post), but I thought I would demonstrate how you can take that same sample and re-implement it in a completely imperative way. Of course, you never have to go all the way one way or another, and it’s always possible for example to use the nice declarative syntax for bindings but instantiate your components imperatively if you choose to do so. In this post, I’m deliberately going imperative all the way. Just keep in mind this is rather extreme.&lt;/p&gt; &lt;p&gt;The first thing to notice in the new version is that the markup is perfectly clean and contains no weird extension, namespace or custom binding syntax whatsoever. It’s 100% pure HTML 5. Here is for example the complete markup for the tree view on that page:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;tree&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;tree&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;nodeTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;toggleButton&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;#&quot;&amp;gt;&lt;/span&gt;+&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;treeNode&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;#&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;The script that builds the dynamic contents is bootstrapped by the following code:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;script &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;text/javascript&quot;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;Scripts/start.js&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;script &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;text/javascript&quot;&amp;gt;
&lt;/span&gt;Sys.loadScripts([&quot;Scr&lt;span style=&quot;color:maroon;&quot;&gt;ipts/Tree.js&quot;], f&lt;/span&gt;unc&lt;span style=&quot;color:blue;&quot;&gt;tion() { &lt;/span&gt;Sys.require([Sys.components.dataView], function&lt;span style=&quot;color:blue;&quot;&gt;() { &lt;/span&gt;createTreeView(&quot;#tree&quot;,&lt;br /&gt; Typ&lt;span style=&quot;color:maroon;&quot;&gt;e.getRo&lt;/span&gt;otNamespaces(),&lt;br /&gt; &quot;#nodeTempla&lt;span style=&quot;color:maroon;&quot;&gt;te&quot;); &lt;/span&gt;Sys.create.dataView(&quot;#detailsChild&quot;, &lt;span style=&quot;color:maroon;&quot;&gt;{ &lt;/span&gt;itemRendered: onDetailsChildRendered }); });
});
&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;We’re making use of the new script loader here: we first include the bootstrapper file, start.js, and then we declare that we need one custom script, “tree.js” and everything necessary to instantiate a DataView. The script loader will figure out on its own the set of scripts it needs to download for that. Once those scripts have been downloaded, we call createTreeView, which is custom code that we’ll look at in a moment that creates nested DataView controls over the markup. We also create a second DataView to display the details of what’s selected in the&amp;#160; tree.&lt;/p&gt; &lt;p&gt;Notice that we set some properties to a selector string here (for example “#nodeTemplate”). This is actually a breaking change from the previous preview, which only understood id strings. Microsoft Ajax does not include a full selector engine but it does understand the most basic of selectors (.class, tagName and #id). But where it gets really interesting is that if you had included jQuery on the page, the framework would detect it and enable you to use full selectors everywhere. Isn’t that sweet?&lt;/p&gt; &lt;p&gt;So how does the imperative approach compare with the declarative one? Well, for instantiating components, you already have an example above, where we use Sys.create.dataView. But what about wiring up events, setting text contents and attribute values, instantiating components over the markup inside the template?&lt;/p&gt; &lt;p&gt;All those are done by post-processing the template instances after they’ve been instantiated, by handling the itemRendered event:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;itemRendered: &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(sender, args) { &lt;span style=&quot;color:#006400;&quot;&gt;// do magic
&lt;/span&gt;}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Wiring up events is as simple as getting a reference to an element and calling addHandler:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;toggleButton = args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.toggleButton&quot;&lt;/span&gt;);
Sys.UI.DomEvent.addHandler(toggleButton, &lt;span style=&quot;color:maroon;&quot;&gt;&quot;click&quot;&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(e) { toggleVisibility(&lt;span style=&quot;color:blue;&quot;&gt;this&lt;/span&gt;); }, &lt;span style=&quot;color:blue;&quot;&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;The args.get function, which you will use a lot, takes a selector and returns the first element that matches it &lt;em&gt;inside the template&lt;/em&gt;. Here, we are looking for an element with class “toggleButton”, but a local id would work just as well.&lt;/p&gt; &lt;p&gt;To set text contents and attribute values is trivial once you know how to get references to elements from local selectors (remember, jQuery also works here transparently or even explicitly when and if you need it).&lt;/p&gt; &lt;p&gt;Finally, instantiating components is also quite easy. For example, here is the code that creates an inner DataView for the child nodes of a node in the tree, recursively:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;childView = args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;ul&quot;&lt;/span&gt;);
createTreeView(childView,&lt;br /&gt; getChildren(args.dataItem),&lt;br /&gt; nodeTemplate);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;The args.get funtion is used once more to get a reference to the first UL element within the template, and it is then easy to do a recursive call into our tree creation function and build the new branch of the tree.&lt;/p&gt; &lt;p&gt;The command bubbling feature that makes it so easy to wire up custom commands into a template is still usable in imperative code:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;treeNode = args.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;.treeNode&quot;&lt;/span&gt;);
Sys.setCommand(treeNode, &lt;span style=&quot;color:maroon;&quot;&gt;&quot;select&quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Finally, there is one feature that I’m not using in that sample, but that’s immensely useful, and I’m talking of course of live bindings. Those work too, all you have to do is call the Sys.bind function and give it the target object, the name of the target property to bind, the source object and the source property name.&lt;/p&gt; &lt;p&gt;To render the details view, I decided to not use a single item DataView like I did with the declarative version: since I’m going to use imperative code instead of declarative bindings, it is just as easy to directly manipulate the DOM that already exists, and do some hiding and showing of elements:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;onCommand(sender, args) { &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(args.get_commandName() === &lt;span style=&quot;color:maroon;&quot;&gt;&quot;select&quot;&lt;/span&gt;) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;dataItem = sender.findContext(&lt;br /&gt; args.get_commandSource()).dataItem; &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;isClass = Type.isClass(dataItem) &amp;amp;&amp;amp;&lt;br /&gt; !Type.isNamespace(dataItem); &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;childData =&lt;br /&gt; (isClass ? getMembers : getChildren)(dataItem), namespaceElementsDisplay = &lt;br /&gt; isClass ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;none&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot;&lt;/span&gt;, classElementsDisplay =&lt;br /&gt; isClass ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;none&quot;&lt;/span&gt;, detailsChild =&lt;br /&gt; Sys.Application.findComponent(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;detailsChild&quot;&lt;/span&gt;); detailsChild.onItemRendering =&lt;br /&gt; isClass ?&lt;br /&gt; onClassMemberRendering :&lt;br /&gt; onNamespaceChildRendering; detailsChild.set_data(childData); Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#detailsTitle&quot;&lt;/span&gt;).innerHTML =&lt;br /&gt; dataItem.getName(); Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#namespacesColumn&quot;&lt;/span&gt;).style.display = Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#classesColumn&quot;&lt;/span&gt;).style.display =&lt;br /&gt; namespaceElementsDisplay; Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#propertiesColumn&quot;&lt;/span&gt;).style.display = Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#eventsColumn&quot;&lt;/span&gt;).style.display = Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#methodsColumn&quot;&lt;/span&gt;).style.display = Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#staticMethodsColumn&quot;&lt;/span&gt;).style.display =&lt;br /&gt; classElementsDisplay; Sys.get(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;#details&quot;&lt;/span&gt;).style.display = &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot;&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;We do have a DataView to render the contents of the currently selected object though. The nice trick we used with the declarative version to dynamically switch the target place holder where the template gets rendered is still there, which enables a single DataView control to dispatch the data into two to four separate lists (or however much you want for that matter):&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;onNamespaceChildRendering(args) { args.set_itemPlaceholder( Type.isClass(args.get_dataItem()) ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;#classPlaceHolder&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;#namespacePlaceHolder&quot; &lt;/span&gt;);
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;I think all this is pretty cool and I hope the comparison between the declarative version and the imperative version of this little application gives you a sense of the flexibility that the Microsoft Ajax library now offers, and of how much you can choose your own development style and do pretty much anything with the same ease.&lt;/p&gt; &lt;p&gt;Download the code for this post here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/Preview6ClassBrowser.zip&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/Preview6ClassBrowser.zip&quot;&gt;http://weblogs.asp.net/blogs/bleroy/Samples/Preview6ClassBrowser.zip&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Microsoft Ajax Library Preview 6 can be downloaded from here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&quot;&gt;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Here are a few links about this release: &lt;br/&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx&quot;&gt;http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx&lt;/a&gt; &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/jsenior/Announcing-Microsoft-Ajax-Library-Preview-6/&quot;&gt;http://channel9.msdn.com/posts/jsenior/Announcing-Microsoft-Ajax-Library-Preview-6/&lt;/a&gt; &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.jamessenior.com/post/How-the-Script-Loader-in-the-Microsoft-Ajax-Library-will-make-your-life-wonderful.aspx&quot;&gt;http://www.jamessenior.com/post/How-the-Script-Loader-in-the-Microsoft-Ajax-Library-will-make-your-life-wonderful.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7230434&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/iD9CUGUVpNo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7230434</guid>
         <pubDate>Thu, 15 Oct 2009 02:12:00 -0700</pubDate>
      </item>
      <item>
         <title>IE October 2009 Security Update Now Available(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/10/13/ie-october-2009-security-update-now-available.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/10/13/ie-october-2009-security-update-now-available.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/technet/security/Bulletin/MS09-054.mspx&quot;&gt;IE Cumulative Security Update for October 2009&lt;/a&gt; is now available via &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://windowsupdate.microsoft.com/&quot;&gt;Windows Update&lt;/a&gt; or &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://update.microsoft.com/microsoftupdate&quot;&gt;Microsoft Update&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;This update addresses three privately reported vulnerabilities and one publicly disclosed vulnerability. The security update addresses these vulnerabilities by modifying the way that Internet Explorer processes data stream headers, validates arguments, and handles objects in memory. For detailed information on the contents of this update, please see the following documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/technet/security/Bulletin/MS09-054.mspx&quot;&gt;Microsoft Security Bulletin MS09-054&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://support.microsoft.com/kb/974455&quot;&gt;Microsoft Knowledge Base Article 974455&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This security update is rated Critical for all supported releases of Internet Explorer: Internet Explorer 5.01, Internet Explorer 6, Internet Explorer 6 Service Pack 1, Internet Explorer 7, and Internet Explorer 8.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;As a reminder, IE security updates are cumulative and contain all previously released updates for each version of Internet Explorer. &lt;/p&gt;
&lt;p&gt;I encourage everybody to download this security update and other non-IE security updates via Windows Update or Microsoft Update. Windows users are also strongly encouraged to configure their systems for automatic updates to keep their systems current with the latest updates from Microsoft. &lt;/p&gt;
&lt;p&gt;Terry McCoy &lt;br&gt;Program Manager &lt;br&gt;Internet Explorer Security&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9906789&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906789</guid>
         <pubDate>Tue, 13 Oct 2009 12:50:00 -0700</pubDate>
      </item>
      <item>
         <title>URL Routing with ASP.NET 4 Web Forms (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;&lt;em&gt;[In addition to blogging, I have recently been using Twitter to-do quick posts and share links. You can follow me on Twitter at: &lt;/em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;www.twitter.com/scottgu&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt; (@scottgu is my twitter name)]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This is the eighth in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;a series of blog posts&lt;/a&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&amp;#160; Today’s post covers a cool new runtime feature in ASP.NET 4 – which is the ability to use URL routing with Web Forms based pages.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;What is URL Routing?&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;URL routing was a capability we first introduced with ASP.NET 3.5 SP1, and which is already used within ASP.NET MVC applications to expose clean, SEO-friendly “web 2.0” URLs.&amp;#160; URL routing lets you configure an application to accept request URLs that do not map to physical files. Instead, you can use routing to define URLs that are semantically meaningful to users and that can help with search-engine optimization (SEO).&lt;/p&gt; &lt;p&gt;For example, the URL for a traditional page that displays product categories might look like below:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.mysite.com/products.aspx?category=software&quot;&gt;http://www.mysite.com/products.aspx?category=software&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Using the URL routing engine in ASP.NET 4 you can now configure the application to accept the following URL instead to render the same information:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.mysite.com/products/software&quot;&gt;http://www.mysite.com/products/software&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;With ASP.NET 4.0, URLs like above can now be mapped to both ASP.NET MVC Controller classes, as well as ASP.NET Web Forms based pages.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Mapping URLs using ASP.NET MVC&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The URL Routing engine introduced with ASP.NET 3.5 SP1 provides a powerful way to handle incoming URLs.&amp;#160; Typically you write code as part of application startup to register/map URLs that match a specific URL format to code handlers.&amp;#160; &lt;/p&gt; &lt;p&gt;Below is an example of how you can use ASP.NET MVC today to map the &lt;em&gt;/products/software&lt;/em&gt; URL to a controller class called “Products” that has an action method named “Browse”:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step1_2C298E39.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;step1&quot; border=&quot;0&quot; alt=&quot;step1&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step1_thumb_5D48C8D9.png&quot; width=&quot;721&quot; height=&quot;249&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The first “products-browse” parameter to the MapRoute() helper method above is a friendly name for the route.&amp;#160; The second &lt;em&gt;“products/{category}”&lt;/em&gt; parameter is the URL filter that matches the &lt;em&gt;/products/software&lt;/em&gt; URL – and which treats the second segment of the URL as a parameter value called “category”.&amp;#160; This parameter will then be passed to the ProductsController’s Browse() action method to process.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Mapping URLs using ASP.NET Web Forms&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;ASP.NET 4.0 now allows you to also use the URL Routing engine to map URLs to ASP.NET Web Forms pages as well as ASP.NET MVC Controllers.&amp;#160; &lt;/p&gt; &lt;p&gt;Below is an example of how you can use the new &lt;em&gt;MapPageRoute()&lt;/em&gt; helper method in ASP.NET 4.0 to map the &lt;em&gt;/products/software&lt;/em&gt; URL to a “Products.aspx” page that lives immediately under the application root directory:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step2_5866151D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;step2&quot; border=&quot;0&quot; alt=&quot;step2&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step2_thumb_1A897DA1.png&quot; width=&quot;531&quot; height=&quot;268&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The first two parameters to the &lt;em&gt;MapPageRoute() &lt;/em&gt;helper are the same as in &lt;em&gt;MapRoute().&lt;/em&gt; The first parameter provides a friendly name for the route, and the second specifies the URL format to match.&amp;#160; The third parameter, though, points to a Products.aspx page to handle the URL instead of a controller class.&amp;#160; You can optionally specify additional parameters to &lt;em&gt;MapPageRoute() &lt;/em&gt;that take advantage of features like “route constraints” and provide “default values for parameters” just like you can with ASP.NET MVC based route registrations.&lt;/p&gt; &lt;p&gt;Within the Products.aspx page you can then write code like below that uses the new &lt;em&gt;Page.RouteData&lt;/em&gt; property in ASP.NET 4.0 to retrieve the “category” parameter value mapped using the &lt;em&gt;/products/{category}&lt;/em&gt; URL filter, and then databind the category products to display them:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step3_00B54772.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;step3&quot; border=&quot;0&quot; alt=&quot;step3&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step3_thumb_06FC1E00.png&quot; width=&quot;544&quot; height=&quot;191&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In addition to programmatically accessing incoming route parameters using code like above, you can also take advantage of the new declarative &amp;lt;asp:routeparameter&amp;gt; control with any ASP.NET DataSource control to declaratively bind a value from a route as well.&amp;#160; For example, below we are using a &amp;lt;asp:routeparameter&amp;gt; statement to bind the select statement’s @category parameter from the &lt;em&gt;/products/{category}&lt;/em&gt; parameter in the URL route:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step4_3F3A9518.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;step4&quot; border=&quot;0&quot; alt=&quot;step4&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step4_thumb_5E7D3BEB.png&quot; width=&quot;565&quot; height=&quot;159&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Retrieving URLs within an ASP.NET Web Form&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The URL routing engine in ASP.NET can be used to both map incoming URLs to code handlers, as well as be used to programmatically generate outgoing URLs using the same mapping registration logic.&amp;#160; &lt;/p&gt; &lt;p&gt;For example, above when we mapped the &lt;em&gt;/products/{category}&lt;/em&gt; URL we gave it a “friendly name” of “products-browse”.&amp;#160; This allows us to now also use the new &lt;em&gt;Page.GetRouteUrl()&lt;/em&gt; helper method to lookup the route within the URL routing system, optionally specify parameters to it, and then retrieve an actual URL that it maps back to.&amp;#160; For example, the below code would retrieve a URL value of “/products/software”: &lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step6_1D6EBC87.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;step6&quot; border=&quot;0&quot; alt=&quot;step6&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step6_thumb_15E34D1A.png&quot; width=&quot;630&quot; height=&quot;63&quot;/&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;You can access the above helper method within either your code-behind file or within your .aspx markup.&amp;#160; &lt;/p&gt; &lt;p&gt;There is also now a &lt;em&gt;Response.RedirectToRoute()&lt;/em&gt; set of methods that you can use to redirect users to a route (regardless of whether it is a MVC or Web Forms handled one) and optionally pass parameters to it.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Handling PostBack Scenarios&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;URL Routing with ASP.NET 4.0 fully supports postback scenarios.&amp;#160; The &amp;lt;form runat=”server”&amp;gt; control will automatically emit the same URL that caused the page to be rendered.&amp;#160; For example, if you access a page with a &lt;em&gt;/products/software&lt;/em&gt; URL then any server-side &amp;lt;form runat=”server”&amp;gt; control within it would render out a &amp;lt;form action=”/products/software”&amp;gt; HTML element back to the client – which means that any postback scenarios that happen on the page will preserve the original URL.&amp;#160; &lt;/p&gt; &lt;p&gt;This makes supporting clean, SEO friendly, URLs easy with Web Forms and postback scenarios – and avoids some of the tricks people need to use today when using URL rewriting modules to achieve similar effects.&amp;#160; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;ASP.NET 4.0 makes it easy to implement clean, SEO friendly, URLs using both ASP.NET MVC and now ASP.NET Web Forms (you can also have applications that mix the two).&amp;#160; &lt;/p&gt; &lt;p&gt;The URL routing engine makes it easy to register URLs of any shape or format and map them to any handler you want.&amp;#160; Because the URL routing engine can be used for both mapping incoming URLs as well as generating outgoing URLs, you can at a later point change the URL mappings&amp;#160; and not have to modify any page or controller specific code to reflect them – which makes building SEO optimized applications much easier.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7228505&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7228505</guid>
         <pubDate>Tue, 13 Oct 2009 00:13:25 -0700</pubDate>
      </item>
      <item>
         <title>HTML now a data format(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/10/09/html-now-a-data-format.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/10/09/html-now-a-data-format.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;About a year ago, I asked the question on this blog whether HTML could and should be used as a data format:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2008/11/26/should-html-be-considered-as-a-data-format.aspx&quot;&gt;http://weblogs.asp.net/bleroy/archive/2008/11/26/should-html-be-considered-as-a-data-format.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After all, it actually already has semantic constructs appropriate for tabular data, for collections, for hierarchical data and for object graphs of any kind.&lt;/p&gt; &lt;p&gt;Well, apparently I wasn’t the only one to think that (not that I expected I was):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html&quot;&gt;http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7226613&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/aRmrxqkvU9k&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7226613</guid>
         <pubDate>Fri, 09 Oct 2009 23:54:00 -0700</pubDate>
      </item>
      <item>
         <title>Introducing SmartyRoute: A smarty-ier way to do routing in ASP.NET applications(Eilon)</title>
         <link>http://weblogs.asp.net/leftslipper/archive/2009/10/07/introducing-smartyroute-a-smarty-ier-way-to-do-routing-in-asp-net-applications.aspx</link>
         <description>http://weblogs.asp.net/leftslipper/archive/2009/10/07/introducing-smartyroute-a-smarty-ier-way-to-do-routing-in-asp-net-applications.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Inspired by ideas I have heard from people on my team (ideas that apparently I misunderstood!), I am introducing the new SmartyRoute, which provides a smarty-ier way to do routing in ASP.NET applications.&lt;/p&gt; &lt;p&gt;The basic idea is that you can make a request to a resource in an ASP.NET application without specifying a file extension in the URL. SmartyRoute will try to append a set of supported file extensions to find a handler to serve the request.&lt;/p&gt; &lt;h1&gt;Basic Routing&lt;/h1&gt; &lt;p&gt;In the simplest usage a user can make a request to &lt;strong&gt;~/helloworld&lt;/strong&gt; and SmartyRoute will find &lt;strong&gt;~/helloworld.aspx&lt;/strong&gt; on disk and use that as the handler. This is a very common scenario: Many developers don’t want to have file extensions in the URLs of their web sites. SmartyRoute enables developers to do that without making other changes to the application.&lt;/p&gt; &lt;h1&gt;Slightly More Advanced Routing&lt;/h1&gt; &lt;p&gt;A more advanced scenario is where a developer wants to have a URL such as ~/category/beverages. With the feature shown so far the developer has to have a &lt;strong&gt;~/category/beverages.aspx&lt;/strong&gt; on disk. There would also need to be another ASPX for every category in the application. However, SmartyRoute can walk up the path segments of the URL to locate a parent ASPX file. In this case SmartyRoute will detect that there is a file &lt;strong&gt;~/category.aspx&lt;/strong&gt; and load that instead. The rest of the data on the URL (in this case &quot;beverages&quot;) can get passed in as parameters to the ASPX page.&lt;/p&gt; &lt;h1&gt;Even More Advanced Routing&lt;/h1&gt; &lt;p&gt;To get parameter values there are a number of helper APIs that SmartyRoute offers. The simplest way is to call SmartyRoute.GetRouteMatch().PathInfo, which will return everything after the last &quot;/&quot; of what was handled in the request. For example, if the user requests &lt;strong&gt;~/category/beverages&lt;/strong&gt; and it gets handled by &lt;strong&gt;~/category.aspx&lt;/strong&gt; then the remaining &quot;beverages&quot; value in the URL will be the path info:&lt;/p&gt; &lt;pre class=&quot;csharpcode&quot;&gt; &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; category = SmartyRoute.GetRouteMatch().PathInfo; // &lt;span class=&quot;rem&quot;&gt;category == &quot;beverages&quot;&lt;/span&gt; &lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{font-size:small;color:black;font-family:consolas, &quot;Courier New&quot;, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt {background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}&lt;/style&gt; &lt;p&gt;If the path info contains multiple segments there is an alternative API that will do some of the heavier lifting for the developer. For example, if the URL is ~/category/beverages/5 (where &quot;5&quot; is the page number) there are these helpers:&lt;/p&gt; &lt;pre class=&quot;csharpcode&quot;&gt; &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; category = SmartyRoute.GetNextRouteValue(); &lt;span class=&quot;rem&quot;&gt;// category == &quot;beverages&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;int&lt;/span&gt; page = SmartyRoute.GetNextRouteValue&amp;lt;&lt;span class=&quot;kwrd&quot;&gt;int&lt;/span&gt;&amp;gt;(); // &lt;span class=&quot;rem&quot;&gt;page == 5&lt;/span&gt;&lt;/pre&gt; &lt;h1&gt;Setting It Up&lt;/h1&gt; &lt;p&gt;To use SmartyRoute in an application add a reference to the eStuff.Routing project and then go to your global.asax.cs and add this simple registration:&lt;/p&gt; &lt;pre class=&quot;csharpcode&quot;&gt; &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt;[] supportedExtensions = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt;[] { &lt;span class=&quot;str&quot;&gt;&quot;aspx&quot;&lt;/span&gt;, &lt;span class=&quot;str&quot;&gt;&quot;ashx&quot;&lt;/span&gt; }; RouteTable.Routes.Add(&lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; SmartyRoute(supportedExtensions));&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{font-size:small;color:black;font-family:consolas, &quot;Courier New&quot;, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt {background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}&lt;/style&gt; &lt;p&gt;And that’s it!&lt;/p&gt; &lt;h1&gt;Sample Project&lt;/h1&gt; &lt;p&gt;In the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/leftslipper/SmartyRoute.zip&quot;&gt;attached sample project&lt;/a&gt; (13KB) there is the eStuff.Routing project and a sample ASP.NET Web Application Project. Open the solution in Visual Studio 2008 (with SP1) and try out these URLs:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;http://localhost:59519/Default (will load ~/default.aspx) &lt;/li&gt; &lt;li&gt;http://localhost:59519/foo/bar (will load ~/foo/bar.aspx) &lt;/li&gt; &lt;li&gt;http://localhost:59519/category/beverages/5/soda (will load ~/category.aspx with parameters) &lt;/li&gt; &lt;li&gt;http://localhost:59519/MyHandlers/Boring (will load ~/MyHandlers/Boring.ashx handler) &lt;/li&gt; &lt;li&gt;http://localhost:59519/MyHandlers/CoolStuff/Quote (will try to load ~/MyHandlers/CoolStuff/Quote.ashx handler but will fail due to web.config security) &lt;/li&gt;
&lt;/ol&gt; &lt;p&gt;Note that you can still make requests using the file extensions: SmartyRoute doesn’t block any current functionality (not really, anyway).&lt;/p&gt; &lt;h1&gt;Feedback, Please!&lt;/h1&gt; &lt;p&gt;I’d love to hear whether people find this sort of routing functionality useful. The key advantage of this simplified routing system is that you, the developer, don’t have to specify any URL route formats, yet you get most of the advantages of ASP.NET Routing: Extensionless URLs, custom data in the path info, better SEO.&lt;/p&gt; &lt;p&gt;Would you use this in an application that you are building?&lt;/p&gt; &lt;p&gt;Are you already doing something similar in an existing application?&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7224924&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7224924</guid>
         <pubDate>Wed, 07 Oct 2009 10:38:19 -0700</pubDate>
      </item>
      <item>
         <title>Add-on Guidelines in action – AVG Security Toolbar(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/10/06/add-on-guidelines-in-action-avg-security-toolbar.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/10/06/add-on-guidelines-in-action-avg-security-toolbar.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.avg.com/&quot;&gt;AVG&lt;/a&gt; Security Toolbar team has recently released a new version of their toolbar. It has a more predictable user experience and does a better job of allowing users to stay in control of their browser. It’s a great example of the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2009/09/09/guidelines-for-add-on-developers.aspx&quot;&gt;Guidelines for add-on developers&lt;/a&gt; in action.&lt;/p&gt;
&lt;p&gt;It’s encouraging to see the example set by the AVG Security Toolbar team. They’re building valuable add-ons for people and at the same time they’re respecting user choice. Here are some high level examples of the changes they’ve made in the new version of their toolbar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It no longer takes over the search provider. Instead it uses the proper IE8 &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/cc849088(VS.85).aspx&quot;&gt;set default provider API&lt;/a&gt; so that &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2009/03/02/why-am-i-seeing-this-dialog.aspx&quot;&gt;users can choose their default&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;The close button is visible so that users can &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2009/03/09/change-in-toolbar-management.aspx&quot;&gt;manage it like other toolbars&lt;/a&gt;. Additionally, the toolbar is positioned in a supported location which improves stability and performance.&lt;/li&gt;
&lt;li&gt;It no longer modifies the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2008/09/10/introducing-the-ie8-new-tab-page.aspx&quot;&gt;new tab page&lt;/a&gt; to maintain a predictable new tab experience for users.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Kudos goes out to the AVG Security Toolbar team. On behalf of our shared customers, thanks. Following the Guidelines and using supported extensibility points in this way means that people have a consistent and reliable experience that allows them to stay in control of their browser. This is exactly what we’d like to see from all add-on developers.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Before: Previous version of AVG Security Toolbar&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Old version of the AVG toolbar which injected itself into the new tab page&quot; alt=&quot;Old version of the AVG toolbar which injected itself into the new tab page&quot; src=&quot;http://ieblog.members.winisp.net/images/herman_avg_toolbar_1.png&quot;&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;After: Newest version (2.507.24.1) of the AVG Security Toolbar provides a predictable experience and lets users stay in control of their browser&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;new version of the AVG toolbar with a more consistent user experience&quot; alt=&quot;new version of the AVG toolbar with a more consistent user experience&quot; src=&quot;http://ieblog.members.winisp.net/images/herman_avg_toolbar_2.png&quot;&gt; &lt;/p&gt;
&lt;p&gt;-Paul Cutsinger and Herman Ng&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9903913&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9903913</guid>
         <pubDate>Tue, 06 Oct 2009 19:47:00 -0700</pubDate>
      </item>
      <item>
         <title>Ajax Control Toolkit: new controls, bug fixes(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/09/30/ajax-control-toolkit-new-controls-bug-fixes.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/09/30/ajax-control-toolkit-new-controls-bug-fixes.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 10px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;(c) Bertrand Le Roy 2006&quot; border=&quot;0&quot; alt=&quot;(c) Bertrand Le Roy 2006&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/101327811_c6608a9e1b_b_31770601.jpg&quot; width=&quot;244&quot; height=&quot;164&quot;/&gt; And we have a new release of Ajax Control Toolkit. I didn’t work on this one but there are some nice things in there nonetheless :)&lt;/p&gt; &lt;p&gt;First, new controls!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Seadragon/Seadragon.aspx&quot;&gt;SeaDragon&lt;/a&gt;&lt;/strong&gt;: I’ve &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2008/11/20/deep-zoom-without-silverlight.aspx&quot;&gt;blogged&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/02/13/virtualalbion-using-deep-zoom-and-seadragon-ajax.aspx&quot;&gt;before&lt;/a&gt; about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://seadragon.com/&quot;&gt;Seadragon&lt;/a&gt;, the JavaScript-only way to do &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/cc645050(VS.95).aspx&quot;&gt;Deep Zoom&lt;/a&gt;. It became a lot easier to use a few month ago when the need for tools disappeared and you can just &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://seadragon.com/create/&quot;&gt;point to any image on the web&lt;/a&gt; and immediately get the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://seadragon.com/view/bqy&quot;&gt;URL&lt;/a&gt; and script tag to put on your page:&lt;/p&gt;  &lt;p&gt;Now with this release of Ajax Control Toolkit, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Seadragon/Seadragon.aspx&quot;&gt;including and controlling Deep Zoom from an ASP.NET page is also very easy&lt;/a&gt;:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;ajaxToolkit&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;Seadragon &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;ID&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;Seadragon&quot;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;CssClass&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;seadragon&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;runat&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;server&quot;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;SourceUrl&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sample.xml&quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;James Senior just released a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/jsenior/Seadragon-Ajax-Control-Quick-Start-Guide/&quot;&gt;screencast&lt;/a&gt; on how to create Deep Zoom contents for the new Seadragon control: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/posts/jsenior/Seadragon-Ajax-Control-Quick-Start-Guide/&quot;&gt;http://channel9.msdn.com/posts/jsenior/Seadragon-Ajax-Control-Quick-Start-Guide/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx&quot;&gt;AsyncFileUpload&lt;/a&gt;&lt;/strong&gt;: This is by far one of the most requested controls for ACT. File upload fields, while a part of HTML, do not work with Ajax/XHR requests (for security reasons, JavaScript can’t access the contents of the field). The only way to use them is to get the browser to do a real form post.&lt;/p&gt; &lt;p&gt;This new control makes it a lot easier to handle file uploads from your Ajax applications by providing an abstraction on top of the form posting:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;ajaxToolkit&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;AsyncFileUpload &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;OnClientUploadError&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;uploadError&quot;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;OnClientUploadComplete&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;uploadComplete&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;runat&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;server&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;ID&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;AsyncFileUpload1&quot;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;400px&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;UploaderStyle&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;Modern&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;UploadingBackColor&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;#CCFFFF&quot;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;ThrobberID&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;myThrobber&quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;It works pretty much as advertised: just drop the control on the page, and you can upload files without a full postback. It looks just like Ajax and requires no plug-in of any kind.&lt;img style=&quot;border-right-width:0px;margin:10px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;AsyncFileUpload&quot; border=&quot;0&quot; alt=&quot;AsyncFileUpload&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/AsyncFileUpload_6D7321E9.png&quot; width=&quot;519&quot; height=&quot;262&quot;/&gt; &lt;/p&gt; &lt;p&gt;The control has client and server-side events that get triggered when the file has been uploaded. On the server-side, you have access to the uploaded file’s byte stream, which you can save to disk (or database, or whatever).&lt;/p&gt; &lt;p&gt;Bug fixes: This release also has some new bug fixes (courtesy of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://obout.com/&quot;&gt;Obout&lt;/a&gt;) for some of the &lt;a rel=&quot;nofollow&quot; title=&quot;Click on &quot;Votes&quot; on the right-side of the page to sort by votes.&quot; target=&quot;_blank&quot; href=&quot;http://ajaxcontroltoolkit.codeplex.com/WorkItem/List.aspx&quot;&gt;top-voted issues&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Download the new release here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33804&quot;&gt;http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33804&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Try the live demos here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/ajax/ajaxcontroltoolkit/samples/&quot;&gt;http://www.asp.net/ajax/ajaxcontroltoolkit/samples/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Stephen's in-depth post about this release:
&lt;br/&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://stephenwalther.com/blog/archive/2009/10/01/new-ajax-control-toolkit-release.aspx&quot;&gt;http://stephenwalther.com/blog/archive/2009/10/01/new-ajax-control-toolkit-release.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7220674&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/iAtnh-C5Mow&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7220674</guid>
         <pubDate>Wed, 30 Sep 2009 17:28:00 -0700</pubDate>
      </item>
      <item>
         <title>Announcing the WebsiteSpark Program(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;I’m excited to announce a new program – &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark&lt;/a&gt; – that Microsoft is launching today.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark&lt;/a&gt; is designed for independent web developers and web development companies that build web applications and web sites on behalf of others.&amp;#160; It enables you to get software, support and business resources from Microsoft at no cost for three years, and enables you to expand your business and build great web solutions using ASP.NET, Silverlight, SharePoint and PHP, and the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/gallery/default.aspx&quot;&gt;open source applications&lt;/a&gt; built on top of them.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;What does the program provide?&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebSiteSpark&lt;/a&gt; provides software licenses that you can use for three years at no cost.&amp;#160; Once enrolled, you can download and immediately use the following software from Microsoft:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;3 licenses of Visual Studio 2008 Professional Edition &lt;/li&gt; &lt;li&gt;1 license of Expression Studio 3 (which includes Expression Blend, Sketchflow, and Web) &lt;/li&gt; &lt;li&gt;2 licenses of Expression Web 3 &lt;/li&gt; &lt;li&gt;4 processor licenses of Windows Web Server 2008 R2 &lt;/li&gt; &lt;li&gt;4 processor licenses of SQL Server 2008 Web Edition &lt;/li&gt; &lt;li&gt;DotNetPanel control panel (enabling easy remote/hosted management of your servers) &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The Windows Server and SQL Server licenses can be used for both development &lt;em&gt;and&lt;/em&gt; production deployment.&amp;#160; You can either self-host the servers on your own, or use the licenses with a hoster.&amp;#160; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark&lt;/a&gt; makes it easy to find hosters who are also enrolled in the program, and who can use your licenses to provide you with either dedicated or virtual dedicated servers to host your sites on.&lt;/p&gt; &lt;p&gt;In addition to software, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark&lt;/a&gt; provides partner opportunities to grow and build your business (including customer referrals through our partner programs).&amp;#160; It also includes product support (including 2 professional support incidents) and free online training for the products.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Who can join the program?&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebSiteSpark&lt;/a&gt; is available to independent web developers and small web development companies.&amp;#160; The only two requirements to join the program are:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Your company builds web sites and web application on behalf of others. &lt;/li&gt; &lt;li&gt;Your company currently has less than 10 employees. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;If you meet these requirements you can visit the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark website&lt;/a&gt; and sign-up today.&amp;#160; &lt;/p&gt; &lt;p&gt;As part of the enrollment process you can pick either a network referral partner (for example: a hoster or an existing Microsoft partner), or enter a referral code that you have received at an event or from a Microsoft employee.&amp;#160; If you send mail to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:webspark@microsoft.com&quot;&gt;webspark@microsoft.com&lt;/a&gt; you can get a referral code quickly.&amp;#160; You can then use that code to enroll in the program on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark website&lt;/a&gt;.&amp;#160; Once enrolled you can immediately download and use the software, as well as begin to participate in the network/partner opportunities.&lt;/p&gt; &lt;p&gt;If you have any problems enrolling, you can also send me mail (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:scottgu@microsoft.com&quot;&gt;scottgu@microsoft.com&lt;/a&gt;) and I can connect you with someone who can help.&amp;#160; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;What happens after the 3 years?&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;WebsiteSpark is a 3 year program.&amp;#160; There is &lt;u&gt;no obligation&lt;/u&gt; to continue to use any of the software after the three years is over, and there are no costs for the three years other than a $100 program fee at the end of the three years.&lt;/p&gt; &lt;p&gt;At the end of the three years, WebsiteSpark participants can optionally choose to purchase all of the software in the WebsiteSpark program via a $999/year package.&amp;#160; This includes 3 copies of VS Professional, 1 copy of Expression Studio (including Blend and Sketchflow), 2 copies of Expression Web, and 4 processor licenses of Windows Web Server 2008 and 4 processor licenses of SQL Server Web edition that can be used for production deployment.&lt;/p&gt; &lt;p&gt;Alternatively, if you want to purchase only the production server licenses, you can take advantage of a $199/year offering that includes both 1 Windows Web Server processor license &lt;em&gt;and&lt;/em&gt; 1 SQL Server Web edition processor license.&amp;#160; You can buy the quantity you need of this package at $199/year each.&amp;#160; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark program&lt;/a&gt; joins the other two successful “Spark” programs we’ve previously launched - &lt;em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/bizspark/&quot;&gt;BizSpark&lt;/a&gt;&lt;/em&gt; for startups, and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://www.dreamspark.com/default.aspx&quot;&gt;&lt;em&gt;DreamSpark&lt;/em&gt;&lt;/a&gt; for students.&lt;/p&gt; &lt;p&gt;Coming at a time when the current economic climate is still tough, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/websitespark/&quot;&gt;WebsiteSpark&lt;/a&gt; will help support developers and companies by providing the business resources, training, and software necessary for companies to get started and grow successful businesses on the Microsoft Web Platform.&lt;/p&gt; &lt;p&gt;Visit &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web&quot;&gt;www.microsoft.com/web&lt;/a&gt; to learn more about the Microsoft Web Platform, as well as download and install the new &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/downloads/platform.aspx&quot;&gt;Microsoft Web Platform Installer V2&lt;/a&gt; we released today – which makes it really easy to quickly provision web servers and web development machines.&amp;#160; You can then browse and download and use open source web applications from the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/gallery/default.aspx&quot;&gt;Windows Web Application Gallery&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have been using Twitter more recently to-do quick posts and share links.&amp;#160; You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;http://www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7215401&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7215401</guid>
         <pubDate>Thu, 24 Sep 2009 02:45:06 -0700</pubDate>
      </item>
      <item>
         <title>Tip/Trick: Increase your VS screen real estate by disabling HTML Navigation Bar(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/09/21/tip-trick-increase-your-vs-screen-real-estate-by-disabling-html-navigation-bar.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/09/21/tip-trick-increase-your-vs-screen-real-estate-by-disabling-html-navigation-bar.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;Below is a tip/trick I twittered via my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/scottgu&quot;&gt;Twitter account&lt;/a&gt; earlier today.&amp;#160; A number of people seemed interested in – so I thought i'd blog it here too.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;HTML Navigation Bar in VS 2008&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;By default, when you are in HTML source-editing mode with VS 2008 and Visual Web Developer 2008 Express edition there is a set of drop-downs that are rendered immediately above the HTML text editor view:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step1_12558954.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step1&quot; border=&quot;0&quot; alt=&quot;step1&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step1_thumb_70F5E3B7.png&quot; width=&quot;788&quot; height=&quot;487&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This set of drop-downs is called the &quot;Navigation Bar&quot;, and in the VS 2008 HTML editor they allow you to navigate between functions and methods defined within the HTML.&amp;#160; These include both JavaScript client-side functions defined inline within the .aspx/.html file, and server-side methods defined in-line within the .aspx file when in single-file mode (meaning no code-behind file).&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Disabling the HTML Navigation Bar and Getting back some pixels&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Personally I don't find the HTML navigation bar super useful – since I tend not to define JavaScript functions inline within the HTML (instead I use more unobtrusive JavaScript techniques and put my JavaScript code in separate files), and I usually use code-behind instead of single-file event handlers for server-side code.&lt;/p&gt; &lt;p&gt;If you are like me and also don't find yourself using that particular navigation toolbar much, you'll be happy to know that you can turn it off in VS 2008 and get back about 40-50 pixels that can instead be applied toward your HTML source code view.&amp;#160; To-do this, just select the Tools-&amp;gt;Options menu item within VS, navigate to the &quot;Text Editor-&amp;gt;HTML&quot; node and uncheck the &quot;Navigation Bar&quot; checkbox option:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step2_56B57A93.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step2&quot; border=&quot;0&quot; alt=&quot;step2&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step2_thumb_407F5F41.png&quot; width=&quot;762&quot; height=&quot;446&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Once you do this and press the &quot;ok&quot; button, you'll find that the drop-downs are gone and you have more screen real estate:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step3_2D5E3295.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step3&quot; border=&quot;0&quot; alt=&quot;step3&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step3_thumb_451569FB.png&quot; width=&quot;788&quot; height=&quot;487&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;(Note: if there is no immediate change after you hit ok, try closing and then re-opening the HTML/ASP.NET file)&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. By default with VS 2010 (starting with Beta2) we are hiding the navigation bar when in HTML mode with the standard web profile – you can then turn it back on via Tools-&amp;gt;Options if you find it useful.&amp;#160; VS 2010 also has a new optional &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/09/02/code-optimized-web-development-profile-vs-2010-and-net-4-0-series.aspx&quot;&gt;&quot;code optimized&quot; web profile&lt;/a&gt; as well that turns off all toolbars, dropdown and HTML designers.&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7212926&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7212926</guid>
         <pubDate>Mon, 21 Sep 2009 00:50:53 -0700</pubDate>
      </item>
      <item>
         <title>Fluent API for .NET RIA Services Metadata()</title>
         <link>http://www.nikhilk.net/RIA-Services-Fluent-Metadata-API.aspx</link>
         <description>http://www.nikhilk.net/RIA-Services-Fluent-Metadata-API.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;.NET RIA Services&lt;/a&gt; relies heavily on metadata annotations for expressing intent beyond what can be inferrd via convention. For example, validation rules on entities and members can be declared as annotations, which then enable a variety of consumption scenarios. We also have metadata for describing model aspects in DAL-agnostic fashion, and hints for automatic UI-generation. What we have today is just a first step.&lt;/p&gt;
&lt;p&gt;The general design we're enabling is actually quite flexible. For example, a number of developers want to have metadata specified external to their code, for example in XML files or in a database. Some don't like attributes, and have asked for a fluent interface instead. In RIA Services, we wanted to create a consistent API for consumers to lookup metadata. In short the CLR metadata API, or the TypeDescriptor API from component model. And we want to let producers or specifiers of metadata choose a persistence store or specification mechanism that meets the needs of their scenario, as long as they can surface attribute instances when needed.&lt;/p&gt;
&lt;p&gt;In fact, we have an over-arching vision for a metadata pipeline (which I'll get to later in the post).&lt;/p&gt;
&lt;p&gt;However, the first concrete experience developers have with our metadata model when adding validation rules and UI hints, is unfortunately not very pretty. The out-of-the-box approach is based on an associated metadata class (or buddy class) mechanism that we share with ASP.NET dynamic data. Some folks have called them “ugly buddies” and that name has caught on in terms of how the feature is described! The ugly buddies mechanism suffers from usability issues (eg. lots of repetition, and room for typos, or names getting out of sync) and discoverability issues. At the end of the day, it is no more than a workaround for the missing language feature that would enable adding metadata to members via a partial class.&lt;/p&gt;
&lt;p&gt;Using the extensibility mechanisms in the bits today, we've published a sample that demonstrates &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.msdn.microsoft.com/riaservices&quot;&gt;specifying metadata in XML&lt;/a&gt;. In this post, I'll show you my first stab at providing a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Fluent_interface&quot;&gt;fluent-API&lt;/a&gt;-based metadata approach. I'd obviously love to see this in the product out-of-the-box, but it is another feature, and there is the realities of a product cycle. However, there is always a v-next. In the meantime, do provide feedback via comments - it will definitely feed into the design process.&lt;/p&gt;
&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/RIA-Services-Fluent-Metadata-API.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=244</guid>
         <pubDate>Sun, 20 Sep 2009 21:34:10 -0700</pubDate>
         <category>Silverlight</category>
      </item>
      <item>
         <title>Fun with C# 4.0’s dynamic(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/09/17/fun-with-c-4-0-s-dynamic.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/09/17/fun-with-c-4-0-s-dynamic.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-right-width:0px;margin:0px 0px 10px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;(c) Bertrand Le Roy 2003&quot; border=&quot;0&quot; alt=&quot;(c) Bertrand Le Roy 2003&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/DSCN2236Touched_14096A29.jpg&quot; width=&quot;244&quot; height=&quot;184&quot;/&gt;There’s been &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx&quot;&gt;some&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://haacked.com/archive/2009/08/31/7-stages-of-language-keyword-grief.aspx&quot;&gt;debate&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.wekeroad.com/blog/magical-dynamic-mystery-tour/&quot;&gt;recently&lt;/a&gt; on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/dd264736(VS.100).aspx&quot;&gt;the new “dynamic” keyword in C# 4.0&lt;/a&gt;. As has been the case with many features before it, some love it, some hate it, some say it bloats the language, yadda yadda yadda. People said that about lambdas. Me, I’ll just use it where I see a use case, thank you very much.&lt;/p&gt; &lt;p&gt;In the case of dynamic, another frequent comment is that a statically-typed language should not try to look like a dynamic language. Well, I just don’t believe in that distinction.&lt;/p&gt; &lt;p&gt;Being dynamic is a &lt;em&gt;trait&lt;/em&gt; that a language can have, and some have it more than others. But as soon as a language has a dictionary type or indexers, and most modern languages do, it starts having dynamicity. What people call a dynamic language is just one where it’s the only available type.&lt;/p&gt; &lt;p&gt;Now there is type safety of course, but to me that’s a different feature that is not as coupled with “statically-typed-ness” as we usually tend to think. Case in point, many modern JavaScript engines analyze the code in order to apply many of the optimization techniques that static languages have been applying at compile-time.&lt;/p&gt; &lt;p&gt;So just how dynamic was C# before 4.0? Well, there are dictionaries and indexers, as I’ve said, but there are also other interesting and less known features such as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.componentmodel.customtypedescriptor.aspx&quot;&gt;custom type descriptors&lt;/a&gt;. Go &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms171819.aspx&quot;&gt;look them up&lt;/a&gt; if you don’t know about them. Type descriptors are for example used to provide a level of indirection between a design surface and the components being edited.&lt;/p&gt; &lt;p&gt;But type descriptors can also be built completely dynamically and decide to expose a completely virtual object model that is entirely built at runtime. Of course, the client code for that object has to go through the right APIs to make use of that quasi-dynamic model. And of course those APIs are not simple. Implementing a custom type descriptor in itself is not exactly trivial.&lt;/p&gt; &lt;p&gt;If anything, the dynamic keyword is going to provide a friendlier syntax for this sort of thing. One problem is that it has no relationship whatsoever with custom type descriptors.&lt;/p&gt; &lt;p&gt;So I thought I’d try to bridge that gap. How can we take a type that exposes a custom type descriptor, such as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.data.datarowview.aspx&quot;&gt;DataRowView&lt;/a&gt;, and transform that into something that plays nice with the dynamic keyword? What we want to be able to write is something like the following:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;table = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;DataTable&lt;/span&gt;(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;People&quot;&lt;/span&gt;);
table.Columns.Add(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;FirstName&quot;&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;));
table.Columns.Add(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;LastName&quot;&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;));
table.Columns.Add(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Children&quot;&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color:blue;&quot;&gt;int&lt;/span&gt;));
table.LoadDataRow(&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;new object&lt;/span&gt;[] {&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Bertrand&quot;&lt;/span&gt;, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Le Roy&quot;&lt;/span&gt;, 2},&lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;LoadOption&lt;/span&gt;.OverwriteChanges);
&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;tableView = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;DataView&lt;/span&gt;(table);&lt;br /&gt;
&lt;span style=&quot;color:blue;&quot;&gt;dynamic &lt;/span&gt;dynRecord = &lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;TypeDescriptorDynamicWrapper&lt;/span&gt;(tableView[0]);&lt;span style=&quot;color:#2b91af;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;{0} {1} has {2} children.&quot;&lt;/span&gt;, dynRecord.FirstName, dynRecord.LastName, dynRecord.Children);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;To do that, I built the TypeDescriptorDynamicWrapper that you see being used above. What is does is pretty simple, as it just inherits from DynamicObject and implements TryGetMember as follows:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;public override bool &lt;/span&gt;TryGetMember(&lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;GetMemberBinder &lt;/span&gt;binder, &lt;span style=&quot;color:blue;&quot;&gt;out object &lt;/span&gt;result) {&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;name = binder.Name; &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;property = _properties.Find( p =&amp;gt; p.Name.Equals(name, binder.IgnoreCase ? &lt;span style=&quot;color:#2b91af;&quot;&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase : &lt;span style=&quot;color:#2b91af;&quot;&gt;StringComparison&lt;/span&gt;.Ordinal)); &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(property == &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;) { result = &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;; &lt;span style=&quot;color:blue;&quot;&gt;return false&lt;/span&gt;; } result = property.GetValue(&lt;br /&gt; _descriptor.GetPropertyOwner(&lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;)); &lt;span style=&quot;color:blue;&quot;&gt;return true&lt;/span&gt;;
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;As you can see, the method just finds the right property on the type descriptor and delegates to it if it finds it. I didn’t implement the setting of properties but it would be fairly easy to do so.&lt;/p&gt; &lt;p&gt;Using that simple wrapper, the program above just works and displays:&lt;/p&gt; &lt;p style=&quot;background-color:black;font-family:courier;color:white;&quot;&gt;Bertrand Le Roy has 2 children.&lt;/p&gt; &lt;p&gt;That was easy. Now what about the reverse, getting any dynamic object to expose a custom type descriptor?&lt;/p&gt; &lt;p&gt;Well, that’s where things get tricky.&lt;/p&gt; &lt;p&gt;The dynamic capabilities of C# 4.0 are targeted at two things:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Providing syntactic sugar for getting to dynamic members that looks like accessing statically-defined ones.&lt;/li&gt; &lt;li&gt;An easy way to create dynamic types by implementing a form of method_missing.&lt;/li&gt;
&lt;/ol&gt; &lt;p&gt;But there is one thing that exists in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dlr.codeplex.com/&quot;&gt;DLR&lt;/a&gt; but didn’t make it to C# yet, which is the ability to easily reflect on dynamic objects (other than by using the #1 syntactic sugar above).&lt;/p&gt; &lt;p&gt;For example, in JavaScript, a.foo and a[“foo”] are exactly the same thing, which enables easy reflection: you can enumerate the members of an arbitrary object and do stuff like a[someStringVariable].&lt;/p&gt; &lt;p&gt;Doing the same thing with C# on dynamic objects is much more difficult. The equivalent of a.foo is easy, but not the equivalent of a[someStringVariable].&lt;/p&gt; &lt;p&gt;Forget about using reflection, it doesn’t work on dynamic objects because &lt;em&gt;dynamic really is a compiler trick&lt;/em&gt;. There is no such thing as a “dynamic” type to reflect on. It’s a keyword that tells the compiler to relax type-checking and generate code to access those dynamic members at runtime. If you try to reflect on an instance of one of the dynamic-friendly type, such as ExpandoObject, you’ll see the statically-defined members of that type, but not the dynamic ones. In a way, you’re looking at the messenger instead of the message.&lt;/p&gt; &lt;p&gt;This is a problem because in order to wrap an arbitrary dynamic object into a custom type descriptor, we need to be able to reflect on the dynamic members of that object.&lt;/p&gt; &lt;p&gt;To solve the problem, and with some help from the nice folks who are building the DLR, I compiled a simple program that sets and gets a property on a dynamic object, an then I looked at the generated code from Reflector (“luckily”, Reflector is not yet aware of dynamic and shows the generated code instead of something closer to the actual code you wrote).&lt;/p&gt; &lt;p&gt;I was then able to refactor that code and replace the string constants for the accessed member with a method parameter, thus creating a generic way to access dynamic object properties:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;public static object &lt;/span&gt;GetValue(&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;object &lt;/span&gt;dyn, &lt;span style=&quot;color:blue;&quot;&gt;string &lt;/span&gt;propName) {&lt;br /&gt; &lt;span style=&quot;color:green;&quot;&gt;// Warning: this is rather expensive,&lt;br /&gt; // and should be cached in a real app &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;GetterSite = &lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;CallSite&lt;/span&gt;&amp;lt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Func&lt;/span&gt;&amp;lt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CallSite&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;object&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&lt;br /&gt; .Create( &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpGetMemberBinder&lt;/span&gt;(propName, dyn.GetType(), &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfo&lt;/span&gt;[] { &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfo&lt;/span&gt;(&lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfoFlags&lt;/span&gt;.None, &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;) })); &lt;span style=&quot;color:blue;&quot;&gt;return &lt;/span&gt;GetterSite.Target(GetterSite, dyn);
} &lt;span style=&quot;color:blue;&quot;&gt;public static void &lt;/span&gt;SetValue(&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;object &lt;/span&gt;dyn, &lt;span style=&quot;color:blue;&quot;&gt;string &lt;/span&gt;propName, &lt;span style=&quot;color:blue;&quot;&gt;object &lt;/span&gt;val) {&lt;br /&gt; &lt;span style=&quot;color:green;&quot;&gt;// Warning: this is rather expensive,&lt;br /&gt; // and should be cached in a real app &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;SetterSite = &lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;CallSite&lt;/span&gt;&amp;lt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Func&lt;/span&gt;&amp;lt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CallSite&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;object&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;object&lt;/span&gt;, &lt;span style=&quot;color:blue;&quot;&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&lt;br /&gt; .Create( &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpSetMemberBinder&lt;/span&gt;(propName, dyn.GetType(), &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfo&lt;/span&gt;[] { &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfo&lt;/span&gt;(&lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfoFlags&lt;/span&gt;.None, &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;), &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfo&lt;/span&gt;(&lt;br /&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfoFlags&lt;/span&gt;.LiteralConstant | &lt;span style=&quot;color:#2b91af;&quot;&gt;CSharpArgumentInfoFlags&lt;/span&gt;.UseCompileTimeType,&lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;null&lt;/span&gt;) })); SetterSite.Target(SetterSite, dyn, val);
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;Once we have that, implementing the custom type provider is relatively straightforward. The only part that is not immediately obvious is how to enumerate the properties of the dynamic object.&lt;/p&gt; &lt;p&gt;This is done as follows. Dynamic objects implement &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider(VS.100).aspx&quot;&gt;IDynamicMetaObjetProvider&lt;/a&gt;, which has a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider.getmetaobject(VS.100).aspx&quot;&gt;GetMetaObject&lt;/a&gt; method, which returns a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicmetaobject(VS.100).aspx&quot;&gt;DynamicMetaObject&lt;/a&gt; object on which you can call &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicmetaobject.getdynamicmembernames(VS.100).aspx&quot;&gt;GetDynamicMemberNames&lt;/a&gt; to get the list of members.&lt;/p&gt; &lt;p&gt;We can now take any dynamic object and for example present it in a property grid, which is one of those components that know how to handle custom type descriptors but not the new dynamic objects:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;dynamic &lt;/span&gt;person = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;ExpandoObject&lt;/span&gt;();
person.FirstName = &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Bertrand&quot;&lt;/span&gt;;
person.LastName = &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Le Roy&quot;&lt;/span&gt;;
person.Children = 2;
propertyGrid1.SelectedObject = &lt;br /&gt; &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;DynamicTypeDescriptorWrapper&lt;/span&gt;(person);&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;And here’s what the results look like:&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:10px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;PropertyGrid displaying a dynamic object.&quot; border=&quot;0&quot; alt=&quot;PropertyGrid displaying a dynamic object.&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/DynamicPropertyGrid_5E24750E.png&quot; width=&quot;304&quot; height=&quot;207&quot;/&gt; &lt;/p&gt; &lt;p&gt;In conclusion, I’d say that although we are having a healthy debate on the dynamic keyword (and we should have that debate), I’m confident that in one or two years, we’ll have some incredibly imaginative uses of the feature that will simply blow us away and will make the current conversation a little sillier than it seems today. The feature itself is also in its infancy and not only will the use cases emerge way beyond what even its designers envisioned, it will also grow and become more usable with future versions of the language, as is made clear by the gap in functionality that still exists today with the full DLR project.&lt;/p&gt; &lt;p&gt;You can download the code for this article here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/Bleroy.Sample.Dynamic.zip&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/Bleroy.Sample.Dynamic.zip&quot;&gt;http://weblogs.asp.net/blogs/bleroy/Samples/Bleroy.Sample.Dynamic.zip&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7209018&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/OUcxOVOhtjE&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7209018</guid>
         <pubDate>Thu, 17 Sep 2009 00:50:29 -0700</pubDate>
      </item>
      <item>
         <title>Announcing the Microsoft AJAX CDN(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/09/15/announcing-the-microsoft-ajax-cdn.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/09/15/announcing-the-microsoft-ajax-cdn.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;Earlier today the ASP.NET team launched a new Microsoft Ajax CDN (Content Delivery Network) service that provides caching support for AJAX libraries (including jQuery and ASP.NET AJAX).&amp;#160; The service is available for free, does not require any registration, and can be used for both commercial and non-commercial purposes.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;What does a CDN provide?&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Content delivery networks (CDNs) are composed of &quot;edge cache&quot; servers that are strategically placed around the world at key Internet network points.&amp;#160; These &quot;edge cache&quot; servers can be used to cache and deliver all types of content – including images, videos, CSS and JavaScript files.&lt;/p&gt; &lt;p&gt;Using a CDN can significantly improve a website's end-user performance, since it enables browsers to more quickly retrieve and download content.&amp;#160; For example, instead of having a browser request for an image traverse all the way across the Internet to your web server to download, a CDN can instead serve the request directly from a nearby &quot;edge cache&quot; server that might only be a single network hop away from your customer (making it return much faster – which makes your pages load quicker).&amp;#160; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;What does the Microsoft AJAX CDN provide?&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The Microsoft AJAX CDN makes it really easy to add the jQuery and ASP.NET AJAX script libraries to your web sites, and have them be automatically served from one of our thousands of geo-located edge-cache servers around the world.&amp;#160; &lt;/p&gt; &lt;p&gt;For example, if you want to use jQuery from the Microsoft AJAX CDN then you can simply add a standard script tag to your page using the URL below:&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;line-height:115%;font-size:10pt;&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js&quot;&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;text/javascript&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;When the browser requests the script file it will be automatically served by the CDN &quot;edge cache&quot; server that is closest to the end-user.&amp;#160; This means:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The request will be processed much faster than if it had to hit your web-server (making the end-user's page load much faster) &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;You don't have to pay for the bandwidth of this file – since the file comes from our server we pay the bandwidth cost (saving you money) &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;The script can be easily cached across multiple web-sites – which means it might not even need to be downloaded if the user has already hit a web-site that requested the file (and as such has it already in the browser's cache).&amp;#160; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;You can get a full listing of the JavaScript libraries (and associated URLs) we already have loaded in our CDN cache here: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/ajax/cdn&quot;&gt;www.asp.net/ajax/cdn&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;We'll update the available libraries in the CDN as we ship new versions of ASP.NET AJAX, and continue to update it to include all of the JavaScript files we ship with ASP.NET and Visual Studio (including jQuery, the jQuery Validation plugin, and additional libraries we ship in the future).&amp;#160; &lt;/p&gt; &lt;p&gt;The CDN service is free and available for anyone in the community to use for both commercial and non-commercial purposes.&amp;#160; You do not need to register to take advantage of it.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Using the Microsoft AJAX CDN with the ASP.NET 4.0 ScriptManager&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;In addition to allowing you to reference script files directly using a &amp;lt;script&amp;gt; element, ASP.NET 4.0 will make it easy to use the CDN from ASP.NET Web Forms applications that use the &amp;lt;asp:scriptmanager/&amp;gt; server control.&amp;#160; &lt;/p&gt; &lt;p&gt;The ASP.NET 4.0 &amp;lt;asp:ScriptManager&amp;gt; control includes a new property named EnableCdn. When you assign the value &lt;b&gt;true&lt;/b&gt; to this property, your application will use the Microsoft CDN to request JavaScript files automatically:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/scriptmanager_2204295B.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;scriptmanager&quot; border=&quot;0&quot; alt=&quot;scriptmanager&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/scriptmanager_thumb_76535F5E.png&quot; width=&quot;240&quot; height=&quot;118&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When you enable the CDN with the ScriptManager, your application will retrieve all JavaScript files that it normally retrieves from the System.Web.dll or System.Web.Extensions.dll assemblies from the CDN instead.&amp;#160; This includes both the JavaScript files within ASP.NET AJAX, as well as the built-in Web Forms JavaScript files (for example: the WebUIValidation.js file for client-side validation, and the JavaScript files for controls like TreeView, Menu, etc).&lt;/p&gt; &lt;p&gt;This provides a nice end-user performance improvement, and means that users accessing your ASP.NET website won’t need to re-download these files if they have visited another ASP.NET website that uses the CDN.&lt;/p&gt; &lt;h3&gt;Using ASP.NET AJAX Preview 5 from the CDN&lt;/h3&gt; &lt;p&gt;In addition to launching the AJAX CDN site, the ASP.NET team has also recently released ASP.NET AJAX Preview 5. You can download ASP.NET AJAX Preview 5 (with sample code) from CodePlex: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32770&quot;&gt;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32770&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can also now use the ASP.NET AJAX libraries simply by adding the following script tags that point at the CDN:&lt;/p&gt; &lt;p style=&quot;line-height:normal;margin-bottom:0pt;&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;http://ajax.microsoft.com/ajax/beta/0909/MicrosoftAjax.js&quot;&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;text/javascript&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt; &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;line-height:115%;font-size:10pt;&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;http://ajax.microsoft.com/ajax/beta/0909/MicrosoftAjaxTemplates.js&quot;&lt;/span&gt; &lt;span style=&quot;color:red;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;text/javascript&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;These script tags reference the beta version of the September 2009 release of the ASP.NET AJAX library (the /0909/ part of the URL represents the year and month that the version of ASP.NET AJAX was released).&amp;#160; &lt;/p&gt; &lt;p&gt;After you add script tags that reference the ASP.NET AJAX library, you can start using the library in your page. For example, the following code attaches a client DataView control that represents an array of photos to a DIV element in the body of the page.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/data_67A8B379.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;data&quot; border=&quot;0&quot; alt=&quot;data&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/data_thumb_34D8AD05.png&quot; width=&quot;576&quot; height=&quot;336&quot;/&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;The DIV element – with an id of &quot;photos&quot; – contains a template for formatting each photo in the array of photos. Here’s how the photos element is declared:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/template_541B53D8.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;template&quot; border=&quot;0&quot; alt=&quot;template&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/template_thumb_658BB4B0.png&quot; width=&quot;386&quot; height=&quot;124&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When the DataView is rendered, the contents of the photos DIV element is rendered for each photo in the array of photos. The following photos are displayed:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/photos_0BED97FC.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;photos&quot; border=&quot;0&quot; alt=&quot;photos&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/photos_thumb_559C6FEC.png&quot; width=&quot;522&quot; height=&quot;636&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Because ASP.NET AJAX is a pure JavaScript library, the code above works perfectly well in an ASP.NET Web Forms, ASP.NET MVC, HTML, or even with classic Active Server Pages. The code also works with all modern browsers.&lt;/p&gt; &lt;p&gt;You can learn more about ASP.NET AJAX Preview 5 by downloading the sample code from the CodePlex project: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32770&quot;&gt;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32770&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Below are several blog posts that delve into the features of ASP.NET AJAX Preview 5 in more depth:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/infinitiesloop/archive/2009/09/10/microsoft-ajax-4-preview-5-the-dataview-control.aspx&quot;&gt;Microsoft Ajax 4 Preview 5: The DataView Control&lt;/a&gt; -- Dave Reed explains how to take advantage of the new Dynamic Templates and Placeholders feature added to Preview 5. &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/jimwang/archive/2009/09/11/asp-net-ajax-preview-5-and-updatepanel.aspx&quot;&gt;ASP.NET Ajax Preview 5 and UpdatePanel&lt;/a&gt; – Jim Wang explains how you can use Preview 5 with existing websites that use the standard ASP.NET UpdatePanel control. &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&quot;&gt;Building a class browser with Microsoft Ajax 4.0 Preview 5&lt;/a&gt; – Bertrand Le Roy builds a very cool Ajax class browser application by taking advantage of several new features of Preview 5 including recursive templates. &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lostintangent.com/2009/06/20/how-the-datacontext-can-change-your-data-and-your-life-well-sort-of-but-not-really/&quot;&gt;How the DataContext can change your data and your life (well, sort of, but not really)&lt;/a&gt; – Jonathan Carter has a great series of posts that dive into the details of the Ajax DataView and DataContext. &lt;/li&gt; &lt;/ul&gt; &lt;ul&gt;&lt;/ul&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The Microsoft Ajax CDN enables you to significantly improve the performance of ASP.NET Web Forms and ASP.NET MVC applications that use ASP.NET AJAX or jQuery.&amp;#160; The service is available for free, does not require any registration, and can be used for both commercial and non-commercial purposes.&lt;/p&gt; &lt;p&gt;ASP.NET 4.0 will make it especially easy for ASP.NET Web Forms developers to take advantage of the CDN. By setting one property of the ScriptManager control, you will be able to redirect all requests for the built-in ASP.NET JavaScript files to the CDN and improve the performance of your Web Forms applications. &lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have been using Twitter more recently to-do quick posts and share links.&amp;#160; You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;http://www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7207601&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7207601</guid>
         <pubDate>Tue, 15 Sep 2009 23:46:17 -0700</pubDate>
      </item>
      <item>
         <title>Supporting Web Standards Development with SuperPreview(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/09/15/supporting-web-standards-development-with-superpreview.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/09/15/supporting-web-standards-development-with-superpreview.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;This post is a guest post from Steve Guttman, of the Expression Web team.&amp;nbsp; Expression Web has created an interesting tool, SuperPreview, which we thought the IE blog audience would be interested in.&amp;nbsp; &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Internet Explorer 8 is an important release because it reconfirms Microsoft’s&amp;nbsp; commitment to interoperability and renewed emphasis on Web Standards. My team—which develops the authoring tool, Expression Web—is also pretty emphatic about Web Standards. We’re in the process of doing significant tooling (and retooling) so we can support existing and emerging specifications, reliably.&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The Expression Web team recently shipped &lt;i&gt;SuperPreview for Internet Explorer,&lt;/i&gt; a FREE tool for performing cross-browser debugging across Internet Explorer, including versions 6, 7, and 8.&amp;nbsp; This tool also helps developers and site owners in migrating their sites from earlier versions of Internet Explorer&amp;nbsp; to the standards-compliant Internet Explorer 8. This is a subset of the full version of SuperPreview (which also supports Firefox) and which ships with Expression Web 3. You can download it &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&quot;&gt;here&lt;/a&gt;.&amp;nbsp; You can learn more about SuperPreview for Internet Explorer on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/xweb/archive/2009/09/03/free-internet-explorer-debugging-tool-microsoft-expression-web-superpreview-for-windows-internet-explorer.aspx&quot;&gt;the Expression Web team blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;screenshot of Expression Web SuperPreview&quot; alt=&quot;screenshot of Expression Web SuperPreview&quot; src=&quot;http://ieblog.members.winisp.net/images/Steve_expressionweb.png&quot;&gt; &lt;/p&gt;
&lt;p&gt;Thanks, &lt;br&gt;Steve Guttman &lt;br&gt;Product Unit Manager &lt;br&gt;Expression Web&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9895607&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9895607</guid>
         <pubDate>Tue, 15 Sep 2009 19:03:00 -0700</pubDate>
      </item>
      <item>
         <title>Auto-Start ASP.NET Applications (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot;&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;This is the seventh in &lt;/font&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;a series of blog posts&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I’m going to switch from discussing new VS 2010 tooling features and instead do a few posts covering a few new runtime features (don’t worry – I’ll come back to a lot more VS features, I’m just trying to mix things up a bit).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Today’s post covers a small, but nice, new feature that you can now optionally take advantage of with ASP.NET 4 - the ability to automatically startup and proactively initialize a web application without having to wait for an external client to hit the web server.&amp;#160; This can help you provide a faster response experience for the first user who hits the server, and avoids you having to write custom scripts to “warm up” the server and get any data caches ready.&amp;#160; It works with all types of ASP.NET applications – including both ASP.NET Web Forms and ASP.NET MVC based applications.&lt;/font&gt;&lt;/p&gt; &lt;h3&gt;&lt;u&gt;&lt;font face=&quot;Arial&quot;&gt;Auto-Start Web Applications with ASP.NET 4&lt;/font&gt;&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Some web applications need to load large amounts of data, or perform expensive initialization processing, before they are ready to process requests.&amp;#160; Developers using ASP.NET today often do this work using the “Application_Start” event handler within the Global.asax file of an application (which fires the first time a request executes).&amp;#160; They then either devise custom scripts to send fake requests to the application to periodically “wake it up” and execute this code before a customer hits it, or simply cause the unfortunate first customer that accesses the application to wait while this logic finishes before processing the request (which can lead to a long delay for them).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;ASP.NET 4 ships with a new feature called “auto-start” that better addresses this scenario, and is available when ASP.NET 4 runs on IIS 7.5 (which ships with Windows 7 and Windows Server 2008 R2).&amp;#160; The auto-start feature provides a controlled approach for starting up an application worker process, initializing an ASP.NET application, and then accepting HTTP requests.&lt;/font&gt;&lt;/p&gt; &lt;h3&gt;&lt;u&gt;&lt;font face=&quot;Arial&quot;&gt;Configuring an ASP.NET 4 Application to Auto-Start&lt;/font&gt;&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;To use the ASP.NET 4 auto-start feature, you first configure the IIS “application pool” worker process that the application runs within to automatically startup when the web-server first loads.&amp;#160; &lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;You can do this by opening up the IIS 7.5 applicationHost.config file (C:&amp;#92;Windows&amp;#92;System32&amp;#92;inetsrv&amp;#92;config&amp;#92;applicationHost.config) and by adding a &lt;em&gt;startMode=”AlwaysRunning”&lt;/em&gt; attribute to the appropriate &amp;lt;applicationPools&amp;gt; entry:&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p class=&quot;CodeCxSpFirst&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;applicationPools&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;add&lt;span style=&quot;color:blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;MyAppWorkerProcess&lt;/span&gt;&quot; &lt;font color=&quot;#ff0000&quot;&gt;managedRuntimeVersion&lt;/font&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;v4.0&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt; &lt;/span&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;color:red;&quot;&gt;startMode&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;AlwaysRunning&quot;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color:blue;&quot;&gt; /&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpLast&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;&quot;&gt;applicationPools&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;If you load up the Windows task manager, click the “show processes from all users” checkbox, and then hit save on a startMode attribute change to the applicationHost.config file, you’ll see a new “w3wp.exe” worker process immediately startup as soon as the file is saved.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;A single IIS application pool worker process can host multiple ASP.NET applications.&amp;#160; You can specify which applications you want to have automatically start when the worker process loads by adding a &lt;em&gt;serviceAutoStartEnabled=&quot;true&quot; &lt;/em&gt;attribute on their &amp;lt;application&amp;gt; configuration entry:&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p class=&quot;CodeCxSpFirst&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;sites&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;site&lt;span style=&quot;color:blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;MySite&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;1&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span&gt;application&lt;span style=&quot;color:blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;/&lt;/span&gt;&quot; &lt;strong&gt;&lt;font color=&quot;#ff0000&quot;&gt;serviceAutoStartEnabled&lt;/font&gt;=&quot;&lt;span style=&quot;color:blue;&quot;&gt;true&lt;/span&gt;&quot; &lt;font color=&quot;#ff0000&quot;&gt;serviceAutoStartProvider&lt;/font&gt;=&quot;&lt;font color=&quot;#0000ff&quot;&gt;PreWarmMyCache&lt;/font&gt;&quot; &lt;/strong&gt;/&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;&quot;&gt;site&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpLast&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;&quot;&gt;sites&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpLast&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpFirst&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;serviceAutoStartProviders&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;add&lt;span style=&quot;color:blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;PreWarmMyCache&lt;/span&gt;&quot; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;font color=&quot;#0000ff&quot;&gt;PreWarmCache, MyAssembly&lt;/font&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpLast&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;serviceAutoStartProviders&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The &lt;em&gt;serviceAutoProvider=&quot;PreWarmMyCache&quot; &lt;/em&gt;attribute above references a provider entry within the config file that enables you to configure a custom class that can be used to encapsulate any &quot;warming up&quot; logic for the application.&amp;#160; &lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;This class will be automatically invoked as soon as the worker process and application are preloaded (before any external web requests are received), and can be used to execute any initialization or cache loading logic you want to run before requests are received and processed:&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p class=&quot;CodeCxSpFirst&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;&quot;&gt; &lt;span style=&quot;color:blue;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color:#2b91af;&quot;&gt;PreWarmCache&lt;/span&gt; : System.Web.Hosting.IProcessHostPreloadClient &lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;&quot;&gt;{&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color:blue;&quot;&gt;void&lt;/span&gt; Preload(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;[] parameters) &lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;&quot;&gt;{ &lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style=&quot;color:green;&quot;&gt;// Perform initialization and cache loading logic here... &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpMiddle&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p class=&quot;CodeCxSpLast&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;font face=&quot;Courier New&quot;&gt;} &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;IIS will start the application in a state during which it will not accept requests until your &quot;warming up&quot; logic has completed.&amp;#160; After your initialization code runs in the Preload method and the method returns, the ASP.NET application will be marked as ready to process requests.&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;You can optionally combine the new auto-start &quot;warming up&quot; feature with the load-balancing capabilities of the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.iis.net/extensions/ApplicationRequestRouting&quot;&gt;IIS7 Application Request Routing (ARR)&lt;/a&gt; extension, and use it to signal to a load-balancer once the application is initialized and ready to accept HTTP traffic – at which point the server can be brought into the web farm to process requests. &lt;/font&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;The new &quot;auto start&quot; feature of ASP.NET 4 and IIS 7.5 provides a well-defined approach that allows you to perform expensive application startup and pre-cache logic that can run before any end-users hit your application.&amp;#160; This enables you to have your application &quot;warmed up&quot; and ready from the very beginning, and deliver a consistent high performance experience.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have been using Twitter more recently to-do quick posts and share links.&amp;#160; You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;http://www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7206086&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;/font&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7206086</guid>
         <pubDate>Tue, 15 Sep 2009 01:46:13 -0700</pubDate>
      </item>
      <item>
         <title>Why Guitar Hero is dead to me(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/09/15/why-guitar-hero-is-dead-to-me.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/09/15/why-guitar-hero-is-dead-to-me.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2007/09/09/plastic-x-plorer-paint-job.aspx&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) Bertrand Le Roy 2007&quot; border=&quot;0&quot; alt=&quot;(c) Bertrand Le Roy 2007&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/18_Motto1_44278870.jpg&quot; width=&quot;244&quot; height=&quot;164&quot;/&gt;&lt;/a&gt; I bought the new Guitar Hero 5 because I needed a new fake plastic guitar and Activision’s guitars are the best that are not &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.logitech.com/index.cfm/gaming/xbox_360/devices/5186&amp;amp;cl=us,en&quot;&gt;outrageously expensive&lt;/a&gt;. The Rock Band guitars I just can’t stand. So as I was going to buy a guitar from them, I thought I might as well get a (couple of) cheap game(s) with it.&lt;/p&gt; &lt;p&gt;At first, I really liked what they did with GH5, especially when compared to the mediocre World Tour. The party mode, for example, is a very nice idea: the game acts as a media player and plays songs on its own; but you can jump in at any time and start to play any instrument. Being able to play any instrument in any number is also a nice touch, seeing as few people like to sing in public, but most are not afraid of the guitar or drum set.&lt;/p&gt; &lt;p&gt;I also liked the tapping sections and the bass’ sixth note.&lt;/p&gt; &lt;p&gt;Problem is, that’s about it. The game has 85 songs but they’re not good. Going through the career mode feels like you’re grinding through mediocre song after horrible song. And when there’s one good song (there are a few), it is usually spoiled by an absurd, deliberately “challenging” partition. “Challenging”, in Activision’s mind of course means they have to make extra-sure you’ll have no fun playing the song.&lt;/p&gt; &lt;p&gt;After passing most songs, I heard myself thinking “this is a song I’m never going to play ever again”.&lt;/p&gt; &lt;p&gt;And the design… Will somebody please do something about the ugliness and get out of that uncanny valley? The rest of the industry has, one way or another. Guitar Hero is generally very consistent about the bad taste.&lt;/p&gt; &lt;p&gt;Contrast that with the elegant and subdued design of Rock Band, their well-balanced, well-designed, fun partitions that have the appropriate difficulty (no song is harder in medium than another in expert for example).&lt;/p&gt; &lt;p&gt;And of course, until EA and Activision realize &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/bleroy/archive/2008/10/24/we-need-rock-band-guitar-hero-song-compatibility.aspx&quot;&gt;the consumer’s interest is theirs and it’s absurd to limit the songs you sell to only one media player&lt;/a&gt;, there can be only one. Nobody wants to switch games in the middle of a party. But that is unlikely to happen as Activision can’t even manage to be compatible with their own games: 35 songs out of World Tour’s 85? WTF? It’s as if Apple was &lt;em&gt;selling&lt;/em&gt; iTunes 2008 and iTunes 2009 but you couldn’t play on 2009 all the songs you bought on 2008. And you had to pay &lt;em&gt;again&lt;/em&gt; to play those few “old” songs that you bought only a year earlier.&lt;/p&gt; &lt;p&gt;Don’t even get me started on how they milk the franchise, from inane band-specific titles to ridiculous toy-versions.&lt;/p&gt; &lt;p&gt;There can be only one in each home, and for me that one is going to be, for now and I suspect for a long time, Rock Band.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7205992&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/qBb8_wXlwSI&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7205992</guid>
         <pubDate>Tue, 15 Sep 2009 00:14:38 -0700</pubDate>
      </item>
      <item>
         <title>Building a class browser with Microsoft Ajax 4.0 Preview 5(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/09/14/building-a-class-browser-with-microsoft-ajax-4-0-preview-5.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) 2004 Bertrand Le Roy&quot; border=&quot;0&quot; alt=&quot;(c) 2004 Bertrand Le Roy&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/DSCN3593_4CCCACF9.jpg&quot; width=&quot;184&quot; height=&quot;244&quot;/&gt; The Microsoft Ajax Library 4.0 Preview 5 is the first release of Microsoft Ajax that I didn’t participate in: I left the team a few months ago. But that doesn’t mean I don’t love what’s in there, and I really do. And by the way I’ve also seen what’s in Preview 6 too and man that will seriously rock.&lt;/p&gt; &lt;p&gt;So I thought I’d write a little something to celebrate the new preview. The new features include recursive templates, which is pretty much begging us to implement a treeview with it, and we’ll do just that in this post.&lt;/p&gt; &lt;p&gt;There is also an intriguing capability, which enables you to dynamically set what template to render for each data item, and where to render it. At first, this doesn’t look like the most useful thing in the world, but it actually opens up some very interesting possibilities, which we’ll also show in this post.&lt;/p&gt; &lt;p&gt;The sample code that I’m going to write for this post is a rudimentary class browser. It will render a treeview representing the hierarchical structure of namespaces and classes in Microsoft Ajax, and clicking one of the tree nodes will render a details view for it: a list of classes and subnamespaces for namespaces, and a grouped list of members for classes.&lt;/p&gt; &lt;p&gt;Let’s start with the tree. It will be rendered as nested unordered lists by a simple recursive DataView:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;tree&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;tree&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;attach&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;dataview&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;{{ Type.getRootNamespaces() }}&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;itemtemplate&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;nodeTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;oncommand&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;{{ onCommand }}&quot;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;nodeTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;#&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;onclick&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;return false;&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;select&quot;&amp;gt; &lt;/span&gt;{{ getSimpleName($dataItem.getName()) }} &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;attach&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;dataview&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;{{ getChildren($dataItem) }}&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;itemtemplate&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;nodeTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;oncommand&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;{{ onCommand }}&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;On the first UL, which is the outer DataView for the tree, you can see that we set the data property to Type.getRootNamespaces(), which returns the set of root namespaces currently defined.&lt;/p&gt; &lt;p&gt;We also set the template to point to the “nodeTemplate” element, which has to be outside the DataView itself when doing recursive templates. Note that the outer node of the template, the UL, won’t actually get rendered into the target ul (tree). It is only a container.&lt;/p&gt; &lt;p&gt;The command event of the DataView is hooked to the onCommand function, and we’ll get back to that when we couple the tree with the detail view.&lt;/p&gt; &lt;p&gt;In the template itself, you can see we have a link with the select command so that clicking it will trigger the nearest onCommand event up the DOM.&lt;/p&gt; &lt;p&gt;The text of that link is the results of a call to getSimpleName, which will extract the last part of the fully-qualified name of the namespace or class.&lt;/p&gt; &lt;p&gt;After that link, we find another DataView control. The data property of that control points to an array of namespaces and classes under the current object. But the nice part here is that the template property points to “nodeTemplate”, its own parent, enabling the recursive nature of the tree.&lt;/p&gt; &lt;p&gt;In other words, we’ve morphed a simple DataView control into a tree, with minimal effort and code.&lt;/p&gt; &lt;p&gt;There is just one thing missing to the tree, and that is the +/- buttons that will collapse and expand the tree nodes. This is actually very easy to set-up using CSS and some simple script. First, let’s collapse the tree by default. This is done by defining the style of the tree as follows in our stylesheet:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;.tree ul { padding: 0; display:none;
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This has the effect of collapsing all unordered list nodes under the tree.&lt;/p&gt; &lt;p&gt;The +/- button is created by adding the following to the template, right before the existing link:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;toggleButton&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;#&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;Type.isNamespace($dataItem)&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;onclick&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;return toggleVisibility(this);&quot;&amp;gt;&lt;/span&gt;+&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;The button is a simple link whose rendering is conditioned by whether the current data item is a namespace: only namespaces can be expanded, classes are leaf nodes.&lt;/p&gt; &lt;p&gt;The toggling function itself is fairly simple:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;toggleVisibility(element) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;childList = element.parentNode&lt;br /&gt; .getElementsByTagName(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;ul&quot;&lt;/span&gt;)[0], isClosed = element.innerHTML === &lt;span style=&quot;color:maroon;&quot;&gt;&quot;+&quot;&lt;/span&gt;; childList.style.display =&lt;br /&gt; isClosed ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;block&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;none&quot;&lt;/span&gt;; element.innerHTML = isClosed ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;-&quot; &lt;/span&gt;: &lt;span style=&quot;color:maroon;&quot;&gt;&quot;+&quot;&lt;/span&gt;; &lt;span style=&quot;color:blue;&quot;&gt;return false&lt;/span&gt;;
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This just toggles the display style of the first child UL between none and block, and the text of the link between + and –.&lt;/p&gt; &lt;p&gt;So there it is, we have built a simple tree by simply making use of the recursive capabilities of DataView and some very simple script.&lt;/p&gt; &lt;p&gt;Before we look at the details view, let’s look at the code that gets called when the user selects a node in the tree:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;onCommand(sender, args) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;dataItem = sender.findContext(&lt;br /&gt; args.get_commandSource()).dataItem; $find(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;details&quot;&lt;/span&gt;).set_data(dataItem);
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;That code gets a reference to the data item for the selected node from the template context that we can get from the sender of the event (the inner DataView that contains the selected node) using the command source as provided by the event arguments (that source is the element that triggered the command). We can then set the data of the details DataView to that data item, which will trigger that view to re-render.&lt;/p&gt; &lt;p&gt;Now let’s build the details view. The details view will display the child namespaces and classes if a namespace is selected in the tree, and the properties, events and methods (instance and static) in the case of a class.&lt;/p&gt; &lt;p&gt;For each case, we’ll use a different template: “namespaceTemplate” for namespaces, and “classTemplate” for classes,&amp;#160; but we’ll do so from the same DataView. This dynamic template switching is done by handling the onItemRendering event of the DataView:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;onDetailsRendering(sender, args) { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;dataItem = args.get_dataItem(); args.set_itemTemplate(Type.isNamespace(dataItem) ? &lt;span style=&quot;color:maroon;&quot;&gt;&quot;namespaceTemplate&quot;&lt;/span&gt; : &lt;span style=&quot;color:maroon;&quot;&gt;&quot;classTemplate&quot;&lt;/span&gt;);
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This code gets the data item from the event arguments and sets the itemTemplate property depending on its type.&lt;/p&gt; &lt;p&gt;Each of these two templates will have to display the contents of the selected object. But, and that will be the tricky part, we want all those to be neatly grouped into separated lists.&lt;/p&gt; &lt;p&gt;One way to do that would be to have one DataView per list but where would the fun be in that? Here, we are going to enumerate only once through the data items to display and dispatch them dynamically to this or that placeholder depending on their nature.&lt;/p&gt; &lt;p&gt;Once more, the key to doing that will be handling the onItemRendering event:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;function &lt;/span&gt;onNamespaceChildRendering(sender, args) { &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(Type.isClass(args.get_dataItem())) { args.set_itemPlaceholder(&lt;span style=&quot;color:maroon;&quot;&gt;&quot;classPlaceHolder&quot;&lt;/span&gt;); }
}&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;This code is simply changing the rendering place holder for the curent item from the default (the DataView’s element) to “classPlaceHolder” if the current data item is a class (instead of a namespace). The template itself looks like this:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;namespaceTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;{{ $dataItem.getName() }}&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;column&quot;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;Namespaces:&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;namespacePlaceHolder&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;attach&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;dataview&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;{{ getChildren($dataItem) }}&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;itemtemplate&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;namespaceChildTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;dataview&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;onitemrendering&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;br /&gt; &quot;{{ onNamespaceChildRendering }}&quot;&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;column&quot;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;Classes:&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;classPlaceHolder&quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;namespaceChildTemplate&quot; &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&quot;sys-template&quot;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;{{ $dataItem.getName() }}&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:maroon;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;As you can see, there really is only one DataView in there, and thanks to the code above, it can dispatch its rendering to different places if necessary. The template for the items of that DataView happens to be the same in all cases (namespaceChildTemplate) but it could be easily different, as it was for the parent details view.&lt;/p&gt; &lt;p&gt;The template for displaying classes is essentially the same thing, but with four placeholders instead of two.&lt;/p&gt; &lt;p&gt;So here’s what it looks like in the end:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/ClassBrowser_5CC62533.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;&quot; title=&quot;Class Browser&quot; border=&quot;0&quot; alt=&quot;Class Browser&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/ClassBrowser_thumb_70730EC7.png&quot; width=&quot;504&quot; height=&quot;172&quot;/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt; of this post are that it’s now super-easy to render hierarchical data structures with DataView, and that you can do some interesting grouping of data on the fly by handling the item rendering event.&lt;/p&gt; &lt;p&gt;You can play with the class browser live here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://boudin.vndv.com/AjaxPreview5Tree/default.htm&quot;&gt;http://boudin.vndv.com/AjaxPreview5Tree/default.htm&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And you can download the code here: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/AjaxPreview5Tree.zip&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/bleroy/Samples/AjaxPreview5Tree.zip&quot;&gt;http://weblogs.asp.net/blogs/bleroy/Samples/AjaxPreview5Tree.zip&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Microsoft Ajax 4.0 Preview 5: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32770&quot;&gt;http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32770&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Jim and Dave’s posts on Preview 5: &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/jimwang/archive/2009/09/11/asp-net-ajax-preview-5-and-updatepanel.aspx&quot;&gt;http://weblogs.asp.net/jimwang/archive/2009/09/11/asp-net-ajax-preview-5-and-updatepanel.aspx&lt;/a&gt; &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/infinitiesloop/archive/2009/09/10/microsoft-ajax-4-preview-5-the-dataview-control.aspx&quot;&gt;http://weblogs.asp.net/infinitiesloop/archive/2009/09/10/microsoft-ajax-4-preview-5-the-dataview-control.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7204694&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/O2HpZ_XRaMs&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7204694</guid>
         <pubDate>Mon, 14 Sep 2009 00:29:37 -0700</pubDate>
      </item>
      <item>
         <title>Dialogs and ViewModel - Using Tasks as a Pattern()</title>
         <link>http://www.nikhilk.net/ViewModel-Dialogs-Task-Pattern.aspx</link>
         <description>http://www.nikhilk.net/ViewModel-Dialogs-Task-Pattern.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;a rel=&quot;nofollow&quot;&gt;ViewModel/MVVM pattern&lt;/a&gt; continues to gain popularity, with a blog post showing up every so often, and with tweets and retweets popping up even more often :-). At the same time, there are some interesting topics beyond the core pattern that continue to fuel experimentation. A big one amongst those is how should applications use dialogs when using the view model pattern.&lt;/p&gt;
&lt;p&gt;The crux of the problem is the desire to keep the view model independent of UI concerns, and ensure it can be tested in a standalone manner, but that often comes to odds when you want the view model to launch a dialog, and/or do some work after the dialog is closed.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; style=&quot;float:right;margin-left:10px;margin-bottom:10px;padding:3px;border:solid 1px silver;text-decoration:none;&quot;&gt;&lt;img alt=&quot;TaskList App&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;The most recent version of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://projects.nikhilk.net/SilverlightFX&quot;&gt;Silverlight.FX&lt;/a&gt; (v3.2) that I published earlier this week, addresses this scenario using a Task pattern. This blog post discusses that pattern, and opens it up for your thoughts.&lt;/p&gt;
&lt;p&gt;The screenshot on the right represents my updated TaskList sample application (&lt;a rel=&quot;nofollow&quot;&gt;Click to run&lt;/a&gt; and create a task item, and double click on it to launch an edit dialog). All of the sample code is available along with Silverlight.FX for running on your end, and using the same pattern in your own applications of course.&lt;/p&gt;
&lt;p&gt;Silverlight.FX provides a concrete notion of a view model representing a task with commit and cancel semantics in the form of a TaskViewModel base class. This serves as the base class for view models associated with dialogs. The view model associated with the main/parent window creates and initializes an instance of a TaskViewModel-derived class to represent the task as hand (when the view decides it needs to launch the dialog). The TaskViewModel raises completion notifications that can be used to do additional work in the parent view model. The main/parent window then creates a Form and assigns the resulting TaskViewModel as Form's view model, and finally shows the dialog. The user interacts with the dialog. The Form implements OK and Cancel commands that the OK/Cancel buttons invoke, and these commands are wired up to call into the TaskViewModel to commit it or cancel it.&lt;/p&gt;
&lt;p&gt;I'll use some actual sample code to hopefully make this more concrete.&lt;/p&gt;
&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/ViewModel-Dialogs-Task-Pattern.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=243</guid>
         <pubDate>Fri, 11 Sep 2009 09:37:28 -0700</pubDate>
         <category>Silverlight</category>
      </item>
      <item>
         <title>Guidelines for add-on developers(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/09/09/guidelines-for-add-on-developers.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/09/09/guidelines-for-add-on-developers.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It’s well understood that the typical computer users today spend much of their time in their web browser, making it the most important software on their computer.&amp;nbsp; Users expect their browsers to be easy to use, fast, stable and secure.&lt;/p&gt;
&lt;p&gt;Over the past few months, users have downloaded thousands of great browser add-ons from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ieaddons.com/&quot;&gt;www.ieaddons.com&lt;/a&gt; and other web sites.&amp;nbsp; Users want to use browser add-ons to enhance their browsing experience, not hinder it or make it more confusing.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;We have published &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://go.microsoft.com/fwlink/?LinkId=159651&quot;&gt;a full list of guidelines&lt;/a&gt; to help add-on developers create quality add-ons.&amp;nbsp; We created these guidelines to respond to demand from the developer community and to help share the thinking of the IE team, gathered from years of providing support to users and developers.&amp;nbsp;&amp;nbsp; We strongly recommend that developers follow these guidelines when developing add-ons for IE users.&amp;nbsp; We occasionally come across add-ons that violate these guidelines so egregiously that we treat them as malware; on the other hand, we frequently see really helpful and creative add-ons that put the “user in control” and enhance the browsing experience.&amp;nbsp; Here are the core aspects of our guidelines:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Do not limit the user’s ability to access Internet Explorer features &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Users require access to the entire set of Internet Explorer features, including but not limited to: the address bar, search box and new tab page to navigate and search the Internet easily and safely.&amp;nbsp; Users expect these features to be available to them at all times and our support data shows that users are confused and unhappy when these features are obscured or changed.&amp;nbsp; Please don’t write add-ons that hide, obscure or limit access to Internet Explorer features.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Do not limit the user’s ability to control Internet Explorer settings &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;It’s important that users be able to control their browsing experience.&amp;nbsp; We’ve provided many configuration options for IE users to help them set up their browser exactly how they want it and protect themselves from potentially harmful malware. (See previous my previous post on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2009/03/09/change-in-toolbar-management.aspx&quot;&gt;toolbars&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2009/03/02/why-am-i-seeing-this-dialog.aspx&quot;&gt;search defaults&lt;/a&gt;) &lt;/p&gt;
&lt;p&gt;To support this guideline, add-on software should not remove or limit the user’s ability to view and modify IE settings.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Only use supported APIs &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Add-ons should only use supported Internet Explorer and Windows application programming interfaces (APIs), detailed on MSDN. Using an unsupported method of extending Internet Explorer or relying on implementation details in a specific version of IE may cause browser stability problems when Internet Explorer is updated.&amp;nbsp; Also, when two add-ons try to use the same unsupported method of extending Internet Explorer they might crash the browser – our APIs are specifically designed to prevent this kind of problem.&lt;/p&gt;
&lt;p&gt;Microsoft is committed to working with all add-on software developers to ensure that our mutual customers – you, the user – have a great experience when using Internet Explorer with add-ons. If you are developing or maintaining an Internet Explorer add-on, please review our guidelines and ensure that your add-ons deliver a good long-term experience for users.&lt;/p&gt;
&lt;p&gt;Thank you, &lt;br&gt;Frank Olivier and Herman Ng &lt;br&gt;Internet Explorer Program Management&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9893226&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9893226</guid>
         <pubDate>Wed, 09 Sep 2009 14:34:00 -0700</pubDate>
      </item>
      <item>
         <title>ASP.NET, HTML, JavaScript Snippet Support (VS 2010 and .NET 4.0 Series)(ScottGu)</title>
         <link>http://weblogs.asp.net/scottgu/archive/2009/09/04/asp-net-html-javascript-snippet-support-vs-2010-and-net-4-0-series.aspx</link>
         <description>http://weblogs.asp.net/scottgu/archive/2009/09/04/asp-net-html-javascript-snippet-support-vs-2010-and-net-4-0-series.aspx&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot; face=&quot;arial&quot;&gt; &lt;p&gt;This is the sixth in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx&quot;&gt;a series of blog posts&lt;/a&gt; I’m doing on the upcoming VS 2010 and .NET 4 release.&lt;/p&gt; &lt;p&gt;Today’s post covers another useful improvement in VS 2010 – HTML/ASP.NET/JavaScript snippet support.&amp;#160; Snippets allow you to be more productive within source view by allowing you to create chunks of code and markup that you can quickly apply and use in your application with a minimum of character typing.&lt;/p&gt; &lt;p&gt;Visual Studio has supported the concept of “snippets” for VB and C# in previous releases – but not for HTML, ASP.NET markup and JavaScript.&amp;#160; With VS 2010 we now support snippets for these content types as well.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Using ASP.NET Snippets&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Let’s walkthrough how we can use snippets to quickly implement a common security scenario.&amp;#160; Specifically, we’ll implement the functionality necessary to display either a “[ Login ]” link or a “[ Welcome &lt;em&gt;UserName &lt;/em&gt;]” message at the the top right of a site depending on whether or not the user is logged in:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step1_1925DA4F.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step1&quot; border=&quot;0&quot; alt=&quot;step1&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step1_thumb_10C204F8.png&quot; width=&quot;683&quot; height=&quot;414&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;em&gt;The above functionality is automatically added for you when you create a project using the new &lt;/em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2009/08/26/starter-project-templates-vs-2010-and-net-4-0-series.aspx&quot;&gt;&lt;em&gt;ASP.NET Project Starter Template in VS 2010&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;#160; For the purpose of this walkthrough, though, we’ll assume we are starting with a blank master page and will build it entirely from scratch.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;We’ll start by adding a standard &amp;lt;div&amp;gt; element to a master page, and then position our cursor within it:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step2_41E13F98.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step2&quot; border=&quot;0&quot; alt=&quot;step2&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step2_thumb_0785C9B7.png&quot; width=&quot;718&quot; height=&quot;474&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We are going to use the built-in &amp;lt;asp:loginview&amp;gt; control to help implement our scenario.&amp;#160; The &amp;lt;asp:loginview&amp;gt; control is a templated control (first introduced with ASP.NET 2.0) that allows us to easily switch between “Anonymous” and “LoggedIn” templates that automatically display depending on whether the user is authenticated.&amp;#160; Rather than type the &amp;lt;asp:loginview&amp;gt; markup manually, we’ll instead use the new snippet support in VS 2010.&lt;/p&gt; &lt;p&gt;Typing in “&amp;lt;log” in the editor will bring up intellisense and display available elements, controls and code snippets that start with those characters.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step3_74649D0A.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step3&quot; border=&quot;0&quot; alt=&quot;step3&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step3_thumb_779684F2.png&quot; width=&quot;590&quot; height=&quot;354&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We’ll select the built-in “loginview” code snippet from the above list and hit the “tab” key to complete it:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step4_5298C479.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step4&quot; border=&quot;0&quot; alt=&quot;step4&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step4_thumb_5636DF56.png&quot; width=&quot;246&quot; height=&quot;121&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now that we’ve selected the snippet we want to use, we can hit the “tab” key again to execute the snippet – which will cause it to immediately replace the snippet name with the markup below.&amp;#160; Notice below the snippet added a new &amp;lt;asp:loginview&amp;gt; control for us and automatically defined the two most commonly used templates on it.&amp;#160; We were able to implement that all with just 6 keystrokes (4 keystrokes to type “&amp;lt;log”, and then 2 tab keystrokes).&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step5_2A86155A.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step5&quot; border=&quot;0&quot; alt=&quot;step5&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step5_thumb_69E3C8EA.png&quot; width=&quot;440&quot; height=&quot;205&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We’ll now implement the “AnonymousTemplate”. &lt;/p&gt; &lt;p&gt;Typing in “&amp;lt;a” in the editor will being up intellisense and display available elements and code-snippets we can use:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step6_144FFA08.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step6&quot; border=&quot;0&quot; alt=&quot;step6&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step6_thumb_0F6D464C.png&quot; width=&quot;573&quot; height=&quot;245&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We’ll select the built-in “a” code snippet from the above list and hit the “tab” key to complete it.&amp;#160; When we hit tab again it will execute the snippet – which will cause it to replace the snippet name with the markup below:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step7_19BE6AAC.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step7&quot; border=&quot;0&quot; alt=&quot;step7&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step7_thumb_46D3577A.png&quot; width=&quot;436&quot; height=&quot;239&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The “href” attribute attribute value and the inner content of the &amp;lt;a&amp;gt; element above are highlighted with a green background color.&amp;#160; This indicates that these values are replaceable parameters and that we can automatically tab between them when filling them out – avoiding the need to use the cursor keys or touch the mouse (making things much faster).&lt;/p&gt; &lt;p&gt;Without having to move our cursor or mouse, we can begin typing the login page URL we want to send users to if they are not authenticated on the site:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step8_7F11CE92.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step8&quot; border=&quot;0&quot; alt=&quot;step8&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step8_thumb_2BBA886C.png&quot; width=&quot;436&quot; height=&quot;242&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When done, we can hit the “tab” key and VS will automatically highlight the second content parameter in the editor for us (no manual cursor movement or mouse action required):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step9_11E6523D.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step9&quot; border=&quot;0&quot; alt=&quot;step9&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step9_thumb_6320999A.png&quot; width=&quot;420&quot; height=&quot;242&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We can then type the text we want displayed (again without having to move the mouse or touch a cursor key):&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step10_293156AE.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step10&quot; border=&quot;0&quot; alt=&quot;step10&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step10_thumb_616FCDC6.png&quot; width=&quot;453&quot; height=&quot;239&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Once done with the “&amp;lt;AnonymousTemplate&amp;gt;” we can move onto the &quot;&amp;lt;LoggedInTemplate&amp;gt;”.&amp;#160; We’ll type “&amp;lt;log” in the editor to bring up intellisense – and select the built-in “loginname” snippet:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step11_479B9797.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step11&quot; border=&quot;0&quot; alt=&quot;step11&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step11_thumb_3FA3F535.png&quot; width=&quot;464&quot; height=&quot;285&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When we hit tab it will execute the snippet – which will cause it to replace the snippet with the markup below:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step12_25CFBF06.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step12&quot; border=&quot;0&quot; alt=&quot;step12&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step12_thumb_64C13FA1.png&quot; width=&quot;679&quot; height=&quot;257&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The “FormatString” property value above was automatically populated for us with a default welcome text message.&amp;#160; The value is also automatically highlighted in case we want to change it (without having to move the mouse or cursor keys).&amp;#160; For this sample we’ll just keep the default text.&lt;/p&gt; &lt;p&gt;Our final markup then looks like below:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step13_4AED0972.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step13&quot; border=&quot;0&quot; alt=&quot;step13&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step13_thumb_6DCDCB22.png&quot; width=&quot;688&quot; height=&quot;285&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When we run our application the above markup will display a “[Login]” link when we aren’t authenticated:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step19_68EB1766.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step19&quot; border=&quot;0&quot; alt=&quot;step19&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step19_thumb_39B92BCF.png&quot; width=&quot;643&quot; height=&quot;340&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When we are logged in we’ll see a welcome string like below:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step15_31C1896D.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step15&quot; border=&quot;0&quot; alt=&quot;step15&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step15_thumb_5E6A4346.png&quot; width=&quot;645&quot; height=&quot;340&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The total number of key strokes to implement this entire scenario is less than 15% of what we would previously have had to type.&amp;#160; Typing fast, I found I could implement the entire scenario in less than 15 seconds :-)&lt;/p&gt; &lt;h3&gt;&lt;u&gt;ASP.NET MVC Snippets&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Built-in snippets are available for all ASP.NET controls and HTML markup elements.&amp;#160; &lt;/p&gt; &lt;p&gt;Built-in snippets are also available for common ASP.NET MVC view scenarios, and for the built-in ASP.NET MVC HTML helpers.&amp;#160; &lt;/p&gt; &lt;p&gt;For example, we can type “&amp;lt;act” within a ASP.NET MVC view and select the “actionlink” snippet:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step16_0F897DE7.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step16&quot; border=&quot;0&quot; alt=&quot;step16&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step16_thumb_4E7AFE82.png&quot; width=&quot;678&quot; height=&quot;339&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When we complete it and hit the “tab” key the snippet will execute – which will cause it to replace the snippet name with the markup below:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step17_42790E4E.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step17&quot; border=&quot;0&quot; alt=&quot;step17&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step17_thumb_6C790C76.png&quot; width=&quot;678&quot; height=&quot;197&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Notice that the “linktext” and “actionname” values are marked as snippet parameters – which means we can easily replace them without having to use the cursor keys or touch the mouse.&amp;#160; The first linktext parameter value is selected by default – which means we can just type to immediately replace the value, then hit tab to immediately select and replace the second actionname parameter:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/blogs/scottgu/step18_00922900.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;step18&quot; border=&quot;0&quot; alt=&quot;step18&quot; src=&quot;http://weblogs.asp.net/blogs/scottgu/step18_thumb_58EBACD5.png&quot; width=&quot;599&quot; height=&quot;112&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Custom Snippets&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Visual Studio 2010 will include more than 200 built-in snippets that you can immediately use when you install the product.&lt;/p&gt; &lt;p&gt;What is really nice is that you are not limited to only using the built-in snippets.&amp;#160; You can also easily create your own snippets (complete with replaceable parameters) and both import them into VS 2010, as well as easily share them with other developers.&amp;#160; This makes it easy for you to quickly automate your own common tasks.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.switchonthecode.com/tutorials/csharp-tutorial-visual-studio-code-snippets&quot;&gt;This article&lt;/a&gt; describes the snippet support that already exists in VS 2008, and provides a little more context on how to create and manage custom snippets. &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Snippets are a useful feature that enable you to reduce keystrokes within the editor, and allow you to complete scenarios and tasks much faster.&amp;#160; Having snippets now enabled in not just VB and C#, but also in HTML, ASP.NET and JavaScript files, makes this capability even more useful – and can make you even more productive.&lt;/p&gt; &lt;p&gt;Hope this helps,&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt; &lt;p&gt;P.S. In addition to blogging, I have been using Twitter more recently to-do quick posts and share links.&amp;#160; You can follow me on Twitter at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.twitter.com/scottgu&quot;&gt;http://www.twitter.com/scottgu&lt;/a&gt; (@scottgu is my twitter name)&lt;/p&gt; &lt;/font&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7191489&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7191489</guid>
         <pubDate>Fri, 04 Sep 2009 02:12:15 -0700</pubDate>
      </item>
      <item>
         <title>Preventing Operation Aborted Scenarios(ieblog)</title>
         <link>http://blogs.msdn.com/ie/archive/2009/09/03/preventing-operation-aborted-scenarios.aspx</link>
         <description>http://blogs.msdn.com/ie/archive/2009/09/03/preventing-operation-aborted-scenarios.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This post follows up on my original &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2008/04/23/what-happened-to-operation-aborted.aspx&quot;&gt;Operation Aborted post&lt;/a&gt; to provide some additional information and assistance for web site owners or 3&lt;sup&gt;rd&lt;/sup&gt; party script libraries.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;operation aborted dialog box&quot; alt=&quot;operation aborted dialog box&quot; src=&quot;http://ieblog.members.winisp.net/images/travis_operationaborted.png&quot;&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Recap&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Nearly a year-and-a-half ago, I blogged about an error that can occur on some websites that generate content via script. This content can cause Internet Explorer’s HTML parser to get into an unrecoverable state, which makes it doubly-hard to find and diagnose why this error is happening. When this state occurs, the HTML parser cannot continue, and simply throws up its hands and admits: “Operation aborted!”&lt;/p&gt;
&lt;p&gt;Early in IE8’s development, we put in a &lt;i&gt;mitigation&lt;/i&gt; that alleviated the worst side-effects of this problem. Rather than show a modal dialog &lt;i&gt;and then navigate away from the page&lt;/i&gt; after you press OK, instead we removed the dialog and transferred the error notification into the status bar (to the script error notification area). As a result, you are not interrupted by a dialog and you can continue to view the current web page. You may not have even noticed that this error occurred; yet the HTML parser does come to a grinding halt (for that tab only) and any additional content will never be processed.&lt;/p&gt;
&lt;p&gt;Not too long after IE8 was released, we began hearing reports of IE8 customers continuing to see the old operation aborted dialog! While we knew that we hadn’t fixed every possible scenario that could cause the dialog to appear (it’s triggered as a catch-all for many subsystems such as the navigation stack and networking), we believed that we had mitigated the worst-cases. With recent reports of users seeing the Operation Aborted dialog in IE8 we investigated further to find any additional scenarios that could be triggering the dialog to appear (rather than the script error mitigation).&lt;/p&gt;
&lt;p&gt;In the following two scenarios, the root cause of the Operation Aborted issue is the same (for details, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2008/04/23/what-happened-to-operation-aborted.aspx&quot;&gt;please read my previous post&lt;/a&gt;), but the way in which it happens in these scenarios causes IE to bypass the mitigation that we put in place for IE8.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Scenario 1: Nested Parsing after Operation Aborted&lt;/b&gt;&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;script&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;text/javascript&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; document.body.appendChild(document.createElement(&lt;span class=&quot;str&quot;&gt;'div'&lt;/span&gt;)); &lt;span style=&quot;BACKGROUND-COLOR:yellow;&quot;&gt;document.write&lt;/span&gt;(&lt;span class=&quot;str&quot;&gt;&quot;Testing&quot;&lt;/span&gt;); &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{font-size:small;color:black;font-family:consolas, &quot;Courier New&quot;, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt {background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}&lt;/style&gt; &lt;p&gt;In the HTML above, the effect of the first line of the script is to trigger the Operation Aborted problem. In IE8 this is mitigated as previously mentioned. However, if sometime later a &lt;b&gt;document.write&lt;/b&gt; API call is issued as shown in the second line of script, all versions of Internet Explorer, including 8, will present you with the old operation aborted dialog.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Scenario 2: Operation Aborted in error handlers&lt;/b&gt;&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;script&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;text/javascript&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; window.onerror = &lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt;() { &lt;span class=&quot;kwrd&quot;&gt;var&lt;/span&gt; el = document.getElementById(&lt;span class=&quot;str&quot;&gt;&quot;div2&quot;&lt;/span&gt;); el.appendChild(document.createElement(&lt;span class=&quot;str&quot;&gt;&quot;div&quot;&lt;/span&gt;)); } &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;div1&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;div2&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;onclick&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;&lt;span style=&quot;BACKGROUND-COLOR:yellow;&quot;&gt;alert('hi';&lt;/span&gt;&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In this HTML file, a script error (in the onclick event handler) has a run-time error, which causes the window object's onerror handler to be invoked. In this scenario, if Operation Aborted is triggered in the error handler, the dialog will also show in IE8.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Programmatically Detecting Operation Aborted&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;When this error dialog occurs, it is &lt;i&gt;very &lt;/i&gt;hard for web developers to find the problem and fix it. Often (and in most cases we’ve seen) the problem is introduced in third-party scripts that are referenced by the affected page. To help web developers quickly find and fix the problem, we’ve written a little script that should help.&lt;/p&gt;
&lt;p&gt;This script must be run as the first script in the page that is experiencing the Operation Aborted error. It overrides the usage of innerHTML and appendChild by first checking the parsing frontier before allowing the action. AppendChild is by far the most common DOM entry point that can trigger Operation Aborted, followed by innerHTML. The script may flag false positives, but we wanted to err on the side of being overly cautious.&lt;/p&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{font-size:small;color:black;font-family:consolas, &quot;Courier New&quot;, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt {background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}&lt;/style&gt; &lt;p&gt;This script relies on a feature enabled in IE8 standards mode only—&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/dd282900(VS.85).aspx&quot;&gt;Mutable DOM Prototypes&lt;/a&gt;. Thus, it will only work for pages that use IE's most standards-complia&lt;a rel=&quot;nofollow&quot; title=&quot;_GoBack&quot; name=&quot;_GoBack&quot;&gt;&lt;/a&gt;nt mode. See &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/ie/archive/2008/08/27/introducing-compatibility-view.aspx&quot;&gt;this post on compatibility view&lt;/a&gt; for more details on the mode that IE is interpreting your page in. However, the operation aborted problems that this script identifies (in IE8 standards mode) also apply to IE7 and IE6 thereby helping you diagnose and fix this issue in any version of IE.&lt;/p&gt;
&lt;p&gt;To use the following script follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add a script element to the head of the page in question. This script element should be before any other script element on the page. &lt;/li&gt;
&lt;li&gt;Place the following script text within that script element (or reference a file containing it from the src attribute) &lt;/li&gt;
&lt;li&gt;Set the &quot;f1&quot; and &quot;f2&quot; feature values &lt;ol style=&quot;LIST-STYLE-TYPE:lower-roman;&quot;&gt;
&lt;li&gt;Setting &quot;f1&quot; to true will skip DOM calls that could potentially cause the Operation Aborted error. However, this will also result in a change in program flow, and other script errors could result. &lt;/li&gt;
&lt;li&gt;Setting &quot;f2&quot; to true stops program flow at the point of a potential Operation Aborted error and breaks into the debugger (external or built-in JavaScript debugger). This is where you can analyze each occurrence to see what assumptions were being made and how the program flow can be altered to prevent the problem. &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;In IE, navigate to the page in question. &lt;/li&gt;
&lt;li&gt;Start the JavaScript debugger by pressing &quot;F12&quot; and then selecting the &quot;Script&quot; tab in the Developer Tools, and press the button &quot;Start Debugging&quot;. &lt;/li&gt;&lt;/ol&gt;&lt;pre class=&quot;csharpcode&quot;&gt;(&lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt;() { &lt;span class=&quot;rem&quot;&gt;// Feature switches&lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// WARNING: 'true' may cause alternate program flow.&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;var&lt;/span&gt; f1 = PREVENT_POTENTIAL_OCCURANCES = &lt;span class=&quot;kwrd&quot;&gt;false&lt;/span&gt;; &lt;span class=&quot;kwrd&quot;&gt;var&lt;/span&gt; f2 = BREAK_INTO_DEBUGGER_AT_POTENTIAL_OCCURANCES = &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;; &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (!window.console) { window.console = {}; window.console.warn = &lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt;() { }; } &lt;span class=&quot;kwrd&quot;&gt;var&lt;/span&gt; frontierCheck = &lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt;(host) { &lt;span class=&quot;rem&quot;&gt;// Is host on the frontier?&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;while&lt;/span&gt; (host &amp;amp;&amp;amp; (host != document.documentElement)) { &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (host.parentNode &amp;amp;&amp;amp; (host.parentNode.lastChild != host)) &lt;span class=&quot;rem&quot;&gt;// This is not on the frontier&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;; host = host.parentNode; } &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (!host || (host != document.documentElement)) &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;; &lt;span class=&quot;rem&quot;&gt;// This node is not on the primary tree&lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// This check is overly cautious, as appends to &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// the parent of the running script element are &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// OK, but the asynchronous case means that the &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// append could be happening anywhere and intrinsice&lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// knowledge of the hosting application is required&lt;/span&gt; console.warn(&lt;span class=&quot;str&quot;&gt;&quot;Potential case of operation aborted&quot;&lt;/span&gt;); &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (f2) debugger; &lt;span class=&quot;rem&quot;&gt;// Step up two levels in the call stack &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// to see the problem source!!&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (f1) &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;false&lt;/span&gt;; &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;; } &lt;span class=&quot;kwrd&quot;&gt;var&lt;/span&gt; nativeAC = Element.prototype.appendChild; Element.prototype.appendChild = &lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt;() { &lt;span class=&quot;rem&quot;&gt;// call looks like this:&lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// object.appendChild(object)&lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;// Go back one more level in the call stack!!&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (frontierCheck(&lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;)) &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; nativeAC.apply(&lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;, arguments); } &lt;span class=&quot;kwrd&quot;&gt;var&lt;/span&gt; nativeIH = Object.getOwnPropertyDescriptor(Element.prototype, &lt;span class=&quot;str&quot;&gt;&quot;innerHTML&quot;&lt;/span&gt;).set; Object.defineProperty(Element.prototype, &lt;span class=&quot;str&quot;&gt;&quot;innerHTML&quot;&lt;/span&gt;, { set: &lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt;() { &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (frontierCheck(&lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;)) nativeIH.apply(&lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;, arguments); } });
})();&lt;/pre&gt;
&lt;p&gt;We recognize that the operation aborted dialog and its mitigated cousin in IE8 are still the source of significant web developer pain. We hope this information and prevention script help you to diagnose and fix issues related to Operation Aborted in IE8 (and older versions of IE).&lt;/p&gt;
&lt;p&gt;-Travis Leithead &lt;br&gt;Program Manager&lt;/p&gt;&lt;img src=&quot;http://blogs.msdn.com/aggbug.aspx?PostID=9891056&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9891056</guid>
         <pubDate>Fri, 04 Sep 2009 01:48:00 -0700</pubDate>
      </item>
      <item>
         <title>querySelectorAll on old IE versions: something that doesn’t work(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 0px 10px 10px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) Bertrand Le Roy 2005&quot; border=&quot;0&quot; alt=&quot;(c) Bertrand Le Roy 2005&quot; align=&quot;right&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/WallDoor_7CF5A223.jpg&quot; width=&quot;224&quot; height=&quot;244&quot;/&gt; In today’s post, I’m going to show an interesting technique to solve a problem and then I will tear it to pieces and explain why it is actually useless. I believe that negative results should also be published so that we can save other people from wasting time trying the same thing. So here goes…&lt;/p&gt; &lt;p&gt;A few days ago, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ajaxian.com/archives/creating-a-queryselector-for-ie-that-runs-at-native-speed&quot;&gt;a post on Ajaxian&lt;/a&gt; proposed a new version of a somewhat old technique to implement &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3.org/TR/2007/WD-selectors-api-20071221/&quot;&gt;querySelectorAll&lt;/a&gt; on old versions of IE, using the browser’s native CSS engine. That sounds like a great idea at first, and the hack is quite clever. The idea is to dynamically add a CSS rule to the document that has the selector that you want to evaluate, and an expression that adds the matched elements to a global array.&lt;/p&gt; &lt;p&gt;When I read this, it reminded me of a similar approach that I had tried a few years ago. At the time, we were considering implementing our own selector engine (we had not yet decided to integrate jQuery to our Ajax offerings, which in the end made the whole effort moot) so we explored a number of approaches.&lt;/p&gt; &lt;p&gt;My idea was different in that it doesn’t use expressions at all. It does dynamically create a style rule, but instead of an expression, it just sets a non-existing “foo” style property to the equally arbitrary value of “bar”. It then scans the whole document (using the much decried and IE-specific but very fast document.all) and gets the computed style for each of the elements. We then look for the foo property on the resulting object and check whether it evaluates as “bar”. For each element that matches, we add to an array.&lt;/p&gt; &lt;p&gt;Here’s the code:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;(&lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;() { &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;style = document.styleSheets[0] ||&lt;br /&gt; document.createStyleSheet(); window.select = &lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(selector) { style.addRule(selector, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;foo:bar&quot;&lt;/span&gt;); &lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;all = document.all, resultSet = []; &lt;span style=&quot;color:blue;&quot;&gt;for &lt;/span&gt;(&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;i = 0, l = all.length; i &amp;lt; l; i++) { &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(all[i].currentStyle.foo === &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;bar&quot;&lt;/span&gt;) { resultSet[resultSet.length] = all[i]; } } style.removeRule(0); &lt;span style=&quot;color:blue;&quot;&gt;return &lt;/span&gt;resultSet; }
})();&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;or, in minimized form:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;(&lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(){&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;d=document;&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;a=d.styleSheets[0]||&lt;br /&gt;d.createStyleSheet();window.select=&lt;span style=&quot;color:blue;&quot;&gt;function&lt;/span&gt;(e){&lt;br /&gt;a.addRule(e,&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;f:b&quot;&lt;/span&gt;);&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;l=d.all,c=[];&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;for&lt;/span&gt;(&lt;span style=&quot;color:blue;&quot;&gt;var &lt;/span&gt;b=0,f=l.length;b&amp;lt;f;b++)&lt;span style=&quot;color:blue;&quot;&gt;if&lt;/span&gt;(l[b].currentStyle.f)&lt;br /&gt;c[c.length]=l[b];a.removeRule(0);&lt;span style=&quot;color:blue;&quot;&gt;return &lt;/span&gt;c}})()&lt;/pre&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt; &lt;p&gt;That’s 235 characters, which is not too bad (although not quite #twitcode small).&lt;/p&gt; &lt;p&gt;The first problem with that approach though is that because it’s using the native CSS selection engine in IE, it has the same limitations and quirks. That means no fancy CSS 3 (or even 2) selectors. It also means any IE bug will surface into the result set.&lt;/p&gt; &lt;p&gt;In other words, if you want more selectors than that, you will need to parse the selector string and branch off the code to another, more complete engine whenever something not supported is used. It also means that you need to know what is supported and what isn’t. That could be done through some dynamic discovery but doing so, we are getting into much complexity.&lt;/p&gt; &lt;p&gt;So limited as it is, how does it perform?&lt;/p&gt; &lt;p&gt;I ran the code in a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/p/slickspeed/&quot;&gt;SlickSpeed&lt;/a&gt; test (where I removed the selectors that it couldn’t handle) on IE6 and the good news is that despite the document.all scan and the current style computation, it’s more than three times faster than &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ajaxian.com/archives/creating-a-queryselector-for-ie-that-runs-at-native-speed&quot;&gt;Paul Young’s implementation that got featured on Ajaxian&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;But the bad news is that it’s also &lt;strong&gt;six times slower than jQuery:&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:5px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;SlickSpeedResults&quot; border=&quot;0&quot; alt=&quot;SlickSpeedResults&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/SlickSpeedResults_62B538FF.png&quot; width=&quot;540&quot; height=&quot;484&quot;/&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I’m afraid a hack to use the native CSS selection engine of the browser is always going to be slower than an optimized pure JavaScript implementation (to be clear, I’m not talking about native implementations of querySelectorAll, but about hacks such as this which try to surface the feature on older IE versions that don’t have querySelectorAll). Somewhat counter-intuitive, but true.&lt;/p&gt; &lt;p&gt;End of story. Just use jQuery. :)&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7187174&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/FWbHNJBjRPw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7187174</guid>
         <pubDate>Mon, 31 Aug 2009 18:03:13 -0700</pubDate>
      </item>
      <item>
         <title>Photos from Death Valley()</title>
         <link>http://www.nikhilk.net/Death-Valley.aspx</link>
         <description>http://www.nikhilk.net/Death-Valley.aspx&lt;br /&gt;&lt;br /&gt;A small set of photos from a trip to Death Valley National Park ... drove up there right after MIX '09 in Las Vegas.&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/Death-Valley.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=242</guid>
         <pubDate>Sat, 29 Aug 2009 07:57:02 -0700</pubDate>
         <category>Photography</category>
      </item>
      <item>
         <title>How to install and configure Visual Studio Team Explorer(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/08/28/how-to-install-and-configure-visual-studio-team-explorer.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/08/28/how-to-install-and-configure-visual-studio-team-explorer.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;One of the challenging aspects of working with TFS as your source control system is very unfortunately the installation of the client software.&lt;/p&gt; &lt;p&gt;Over the past few years, I’ve been managing a number of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://photohandler.codeplex.com/&quot;&gt;small&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ajaxcontroltoolkit.codeplex.com/&quot;&gt;large&lt;/a&gt; projects on CodePlex, and while the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://codeplex.codeplex.com/Wiki/View.aspx?title=Using%20TortoiseSVN%20with%20CodePlex&amp;amp;referringTitle=Source%20control%20clients&quot;&gt;Subversion bridge&lt;/a&gt; has provided a much needed simple choice of client software, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://codeplex.codeplex.com/Wiki/View.aspx?title=Obtaining%20the%20Team%20Explorer%20Client&amp;amp;referringTitle=CodePlex%20FAQ&quot;&gt;TFS remains its native protocol&lt;/a&gt;, which makes it still very much relevant to people who do a lot of work there.&lt;/p&gt; &lt;p&gt;But as I said, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://codeplex.codeplex.com/Wiki/View.aspx?title=Installing%20Team%20Explorer&amp;amp;referringTitle=Source%20control%20clients&quot;&gt;installing the client software may be challenging&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The first and main problem here is that Team Explorer, while free, comes in a very unfriendly format: an ISO image of the DVD. I asked the team why they made that weird and less than optimal choice, and apparently there are some technical reasons why a simple msi wouldn’t work. I wasn’t completely satisfied with the explanation (it’s still a bad customer experience) but at least there is hope as the plan is to make it a lot smoother with Visual Studio 2010.&lt;/p&gt; &lt;p&gt;So let’s download that thing. It can be found here:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/downloads/details.aspx?familyid=0ed12659-3d41-4420-bbb0-a46e51bfca86&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?familyid=0ed12659-3d41-4420-bbb0-a46e51bfca86&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Just click on the “Download” button and store the file in a local temporary folder. At 387.4 MB it’s a pretty big download (especially when compared with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://tortoisesvn.net/downloads&quot;&gt;this&lt;/a&gt;) but it does contain the Visual Studio shell, which explains it, kind of. So you probably have time for a cup of coffee or two, trip to Seattle’s Best included.&lt;/p&gt; &lt;p&gt;Oh, by the way, to be clear, you do &lt;strong&gt;*not*&lt;/strong&gt; need a version of Visual Studio on the box to install Team Explorer, it is a standalone application, but if you do have one, it will integrate with it.&lt;/p&gt; &lt;p&gt;Now that you have the IMG file, we can extract it. There are several options to extract or burn an ISO, but I’ll use a free one here. We won’t burn the image to a DVD (the only reason I could see why you’d want to do that is if you want to make multiple installs, but you might as well extract the ISO to a network share).&lt;/p&gt; &lt;p&gt;The free option I’ve selected is ExtractNow, which you can download from here:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.extractnow.com/&quot;&gt;http://www.extractnow.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Click on the “Download ExtractNow!” link on the bottom of the page and run the installer. When it asks you if you want to run it, say yes. The UI is a little weird: what you need to do now is right click on the white surface on the ExtractNow window and select “Add archive”:&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;ExtractNow Add Archive&quot; border=&quot;0&quot; alt=&quot;ExtractNow Add Archive&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/ExtractNowAddArchive_27011293.png&quot; width=&quot;423&quot; height=&quot;381&quot;/&gt;Then, navigate to wherever you downloaded the VS2008TeamExplorer.iso file, select it and click the “Open” button. Now click the “Extract” button and wait for the extraction to complete. You should now have a VS2008TeamExplorer folder next to the iso file. You can close ExtractNow and maybe even uninstall it until the next time you need it…&lt;/p&gt; &lt;p&gt;Open that folder and double-click “Setup”. Follow the instructions (the default settings should be fine) and wait for the install to complete. Fortunately, it doesn’t take nearly as long as installing the full VS.&lt;/p&gt; &lt;p&gt;Once this is done, you should be up and running. Let’s launch the shell and connect to a CodePlex project. From the Team Explorer window, click the “Add existing team project button:&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;Team Explorer Add Existing Project&quot; border=&quot;0&quot; alt=&quot;Team Explorer Add Existing Project&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/TeamExplorerAdd_51F90098.png&quot; width=&quot;139&quot; height=&quot;114&quot;/&gt; &lt;/p&gt; &lt;p&gt;Click on the “Servers” button and then on the “Add” button to add the relevant CodePlex server. The data that you need to enter there can be found on the “Source Code” tab of your project’s site on CodePlex by clicking on Source Control Setup / Visual Studio Team Explorer (right side of the page).&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;CodePlex Project Setup&quot; border=&quot;0&quot; alt=&quot;CodePlex Project Setup&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/CodePlexProjectSetup_51209AAE.png&quot; width=&quot;481&quot; height=&quot;149&quot;/&gt; &lt;/p&gt; &lt;p&gt;You can copy the server, port and protocol information into the Team Explorer add server window:&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;Team Explorer Add Server&quot; border=&quot;0&quot; alt=&quot;Team Explorer Add Server&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/TFSProjectSetup_54528296.png&quot; width=&quot;509&quot; height=&quot;312&quot;/&gt; &lt;/p&gt; &lt;p&gt;You can now close that window by clicking OK. You will then get prompted for your username and password. CodePlex also gave you that (notice the “snd&amp;#92;” domain prefix and “_cp” postfix) but let’s make sure that we only have to do this once. To that effect, let’s cancel and go to the Windows user account control panel and click on “Manage your credentials”:&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:5px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;User Account Control Panel&quot; border=&quot;0&quot; alt=&quot;User Account Control Panel&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/ManageYourCredentials_4F039BE5.png&quot; width=&quot;509&quot; height=&quot;198&quot;/&gt; &lt;/p&gt; &lt;p&gt;Then click on “Add a Windows Credential”. Copy there the server name, your username and your password:&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:5px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;Windows New Credentials&quot; border=&quot;0&quot; alt=&quot;Windows New Credentials&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/WindowsNewCredentials_1193375E.png&quot; width=&quot;509&quot; height=&quot;269&quot;/&gt; &lt;/p&gt; &lt;p&gt;Click OK, then switch back to Visual Studio and click OK again. This time, you shouldn’t be prompted for credentials unless you made a typo in the above dialog. You may now click close and then select any number of projects you want to work with:&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:5px auto;display:block;float:none;border-top:0px;border-right:0px;&quot; title=&quot;TFS Select Projects&quot; border=&quot;0&quot; alt=&quot;TFS Select Projects&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/TfsSelectProjects_6BBD10FA.png&quot; width=&quot;509&quot; height=&quot;480&quot;/&gt; &lt;/p&gt; &lt;p&gt;The team explorer window now shows the available projects:&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;Team Explorer Window&quot; border=&quot;0&quot; alt=&quot;Team Explorer Window&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/TeamExplorerWindow_0DC56CC1.png&quot; width=&quot;206&quot; height=&quot;324&quot;/&gt; &lt;/p&gt; &lt;p&gt;If you then double-click “Source Control” under any of the projects, you can explore the contents of the project and map them to a local folder. To do that, first create the target directory from Windows Explorer, then right click a project in the Visual Studio Source Control Explorer and select “Get Latest Version”:&lt;img style=&quot;border-right-width:0px;margin:5px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;Getting Latest Version&quot; border=&quot;0&quot; alt=&quot;Getting Latest Version&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/GettingLatestVersion_4CB6ED5C.png&quot; width=&quot;484&quot; height=&quot;321&quot;/&gt; &lt;/p&gt; &lt;p&gt;You will then be prompted for a local directory to which you want to map the source-controlled remote directory. Select the directory that you just created and click OK.&lt;/p&gt; &lt;p&gt;And… that’s it, you’re all set. You can now open any file or project from the locally mapped folder, check out code, modify it and then check it back in using the Pending Changes window.&lt;/p&gt; &lt;p&gt;I hope this helps.&lt;/p&gt;&lt;img src=&quot;http://weblogs.asp.net/aggbug.aspx?PostID=7184437&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TalesFromTheEvilEmpire/~4/BmdR1u7Ewpo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7184437</guid>
         <pubDate>Fri, 28 Aug 2009 14:24:04 -0700</pubDate>
      </item>
      <item>
         <title>BouncingPlane Behavior for Silverlight()</title>
         <link>http://www.nikhilk.net/BouncingPlane-Behavior.aspx</link>
         <description>http://www.nikhilk.net/BouncingPlane-Behavior.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Time for a brief but fun post... some time back Tim Heuer posted the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://timheuer.com/blog/archive/2009/07/21/mix-keynote-bouncing-plane-demo-updated-for-silverlight-3.aspx&quot;&gt;Silverlight 3 bouncing plane gratuitous demo&lt;/a&gt;. Click an element, and the nearest corner would bounce backwards and forwards as it comes back to rest.&lt;/p&gt;
&lt;p&gt;Tim had the code to setup the storyboards, and handle the mouse interaction in code-behind. I look at it, and immediately see a reusable component (even if it is a gratuitous one), or more specifically a behavior, that encapsulates all the logic, and can be attached declaratively in XAML to one or more elements simply without needing any code-behind logic. So I created one such behavior. I used this behavior in my &lt;a rel=&quot;nofollow&quot;&gt;TwitterBug sample at TechEd&lt;/a&gt; recently, and thought it could use a dedicated blog post. :-)&lt;/p&gt;
&lt;p&gt;Here is a screenshot, which really doesn’t do much justice to something interactive. So go ahead, and click it to &lt;a rel=&quot;nofollow&quot;&gt;run the sample live&lt;/a&gt;. Click around on the images. And if you’re wondering how its done, go ahead and download the code. You’ll see a BouncingPlane class that derives from Behavior.&lt;/p&gt;
&lt;p style=&quot;text-align:center;&quot;&gt;&lt;a rel=&quot;nofollow&quot; style=&quot;text-decoration:none;border:none;&quot;&gt;&lt;img alt=&quot;Bouncing Images&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;[&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nikhilk.net/BouncingPlane-Behavior.aspx&quot;&gt;Full post continued here...&lt;/a&gt;]</description>
         <guid isPermaLink="false">http://www.nikhilk.net/Entry.aspx?id=241</guid>
         <pubDate>Thu, 27 Aug 2009 16:15:22 -0700</pubDate>
         <category>Silverlight</category>
      </item>
      <item>
         <title>Walking the tight rope(Bertrand Le Roy)</title>
         <link>http://weblogs.asp.net/bleroy/archive/2009/08/27/walking-the-tight-rope.aspx</link>
         <description>http://weblogs.asp.net/bleroy/archive/2009/08/27/walking-the-tight-rope.aspx&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;(c) Bertrand Le Roy 2004&quot; border=&quot;0&quot; alt=&quot;(c) Bertrand Le Roy 2004&quot; align=&quot;left&quot; src=&quot;http://weblogs.asp.net/blogs/bleroy/MaxetGogo010_15869DD0.jpg&quot; width=&quot;244&quot; height=&quot;184&quot;/&gt; I think today is an appropriate time to write this post, as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.wekeroad.com/&quot;&gt;Rob Conery&lt;/a&gt; is &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.wekeroad.com/blog/temet-nosce/&quot;&gt;leaving Microsoft tomorrow&lt;/a&gt;. “Who?”, you might ask. Rob is the author of the excellent &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.wekeroad.com/category/mvc-storefront/&quot;&gt;MVC Storefront&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.wekeroad.com/category/kona/&quot;&gt;Kona&lt;/a&gt; series where he explored the challenges in building an MVC-