<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Craig Shoemaker</title><link>http://weblogs.asp.net/craigshoemaker/default.aspx</link><description>&lt;a href="http://polymorphicpodcast.com/"&gt;Host of the Polymorphic Podcast&lt;/a&gt; and &lt;a href="http://infragistics.com/"&gt;New Media Evangelist for Infragistics&lt;/a&gt;</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PolymorphicPodcastBlog" /><feedburner:info uri="polymorphicpodcastblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>Presentation: ASP.NET AJAX 4 at the Orange Country .NET User Group</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/RpVguJmmFe4/presentation-asp-net-ajax-4-at-the-orange-country-net-user-group.aspx</link><pubDate>Wed, 13 Jan 2010 03:00:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7308291</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7308291</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2010/01/12/presentation-asp-net-ajax-4-at-the-orange-country-net-user-group.aspx#comments</comments><description>
&lt;p&gt;Thanks to everyone who came to my ASP.NET AJAX 4 talk at the &lt;a href="http://www.ocdotnet.org" mce_href="http://www.ocdotnet.org"&gt;Orange Country .NET User Group&lt;/a&gt;. Special thanks to &lt;a href="http://www.harborobjects.com/RezaMadani/"&gt;Reza Madani&lt;/a&gt; for organizing the talk and running such a great group! &lt;/p&gt;
Here is the code download for the talk:&amp;nbsp; &lt;a href="http://polymorphicpodcast.com/code/2010-01-12/ASPNETClientTemplates.zip" mce_href="http://polymorphicpodcast.com/code/2010-01-12/ASPNETClientTemplates.zip"&gt;ASPNETClientTemplates.zip&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7308291" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Presentation/default.aspx">Presentation</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2010/01/12/presentation-asp-net-ajax-4-at-the-orange-country-net-user-group.aspx</feedburner:origLink></item><item><title>Podcast: Portable Areas with Jeffrey Palermo and Eric Hexter</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/c_L7NQ5_kB8/podcast-portable-areas-with-jeffrey-palermo-and-eric-hexter.aspx</link><pubDate>Thu, 07 Jan 2010 21:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7303672</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7303672</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2010/01/07/podcast-portable-areas-with-jeffrey-palermo-and-eric-hexter.aspx#comments</comments><description>
&lt;p&gt;In this episode of the Polymorphic Podcast &lt;a href="http://geekswithblogs.net/hex/" mce_href="http://geekswithblogs.net/hex/" target="_blank"&gt;Eric Hexter&lt;/a&gt; (&lt;a href="http://twitter.com/ehexter" mce_href="http://twitter.com/ehexter" target="_blank"&gt;@ehexter&lt;/a&gt;) and &lt;a href="http://jeffreypalermo.com/" mce_href="http://jeffreypalermo.com/" target="_blank"&gt;Jeffrey Palermo&lt;/a&gt; (&lt;a href="http://twitter.com/jeffreypalermo" mce_href="http://twitter.com/jeffreypalermo" target="_blank"&gt;@jeffreypalermo&lt;/a&gt;) join &lt;a href="http://weblogs.asp.net/craigshoemaker/" mce_href="http://weblogs.asp.net/craigshoemaker/" target="_blank"&gt;Craig Shoemaker&lt;/a&gt; (&lt;a href="http://twitter.com/craigshoemaker" mce_href="http://twitter.com/craigshoemaker" target="_blank"&gt;@craigshoemaker&lt;/a&gt;) to discuss &lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx" mce_href="http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx" target="_blank"&gt;Portable Areas&lt;/a&gt;. The Portable Areas contribution to &lt;a href="http://www.codeplex.com/MVCContrib" mce_href="http://www.codeplex.com/MVCContrib" target="_blank"&gt;MVC Contrib&lt;/a&gt; are an option for building single component or multi-page components for ASP.NET websites.&lt;/p&gt;

&lt;a href="http://polymorphicpodcast.com/shows/portableareas/"&gt;&lt;img src="http://polymorphicpodcast.com/images/ListenBanner.png" title="Listen to the Show" alt="Listen to the Show" mce_src="http://polymorphicpodcast.com/images/ListenBanner.png" border="0" height="58" width="378"&gt;&lt;/a&gt;&lt;table border="0" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;
    
&lt;tr&gt;
      &lt;th align="left"&gt;Full Speed:&lt;/th&gt;
      
&lt;td&gt;&lt;a href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas.mp3" mce_href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas.mp3"&gt;download&lt;/a&gt;&lt;/td&gt;

      
&lt;td&gt;
&lt;object type="application/x-shockwave-flash" data="http://polymorphicpodcast.com/plugins/audio-player/player.swf" id="audioplayer1" height="24" width="290"&gt;     
&lt;param name="movie" value="http://polymorphicpodcast.com/plugins/audio-player/player.swf"&gt;     
&lt;param name="FlashVars" value="playerID=1&amp;amp;bg=0xE9E6DF&amp;amp;leftbg=0xEEEEEE&amp;amp;lefticon=0x666666&amp;amp;rightbg=0xCCCCCC&amp;amp;rightbghover=0x999999&amp;amp;righticon=0x666666&amp;amp;righticonhover=0xFFFFFF&amp;amp;text=0x666666&amp;amp;slider=0x666666&amp;amp;track=0xFFFFFF&amp;amp;border=0x666666&amp;amp;loader=0xCCCCCC&amp;amp;soundFile=http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas.mp3"&gt;     
&lt;param name="quality" value="high"&gt;     
&lt;param name="wmode" value="transparent"&gt;     &lt;/object&gt;
&lt;/td&gt;
    &lt;/tr&gt;

    
&lt;tr&gt;
      &lt;th align="left"&gt;Fast Version:&lt;/th&gt;
      
&lt;td&gt;&lt;a href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas_fast.mp3" mce_href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas_fast.mp3"&gt;download&lt;/a&gt;&lt;/td&gt;

      
&lt;td&gt;
&lt;object type="application/x-shockwave-flash" data="http://polymorphicpodcast.com/plugins/audio-player/player.swf" id="audioplayer1" height="24" width="290"&gt;     
&lt;param name="movie" value="http://polymorphicpodcast.com/plugins/audio-player/player.swf"&gt;     
&lt;param name="FlashVars" value="playerID=1&amp;amp;bg=0xE9E6DF&amp;amp;leftbg=0xEEEEEE&amp;amp;lefticon=0x666666&amp;amp;rightbg=0xCCCCCC&amp;amp;rightbghover=0x999999&amp;amp;righticon=0x666666&amp;amp;righticonhover=0xFFFFFF&amp;amp;text=0x666666&amp;amp;slider=0x666666&amp;amp;track=0xFFFFFF&amp;amp;border=0x666666&amp;amp;loader=0xCCCCCC&amp;amp;soundFile=http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas_fast.mp3"&gt;     
&lt;param name="quality" value="high"&gt;     
&lt;param name="wmode" value="transparent"&gt;     &lt;/object&gt;
&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;h2&gt;What Are Portable Areas?&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;Encapsulates the UI functionality of a website and send messages to the application for data access, services, etc. &lt;/li&gt;

  
&lt;li&gt;Can be a single component on the page or come in form of multi-page feature to a site &lt;/li&gt;

  
&lt;li&gt;View logic and view markup are compiled into a single DLL for easy distribution &lt;/li&gt;

  
&lt;li&gt;An option for component model for MVC &lt;/li&gt;

  
&lt;li&gt;Feature of MVC Contrib &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;How Does a Portable Area Communicate with the Host Application?&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;Registers on startup &lt;/li&gt;

  
&lt;li&gt;Sends messages in the form of a class to host application &lt;/li&gt;

  
&lt;li&gt;Messages managed by a ‘message bus’ which is a synchronous communication between area and app &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;How Is Integration Into the Application Handled?&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;For single components, the view will access a HTML helper that in the end points to a controller and view result &lt;/li&gt;

  
&lt;li&gt;For multi-page components, new routes grants access to the new view pages &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;How Do the Areas Handle Layout and External Files?&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;Layout is made consistent by leveraging MVC Framework’s use of default views that may be overridden in the application &lt;/li&gt;

  
&lt;li&gt;Documentation or review of embedded views will give developers of consuming apps the information about hooks required in views &lt;/li&gt;

  
&lt;li&gt;Images, CSS, and script files may be embedded into the DLL or added to the host application &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What Are Some Examples?&lt;/h2&gt;

&lt;p&gt;The following are items Eric and Jeffrey mentioned as examples that are implemented as portable areas, or they would like to see as a portable area. This list will hopefully give you an idea of how and when to use this feature:&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;Grid &lt;/li&gt;

  
&lt;li&gt;Login &lt;/li&gt;

  
&lt;li&gt;Forums &lt;/li&gt;

  
&lt;li&gt;‘&lt;a href="http://stackoverflow.com/" mce_href="http://stackoverflow.com/" target="_blank"&gt;StackOverflow&lt;/a&gt;’ add-in &lt;/li&gt;

  
&lt;li&gt;Blog engine &lt;/li&gt;

  
&lt;li&gt;RSS reader &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx" mce_href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx" target="_blank"&gt;ASP.Net MVC Portable Areas via MvcContrib&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://jeffreypalermo.com/blog/consuming-a-portable-area-with-a-web-forms-application/" mce_href="http://jeffreypalermo.com/blog/consuming-a-portable-area-with-a-web-forms-application/" target="_blank"&gt;Consuming a Portable Area with a Web Forms application&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://github.com/jeffreypalermo/mvc2inaction" mce_href="http://github.com/jeffreypalermo/mvc2inaction" target="_blank"&gt;ASP.NET MVC 2 In Action (Second Edition) on GitHub&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://github.com/mvccontrib" mce_href="http://github.com/mvccontrib" target="_blank"&gt;GitHub Repository for MVC Contrib&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://tinyurl.com/mvccontrib" mce_href="http://tinyurl.com/mvccontrib"&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7303672" width="1" height="1"&gt;</description><enclosure url="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2010-01-07-portableareas.mp3" length="29658908" type="audio/mpeg" /><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/MVC/default.aspx">MVC</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Polymorphic+Podcast/default.aspx">Polymorphic Podcast</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2010/01/07/podcast-portable-areas-with-jeffrey-palermo-and-eric-hexter.aspx</feedburner:origLink></item><item><title>Amazon Kindle When You Don’t Own a Kindle</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/Q18DfbVPF2g/amazon-kindle-when-you-don-t-own-a-kindle.aspx</link><pubDate>Tue, 05 Jan 2010 20:29:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7301212</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7301212</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2010/01/05/amazon-kindle-when-you-don-t-own-a-kindle.aspx#comments</comments><description>&lt;p&gt;You don’t need to shell out the &lt;a href="http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1262723357&amp;amp;sr=8-1" mce_href="http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1262723357&amp;amp;sr=8-1"&gt;$250+ for a Kindle&lt;/a&gt; – use your &lt;a href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;amp;docId=1000301301" mce_href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;amp;docId=1000301301"&gt;iPhone&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/kindle/pc" mce_href="http://www.amazon.com/gp/kindle/pc"&gt;netbook or PC&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;For Christmas my lovely bride got me an &lt;a href="http://www.amazon.com/Apple-touch-Generation-NEWEST-MODEL/dp/B002M3SOBU/ref=sr_1_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1262722341&amp;amp;sr=8-1" mce_href="http://www.amazon.com/Apple-touch-Generation-NEWEST-MODEL/dp/B002M3SOBU/ref=sr_1_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1262722341&amp;amp;sr=8-1"&gt;iPod Touch&lt;/a&gt;. Now I am usually not a gadget guy, but this is one of the things I had really wanted since I got her an iTouch for last year’s Christmas. After doing the normal setup I started looking around the AppStore. One of the apps that stuck out to me was &lt;a href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;amp;docId=1000301301" mce_href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;amp;docId=1000301301"&gt;Kindle for iPhone&lt;/a&gt;.&lt;/p&gt;
 

&lt;p&gt;Now when Amazon first introduced the Kindle, my first impression was that I probably wouldn’t like it. For some reason I figured that I would prefer to feel a real paper book in my hand. After installing and using Kindle for iPhone I can say that preference no longer exists.&lt;/p&gt;

&lt;p&gt;I love being able to just pull out my iPod and continue reading a book right where I left off wherever I am at!&lt;/p&gt;
&lt;img src="http://polymorphicpodcast.com/images/blog/KindleiTouchDevice.png" mce_src="http://polymorphicpodcast.com/images/blog/KindleiTouchDevice.png"&gt; 

&lt;p&gt;So I figured that if there was an iPhone version of Kindle, then there was probably a PC version as well. Minutes after installing &lt;a href="http://www.amazon.com/gp/kindle/pc" mce_href="http://www.amazon.com/gp/kindle/pc"&gt;Kindle for PC&lt;/a&gt; I had the same book synchronized to my netbook. This experience was great for reading while holding our newborn baby – no hands necessary. I was fortunate enough to received one of the PDC netbooks (thanks Microsoft and Infragistics for letting me keep it!) so I could use the touch screen features to simply reach up and turn to the next page.&lt;/p&gt;
&lt;img src="http://polymorphicpodcast.com/images/blog/KindleNetbook.png" mce_src="http://polymorphicpodcast.com/images/blog/KindleNetbook.png"&gt; 

&lt;p&gt;Finally I stalled Kindle for PC on my work laptop so I could also have the same books available should I have some time and want to read on a large monitor form factor.&lt;/p&gt;

&lt;p&gt;So if you want most of the benefits of a Kindle reader and don’t want to empty your pockets for the Kindle device you now have the next best thing!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7301212" width="1" height="1"&gt;</description><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2010/01/05/amazon-kindle-when-you-don-t-own-a-kindle.aspx</feedburner:origLink></item><item><title>ASP.NET Ajax Library Beta with Stephen Walther</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/sHopxPFEux8/asp-net-ajax-library-beta-with-stephen-walther.aspx</link><pubDate>Mon, 04 Jan 2010 17:04:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7299855</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7299855</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2010/01/04/asp-net-ajax-library-beta-with-stephen-walther.aspx#comments</comments><description>
&lt;p&gt;&lt;a href="http://stephenwalther.com/" mce_href="http://stephenwalther.com/"&gt;Stephen Walther&lt;/a&gt; (&lt;a href="http://twitter.com/swalther" mce_href="http://twitter.com/swalther"&gt;@swalther&lt;/a&gt;) and Craig Shoemaker discuss the latest announcements surrounding the ASP.NET Ajax Library during PDC09.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.infragistics.com/pixel8/media/p/211903.aspx"&gt;&lt;img src="http://download.infragistics.com/users/pixel8/images/pixel8podcast.png" border="0" height="118" width="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="margin-left: 60px;"&gt;&lt;a href="http://feeds.feedburner.com/Pixel8"&gt;Subscribe to the podcast!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;A New Name a New Home&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;Now named &lt;a href="http://ajax.codeplex.com" mce_href="http://ajax.codeplex.com"&gt;ASP.NET AJAX Library&lt;/a&gt; (old name was proprietary) &lt;/li&gt;

  
&lt;li&gt;First contribution to the &lt;a href="http://codeplex.org/" mce_href="http://codeplex.org/"&gt;CodePlex Foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What's New for the Beta?&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;OSS and inclusion in the CodePlex Foundation&lt;/li&gt;

  
&lt;li&gt;Microsoft is providing product support even as the library remains OSS&lt;/li&gt;

  
&lt;li&gt;Merging &lt;a href="http://www.asp.net/ajax/AjaxControlToolkit/Samples/" mce_href="http://www.asp.net/ajax/AjaxControlToolkit/Samples/"&gt;Ajax Control Toolkit&lt;/a&gt; (ACT) into the Ajax library&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Unique Features&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;Client Script Loader - loads script dependencies in parallel &lt;/li&gt;

  
&lt;li&gt;No installation necessary - use the &lt;a href="http://www.asp.net/ajaxLibrary/cdn.ashx" mce_href="http://www.asp.net/ajaxLibrary/cdn.ashx"&gt;CDN&lt;/a&gt;&lt;/li&gt;

  
&lt;li&gt;Most ACT controls and functionality supported in client only scenario&lt;/li&gt;

  
&lt;li&gt;ACT HTML editor not in beta, but look for it in RTM &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx"&gt;Minifier functionality&lt;/a&gt; – includes command line tool and MS Build task&lt;/li&gt;

  
&lt;li&gt;Preprocessor&lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://www.asp.net/ajaxlibrary/" mce_href="http://www.asp.net/ajaxlibrary/"&gt;Wiki for OSS&lt;/a&gt; documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Is jQuery Used Inside Ajax Controls?&lt;/h2&gt;

&lt;ul&gt;
  
&lt;li&gt;No dependency on jQuery yet... leaving that up to developer needs &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7299855" width="1" height="1"&gt;</description><enclosure url="http://download.infragistics.com/pixel8/media/pixel8-2010-01-04-ajaxbeta.mp3" length="17777051" type="audio/mpeg" /><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Pixel8/default.aspx">Pixel8</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2010/01/04/asp-net-ajax-library-beta-with-stephen-walther.aspx</feedburner:origLink></item><item><title>Silverlight 4 with Tim Heuer and Jesse Liberty</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/8eVynajFNd0/silverlight-4-with-tim-heuer-and-jesse-liberty.aspx</link><pubDate>Mon, 14 Dec 2009 23:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7278872</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7278872</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/12/14/silverlight-4-with-tim-heuer-and-jesse-liberty.aspx#comments</comments><description>
&lt;p&gt;While the attendees of PDC09 likely expected to hear a plethora of announcements regarding Silverlight 3 all hopes were dashed when Scott Guthrie quickly glossed over advancements in Silverlight 3 to make time to talk about... the &lt;a href="http://silverlight.net/getstarted/silverlight-4-beta/" mce_href="http://silverlight.net/getstarted/silverlight-4-beta/"&gt;Silverlight 4 beta&lt;/a&gt;! &lt;/p&gt;

&lt;p&gt;This episode of &lt;a href="http://getpixel8ed.com" mce_href="http://getpixel8ed.com"&gt;Pixel8&lt;/a&gt; &lt;a href="http://timheuer.com/blog/" mce_href="http://timheuer.com/blog/"&gt;Tim Heuer&lt;/a&gt; (&lt;a href="http://twitter.com/timheuer" mce_href="http://twitter.com/timheuer"&gt;@timheuer&lt;/a&gt;) and &lt;a href="http://blogs.silverlight.net/blogs/jesseliberty/" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/"&gt;Jesse Liberty&lt;/a&gt; (&lt;a href="http://twitter.com/jesseliberty" mce_href="http://twitter.com/jesseliberty"&gt;@jesseliberty&lt;/a&gt;) join &lt;a href="http://weblogs.asp.net/craigshoemaker/" mce_href="http://weblogs.asp.net/craigshoemaker/"&gt;Craig Shoemaker&lt;/a&gt; (&lt;a href="http://twitter.com/craigshoemaker" mce_href="http://twitter.com/craigshoemaker"&gt;@craigshoemaker&lt;/a&gt;) to discuss the new features that excite them as well as projects that have recently caught their attention. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.infragistics.com/pixel8/media/p/209447.aspx"&gt;&lt;img src="http://download.infragistics.com/users/pixel8/images/pixel8podcast.png" border="0" height="118" width="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="margin-left: 60px;"&gt;&lt;a href="http://feeds.feedburner.com/Pixel8"&gt;Subscribe to the podcast!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;h3&gt;Tim Heuer&lt;/h3&gt;
&lt;h4&gt;New Features&lt;/h4&gt;

&lt;p&gt;If you aren’t familiar with what’s new, make sure to read Tim’s &lt;a href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx" mce_href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx"&gt;comprehensive post on new features in Silverlight 4 beta&lt;/a&gt;. A point that both Tim and Jesse make is that &lt;a href="http://silverlight.uservoice.com/pages/4325-feature-suggestions" mce_href="http://silverlight.uservoice.com/pages/4325-feature-suggestions"&gt;new features were largely a direct result of customer feedback&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Is WPF Dead?&lt;/h4&gt;

&lt;p&gt;The announcement of IO support, printing and other features often associated with desktop applications left some wondering the fate of WPF. If the chasm between WPF and Silverlight continues to shrink, how do you choose a platform? &lt;/p&gt;

&lt;p&gt;Tim’s advises, if you are targeting Windows, start with WPF. Silverlight is about cross-platform and reach. Both platforms are attempting to be feature compatible. If you must select a “winner” to the debate, perhaps it’s best to say that the winner is XAML. An investment in XAML will keep your options open on the desktop and the web.&lt;/p&gt;

&lt;h4&gt;Advice on Real World Development&lt;/h4&gt;

&lt;p&gt;Tim offers some quick tips for real life Silverlight development:&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;&lt;a href="http://www.google.com/search?q=silverlight+mvvm" mce_href="http://www.google.com/search?q=silverlight+mvvm"&gt;Invest time in learning the view model pattern&lt;/a&gt; 
    
&lt;ul&gt;
      
&lt;li&gt;MVVM seems to be the winner in presentation patterns. Even if the approach is not for you be familiar with the concepts 
        &lt;br&gt;&amp;nbsp; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  
&lt;li&gt;Understand a composite model and learn to partition your application 
    
&lt;ul&gt;
      
&lt;li&gt;Look at &lt;a href="http://www.codeplex.com/CompositeWPF/" mce_href="http://www.codeplex.com/CompositeWPF/"&gt;Prism&lt;/a&gt; and realize it’s value for building modular and composite applications beyond it’s MVVM support 
        &lt;br&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  
&lt;li&gt;Consider your extensibility points 
    
&lt;ul&gt;
      
&lt;li&gt;&lt;a href="http://www.codeplex.com/MEF" mce_href="http://www.codeplex.com/MEF"&gt;Managed Extensibility Framework (MEF)&lt;/a&gt; for could be used for extensibility or perhaps even building composition into your application &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Designer Developer Workflow&lt;/h4&gt;

&lt;ul&gt;
  
&lt;li&gt;Tim discusses his &lt;a href="http://timheuer.com/blog/archive/2009/10/19/14674.aspx" mce_href="http://timheuer.com/blog/archive/2009/10/19/14674.aspx"&gt;plea to my developer brethren about designer/designers&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;Role of the Integrator (may not be a full time person, but perhaps a senior person on the team able to run interference between developers and designer) &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Jesse Liberty&lt;/h3&gt;

&lt;p&gt;Jesse sees the line of business story a more natural fit in Silverlight 4. By leveraging some of the infrastructure of previous releases, new features offer a richer experience in for common scenarios. For instance:&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;Leveraging of the &lt;a href="http://blogs.silverlight.net/blogs/jesseliberty/archive/2009/07/18/what-s-new-in-silverlight-3-validation.aspx" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/archive/2009/07/18/what-s-new-in-silverlight-3-validation.aspx"&gt;Visual State Machine&lt;/a&gt; – where validation logic is server-bound, but the client reflects the outcome of this code &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://blogs.silverlight.net/blogs/jesseliberty/archive/2009/11/20/silverlight-4-fluid-ui.aspx" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/archive/2009/11/20/silverlight-4-fluid-ui.aspx"&gt;Fluid UI&lt;/a&gt; – animations for different states of a list box &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jesse is heading up the open source &lt;a href="http://silverlighthvp.codeplex.com/" mce_href="http://silverlighthvp.codeplex.com/"&gt;Silverlight HyperVideo Player&lt;/a&gt; project. The HVP adds in-context links to video content within a video. Jesse is spending time thinking about over all architecture and finer details like &lt;a href="http://blogs.silverlight.net/blogs/jesseliberty/archive/2009/10/27/silverlight-synchronicity.aspx" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/archive/2009/10/27/silverlight-synchronicity.aspx"&gt;accessibility&lt;/a&gt;. A particularly impressive feature Jesse is looking to add to the HVP is a generic marking system that will allow markers to change and be added to a video over time. Look for some innovative work for coming from the &lt;a href="http://silverlighthvp.codeplex.com/" mce_href="http://silverlighthvp.codeplex.com/"&gt;Silverlight HyperVideo Player&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7278872" width="1" height="1"&gt;</description><enclosure url="http://download.infragistics.com/pixel8/media/pixel8-2009-12-14-silverlight4.mp3" length="44062504" type="audio/mpeg" /><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Pixel8/default.aspx">Pixel8</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/12/14/silverlight-4-with-tim-heuer-and-jesse-liberty.aspx</feedburner:origLink></item><item><title>Lazy Loading JavaScript Files Using ASP.NET AJAX Script Loader</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/dzVVH1lpj5c/lazy-loading-javascript-files-using-asp-net-ajax-script-loader.aspx</link><pubDate>Wed, 09 Dec 2009 22:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7274856</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7274856</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/12/09/lazy-loading-javascript-files-using-asp-net-ajax-script-loader.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx"&gt;ASP.NET AJAX Script Loader control&lt;/a&gt; will make your life easier. Gone are the days where you have to include a multi-line block of script includes on every web page. Gone are the days of double checking to make sure your script files are included in the right order. Now with the appropriate use of the Script Loader’s &lt;strong&gt;require&lt;/strong&gt; function gone are the days of having to load scripts on your page whether you need them or not.&lt;/p&gt;

&lt;p&gt;Since the Script Loader control programmatically loads scripts into the browser you get imperative control of when and where scripts are loaded. Consider a page that will only load the &lt;a href="http://blogs.visoftinc.com/archive/2009/04/28/ASP.NET-4.0-AJAX-Preview-4-Client-Templates.aspx" mce_href="http://blogs.visoftinc.com/archive/2009/04/28/ASP.NET-4.0-AJAX-Preview-4-Client-Templates.aspx"&gt;dataView scripts&lt;/a&gt; on to the page when a user tries to access an area of the page where an ASP.NET AJAX client template is used to display the data. The following code demonstrates how to accomplish this task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;a href="http://polymorphicpodcast.com/examples/lazyloadscripts/" mce_href="http://polymorphicpodcast.com/examples/lazyloadscripts/"&gt;Make sure to see it in action by checking out the live working copy!&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Script&lt;/h3&gt;

&lt;pre style="border: 1px solid rgb(204, 204, 204); padding: 4px; background-color: rgb(238, 238, 238); font-size: 1.2em;"&gt;&amp;lt;script src="http://weblogs.asp.net/Scripts/MicrosoftAjax/start.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;

Sys.require(Sys.scripts.ComponentModel);

Sys.onReady(function()
{
    Sys.addHandler($get("bindButton"), "click", function()
    {
        $get("bindButton").disabled = true;
        Sys.require([Sys.components.dataView], function()
        {
            Sys.create.dataView("#dv", { data: colors });
        });
    });
});

var colors = [
   { Name: "Black" },
   { Name: "Blue" },
   { Name: "White" },
   { Name: "Green" }
];
&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;h3&gt;Markup&lt;/h3&gt;

&lt;pre style="border: 1px solid rgb(204, 204, 204); padding: 4px; background-color: rgb(238, 238, 238); font-size: 1.2em;"&gt;&amp;lt;input type="button" value="Get Colors" id="bindButton" name="bindButton" /&amp;gt;
&amp;lt;ul id="dv" class="sys-template"&amp;gt;
    &amp;lt;li&amp;gt;{{Name}}&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/pre&gt;

&lt;p&gt;Special thanks to &lt;a href="http://blogs.southworks.net/jdominguez/" mce_href="http://blogs.southworks.net/jdominguez/"&gt;Julian Dominguez&lt;/a&gt; (&lt;a href="http://twitter.com/juliandominguez" mce_href="http://twitter.com/juliandominguez"&gt;@juliandominguez&lt;/a&gt;) for helping me work out a few kinks in the first iteration of this code :)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7274856" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/12/09/lazy-loading-javascript-files-using-asp-net-ajax-script-loader.aspx</feedburner:origLink></item><item><title>Presentation: ASP.NET AJAX 4 at Inland Empire .NET User Group</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/YgPuARRt1jA/presentation-asp-net-ajax-4-at-inland-empire-net-user-group.aspx</link><pubDate>Wed, 09 Dec 2009 02:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7273889</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7273889</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/12/08/presentation-asp-net-ajax-4-at-inland-empire-net-user-group.aspx#comments</comments><description>&lt;p&gt;Thanks to everyone who came to my ASP.NET AJAX 4 talk at the &lt;a href="http://www.iedotnetug.org" mce_href="http://www.iedotnetug.org"&gt;Inland Empire .NET User Group&lt;/a&gt;. Special thanks to &lt;a href="http://www.duringlunch.com/" mce_href="http://www.duringlunch.com/"&gt;James Johnson&lt;/a&gt; (&lt;a href="http://twitter.com/latringo" mce_href="http://twitter.com/latringo"&gt;@latringo&lt;/a&gt;) for organizing such a great group! &lt;/p&gt;&lt;p&gt;Here is the code download for the talk:&amp;nbsp; &lt;a href="http://polymorphicpodcast.com/code/2009-12-08/ieug/ASPNETClientTemplates.zip" mce_href="http://polymorphicpodcast.com/code/2009-12-08/ieug/ASPNETClientTemplates.zip"&gt;ASPNETClientTemplates.zip&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7273889" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Presentation/default.aspx">Presentation</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/12/08/presentation-asp-net-ajax-4-at-inland-empire-net-user-group.aspx</feedburner:origLink></item><item><title>ASP.NET Simplicity and Performance with Scott Hunter</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/vBxZRrytw20/asp-net-simplicity-and-performance-with-scott-hunter.aspx</link><pubDate>Fri, 04 Dec 2009 16:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7270703</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7270703</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/12/04/asp-net-simplicity-and-performance-with-scott-hunter.aspx#comments</comments><description>
&lt;p&gt;On this episode of Pixel8 &lt;a href="http://blogs.msdn.com/scothu/" mce_href="http://blogs.msdn.com/scothu/"&gt;Scott Hunter&lt;/a&gt; (&lt;a href="http://twitter.com/coolcsh" mce_href="http://twitter.com/coolcsh"&gt;@coolsch&lt;/a&gt;) joins us to discuss his team’s focus on simplicity and performance in ASP.NET. Scott was kind enough to surprise me with some talking points about what his team is thinking about for releases coming &lt;b&gt;&lt;i&gt;after &lt;/i&gt;&lt;/b&gt;ASP.NET 4! Please note, what’s discussed herein are un-implemented features of ASP.NET so your feedback is not only welcome, but encouraged!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.infragistics.com/pixel8/media/p/207428.aspx"&gt;&lt;img src="http://download.infragistics.com/users/pixel8/images/pixel8podcast.png" border="0" height="118" width="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="margin-left: 60px;"&gt;&lt;a href="http://feeds.feedburner.com/Pixel8"&gt;Subscribe to the podcast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Velocity Provider for Caching:&lt;/b&gt; This will allow developers to plug in caching scenarios based on their needs.&lt;br&gt;&lt;br&gt; 
    &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Automatic Generation of &lt;/b&gt;&lt;a href="http://www.alistapart.com/articles/sprites" mce_href="http://www.alistapart.com/articles/sprites"&gt;&lt;b&gt;CSS Sprites&lt;/b&gt;&lt;/a&gt;&lt;b&gt;:&lt;/b&gt; Adding images to the Content folder will trigger the ASP.NET framework to stitch together a single image which is later sliced up by inline styles. A helper method is responsible for generating markup of the appropriate CSS coordinates to wire-up the sprite. This feature will allow for groups so related images may be combined together. 
    &lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Complex Helpers:&lt;/b&gt; There are scores of common features and functionality that many developers want to include in their applications, but unfortunately right now these features require a lot of code to implement. In the future you may have helpers available that provide a simple API to do the following: 
    
&lt;ul&gt;
&lt;li&gt;Resize images &lt;/li&gt;

&lt;li&gt;Watermark images &lt;/li&gt;

&lt;li&gt;Flip images &lt;/li&gt;

&lt;li&gt;Send Email - helpers for single method calls to send and mail or verify an address [ex: Email.Send() or Email.VerifyAddress()] &lt;/li&gt;

&lt;li&gt;Schedule Tasks - submit tasks to a background worker process (wouldn’t take down app domain if exception occurred) &lt;/li&gt;

&lt;li&gt;Posting status updates to Facebook, Twitter, etc. &lt;/li&gt;

&lt;li&gt;Polls &lt;/li&gt;

&lt;li&gt;Ratings &lt;/li&gt;

&lt;li&gt;Comments &lt;/li&gt;

&lt;li&gt;OpenID integration &lt;/li&gt;
&lt;/ul&gt;
* Many of these features will likely be released outside the formal ASP.NET framework 
    &lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Data Simplicity:&lt;/b&gt; Active record implementation that features a code-first approach. Consider a blank database with no tables. The active record pattern would allow you to instantiate the &lt;b&gt;Foo&lt;/b&gt; class and then add values to &lt;b&gt;Foo.Bar1&lt;/b&gt; and &lt;b&gt;Foo.Bar2&lt;/b&gt;, then call &lt;b&gt;Foo.Save()&lt;/b&gt;. If the &lt;b&gt;Foo&lt;/b&gt; table does not exist in the database, then the table is created and the data is persisted. Also &lt;b&gt;Foo.All()&lt;/b&gt; would return all the records of &lt;b&gt;Foo&lt;/b&gt;, but the return type is an IQueryable so you could further filter on the server. The code-first won’t be the only direction the integration will work. Changes in the database can be reflected in the model by use of T4 templates. 
    &lt;br&gt;
    &lt;br&gt;&lt;b&gt;Note:&lt;/b&gt; I ask the requisite question about the virtues of the repository pattern as opposed to active record. Scott demonstrates how the implementation they are considering would not hinder you from exposing your own DTOs and wrapping a repository around the active record objects. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Also make sure you check out my post &lt;a href="http://weblogs.asp.net/craigshoemaker/archive/2009/12/04/12-ways-to-simplify-asp-net-and-visual-studio.aspx" mce_href="http://weblogs.asp.net/craigshoemaker/archive/2009/12/04/12-ways-to-simplify-asp-net-and-visual-studio.aspx"&gt;12 Ways to Simplify ASP.NET and Visual Studio&lt;/a&gt; I wrote after being inspired by this interview!&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7270703" width="1" height="1"&gt;</description><enclosure url="http://download.infragistics.com/pixel8/media/pixel8-2009-12-03-simplicity.mp3" length="36204443" type="audio/mpeg" /><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/MVC/default.aspx">MVC</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Pixel8/default.aspx">Pixel8</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/12/04/asp-net-simplicity-and-performance-with-scott-hunter.aspx</feedburner:origLink></item><item><title>12 Ways to Simplify ASP.NET and Visual Studio</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/KHFsCcVuudc/12-ways-to-simplify-asp-net-and-visual-studio.aspx</link><pubDate>Fri, 04 Dec 2009 14:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7270602</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>16</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7270602</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/12/04/12-ways-to-simplify-asp-net-and-visual-studio.aspx#comments</comments><description>&lt;p&gt;While at PDC this year I had an opportunity to interview a number of smart and engaging people. One of my guests was &lt;a href="http://blogs.msdn.com/scothu/" mce_href="http://blogs.msdn.com/scothu/"&gt;Scott Hunter&lt;/a&gt; (&lt;a href="http://twitter.com/coolcsh" mce_href="http://twitter.com/coolcsh"&gt;@coolcsh&lt;/a&gt;) who these days is responsible for WebForms, ASP.NET Data and seemingly much more. To my surprise Scott wanted to talk about what is coming &lt;b&gt;&lt;i&gt;after&lt;/i&gt;&lt;/b&gt; ASP.NET 4! &lt;/p&gt;

&lt;p&gt;Taking a step back and looking at ASP.NET, tooling, data and the entire experience of working with the .NET stack Scott’s team and other groups in Microsoft are turning their attention to a single concept…&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Simplicity&lt;/p&gt;

&lt;p&gt;While I will refer you to the &lt;a href="http://getpixel8ed.com" mce_href="http://getpixel8ed.com"&gt;Pixel8&lt;/a&gt; podcast, &lt;a href="http://blogs.infragistics.com/pixel8/media/p/207428.aspx" mce_href="http://blogs.infragistics.com/pixel8/media/p/207428.aspx"&gt;ASP.NET Simplicity and Performance with Scott Hunter&lt;/a&gt;, to hear the details about ideas his team is entertaining to make ASP.NET easer and perform even faster, I thought I would throw in my two cents as well. The following is my wish list of twelve improvements to ASP.NET and Visual Studio that would undoubtedly make development faster and easier.&lt;/p&gt;

&lt;div style="margin-left: 20px;"&gt;
  &lt;h3&gt;1: Overload the DataBind Method &lt;/h3&gt;

  &lt;p&gt;How often have you worked with data bound control and wrote code like this:&lt;/p&gt;

  &lt;pre style="border: 1px solid rgb(204, 204, 204); padding: 4px; background-color: rgb(238, 238, 238); font-family: courier,sans-serif; font-size: 1.2em;"&gt;protected void Page_Load(object sender, EventArgs e)&lt;br&gt;{&lt;br&gt;  this.grid.DataSource = foo;&lt;br&gt;  this.grid.DataBind();&lt;br&gt;}&lt;/pre&gt;

  &lt;p&gt;Wouldn’t it be simpler if you could just call the DataBind method and pass in the data source?&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/databind.png" title="Overload the DataBind method" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/databind.png" height="150" width="629"&gt;&lt;/p&gt;

  &lt;p&gt;You can do this easily today by implementing an extension method as I did here, but it would be nice to have this as a first-class feature of the &lt;a href="http://weblogs.asp.net/controlpanel/blogs/BaseDataBoundControl" mce_href="BaseDataBoundControl"&gt;BaseDataBoundControl&lt;/a&gt; class.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;2: Implement IsFirstRequest Property&lt;/h3&gt;

  &lt;p&gt;The whole notion of the IsPostBack property always seemed a bit awkward to me. More often than not you are using this property to evaluate it’s negative state – in other words trying to figure out if the page is running under the context of the first request. I suggest the addition of a property that is no more than the reverse of IsPostBack:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/firstrequest.png" title="IsFirstRequest property" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/firstrequest.png" height="199" width="667"&gt;&lt;/p&gt;

  &lt;p&gt;It’s a small thing, but I think it makes code a little cleaner to read.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;3: Implement Application Name&lt;/h3&gt;

  &lt;p&gt;Often developers need a way to display the application name to users. While setting up a globally-scoped class to handle this task is trivial, but it would be nice if there was a “Name” property off the page’s locally scoped Application property:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/appname.png" title="Application Name" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/appname.png" height="90" width="456"&gt;&lt;/p&gt;

  &lt;p&gt;The value for this property would likely be saved in the web.config or Global.asax. Adding this feature may also help sort out a common &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx"&gt;problem that arises in using the membership provider when developers forget to define an application name&lt;/a&gt;. Visual Studio could auto fill this value with the “application name” from the create project wizard and then allow an override at any time.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;4: Option to Categorize IntelliSense Members&lt;/h3&gt;

  &lt;p&gt;Ever wanted to tap into an event of an object, but weren’t sure what the event name was? Ever wanted to know just what an object methods were while trying to learn a new API? What about trying to find out if there is a property for &lt;b&gt;X&lt;/b&gt;? IntelliSense is an invaluable tool in it’s current form and Visual Studio 2010 adds some needed filtering behaviors for C#, but we can do even better.&lt;/p&gt;

  &lt;p&gt;It would be nice if IntelliSense had a way to display members in a categorical format:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/intellisense.png" title="IntelliSense categories" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/intellisense.png" height="262" width="491"&gt;&lt;/p&gt;

  &lt;p&gt;Obviously this isn’t a feature you would want enabled at all times, but it would make working with new APIs much easier.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;5: Bring XAML Data Binding Syntax to ASP.NET&lt;/h3&gt;

  &lt;p&gt;&lt;a href="http://weblogs.asp.net/davidfowler/" mce_href="http://weblogs.asp.net/davidfowler/"&gt;David Fowler&lt;/a&gt; (&lt;a href="http://twitter.com/davidfowl/" mce_href="http://twitter.com/davidfowl/"&gt;@davidfowl&lt;/a&gt;) has been churning out some amazing blog posts all around the topic of data binding in ASP.NET. One of his recent posts included an &lt;a href="http://weblogs.asp.net/davidfowler/archive/2009/11/13/databinding-3-0.aspx" mce_href="http://weblogs.asp.net/davidfowler/archive/2009/11/13/databinding-3-0.aspx"&gt;exposition of DataBinding 3.0&lt;/a&gt;. Basically the latest iteration of data binding brings the XAML syntax to ASP.NET data binding. &lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/bindingsyntax.png" title="XAML data binding syntax is ASP.NET" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/bindingsyntax.png"&gt;&lt;/p&gt;

  &lt;p&gt;This addition makes life easier because then you don’t have to worry about when you use the &lt;b&gt;Bind&lt;/b&gt; or &lt;b&gt;Eval&lt;/b&gt; syntax. Plus making a homogenous binding syntax among WPF, Silverlight, ASP.NET AJAX and ASP.NET WebForms makes working with the controls a natural task regardless of the platform you are working.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;6: Parameter Attributes&lt;/h3&gt;

  &lt;p&gt;When working with QueryString parameters requires some repetitious boilerplate code. Consider the following listing, which you have probably written thousands of times:&lt;/p&gt;

  &lt;pre style="border: 1px solid rgb(204, 204, 204); padding: 4px; background-color: rgb(238, 238, 238); font-family: courier,sans-serif; font-size: 1.2em;"&gt;private string UserName&lt;br&gt;{&lt;br&gt;  get&lt;br&gt;  {&lt;br&gt;    if(Request.QueryString["userName"] != null)&lt;br&gt;    {&lt;br&gt;      return Request.QueryString["userName"].ToString();&lt;br&gt;    }&lt;br&gt;    return string.Empty;&lt;br&gt;  }&lt;br&gt;}&lt;/pre&gt;

  &lt;p&gt;How much simpler would it be if you could just &lt;a href="http://www.codeproject.com/KB/aspnet/QueryStringAttributes.aspx" mce_href="http://www.codeproject.com/KB/aspnet/QueryStringAttributes.aspx"&gt;decorate the property with an attribute and the retrieval code is implemented automatically&lt;/a&gt;?&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/parameters.png" title="Parameter Attributes" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/parameters.png" height="110" width="449"&gt;&lt;/p&gt;

  &lt;p&gt;This approach doesn’t have to stop with the query string either. The same types of attributes may be available for :&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;QueryString &lt;/li&gt;

    &lt;li&gt;Form Elements &lt;/li&gt;

    &lt;li&gt;Context Items &lt;/li&gt;

    &lt;li&gt;Session &lt;/li&gt;

    &lt;li&gt;Cache &lt;/li&gt;

    &lt;li&gt;Cookies &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;7: WebForms Model Binders&lt;/h3&gt;

  &lt;p&gt;One of the features that I immediately fell in love with from the ASP.NET MVC framework was &lt;a href="http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx" mce_href="http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx"&gt;model binders&lt;/a&gt;. With the updates to ASP.NET 4 granting total control over the client IDs of server controls, now WebForms needs model binders!&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/modelbinder.png" title="ASP.NET Model Binders" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/modelbinder.png" height="310" width="642"&gt;&lt;/p&gt;

  &lt;p&gt;The pages could be strongly typed like MVC strongly typed views, or the designer could interrogate the control hierarchy and build the view model on the fly. Obviously we’d also need some hooks to tap into the flow to implement custom bindings too.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;8: JavaScript Model Binders&lt;/h3&gt;

  &lt;p&gt;Just as the server can benefit from automatic mapping of input controls to a model object, Ajax scenarios could be greatly simplified if there was a function to run on the client that automatically created a JSON object with all input values.&lt;/p&gt;

  &lt;p&gt;Consider a form like this:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/dto-ui.png" title="UI" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/dto-ui.png" height="103" width="564"&gt;&lt;/p&gt;

  &lt;p&gt;With markup like this:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/dto-markup.png" title="Markup" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/dto-markup.png" height="294" width="640"&gt;&lt;/p&gt;

  &lt;p&gt;A model, or DTO if you like, could easily be constructed by querying the form and building the object from input elements.&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/dto-js.png" title="JavaScript" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/dto-js.png" height="176" width="583"&gt;&lt;/p&gt;

  &lt;p&gt;There could even be special rules for certain controls like a select list. Sending the selected index, text and value as a group for the single control should provide all the information necessary to consuming resource.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;9: Select the Location of ViewState&lt;/h3&gt;

  &lt;p&gt;While ASP.NET 4 makes great strides to trim down a page’s ViewState it would still be nice to have explicit control over where the ViewState is rendered on the page. I’d love to see a server control that allows you to place the ViewState containers at a location of your choosing:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/viewstate.png" title="ViewSTate Container" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/viewstate.png" height="134" width="560"&gt;&lt;/p&gt;

  &lt;p&gt;Now more times than not the best approach is to simply &lt;a href="http://www.hanselman.com/blog/MovingViewStateToTheBottomOfThePage.aspx" mce_href="http://www.hanselman.com/blog/MovingViewStateToTheBottomOfThePage.aspx"&gt;move ViewState to the bottom of the page&lt;/a&gt;, but having explicit control of the placement seems like the best scenario.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;10: Disabling the Post Back Button&lt;/h3&gt;

  &lt;p&gt;The ASP.NET runtime will not recognize a post back initiated by a disabled button so developers have had to &lt;a href="http://aspalliance.com/829_Disabling_the_Postback_Button" mce_href="http://aspalliance.com/829_Disabling_the_Postback_Button"&gt;concoct some clever ways to protect users from themselves&lt;/a&gt;. It would be nice if ASP.NET had a way to reliably disable post back buttons out-of-the-box.&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/disabled.png" title="Disable PostBack Button" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/disabled.png" height="111" width="306"&gt;&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;11: Implement ASP.NET Configuration Console as Portable Area&lt;/h3&gt;

  &lt;p&gt;&lt;a href="http://www.lostechies.com/blogs/hex/" mce_href="http://www.lostechies.com/blogs/hex/"&gt;Eric Hexter&lt;/a&gt; (&lt;a href="http://twitter.com/ehexter" mce_href="http://twitter.com/ehexter"&gt;@ehexter&lt;/a&gt;) &lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx" mce_href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx"&gt;recently blogged about the concept of a “portable area”&lt;/a&gt; where you can compile single controls controls or even up to entire workflows into an assembly to later include in an ASP.NET MVC or &lt;a href="http://jeffreypalermo.com/blog/consuming-a-portable-area-with-a-web-forms-application/" mce_href="http://jeffreypalermo.com/blog/consuming-a-portable-area-with-a-web-forms-application/"&gt;WinForms application&lt;/a&gt;. This approach is perfect for implementing the ASP.NET configuration UI generated by Visual Studio.&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/admin.png" title="ASP.NET Configuration Console" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/admin.png" height="608" width="606"&gt; &lt;/p&gt;

  &lt;p&gt;The portable area approach would decouple the screens from the layout seen in this screenshot and allow the pages to reflect the layout of your website. This feature would be perfect for exposing the membership functionality to admins, power users or even just the development team.&lt;/p&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;12: Script-Based Post Backs&lt;/h3&gt;

  &lt;p&gt;On occasion when working with WebForms under the traditional post back model you may need to implement a JavaScript function that initiates a post back. Right now, the approach for executing this a hack at best. One the best ways I have seen to accomplish this is to add a LinkButton to the page and hide it from the user using CSS. Then you can view source on the page and use the __doPostBack call the LinkButton was using in your custom script – like I said &lt;i&gt;real&lt;/i&gt; hacky :)&lt;/p&gt;

  &lt;p&gt;It would make life much simpler for the times when this functionality is required to have a method off the Sys namespace (or wherever appropriate) that posts back a WebForm. This is how it could look:&lt;/p&gt;

  &lt;p&gt;&lt;img src="http://polymorphicpodcast.com/images/blog/simplicity/scriptpost.png" title="Script-based post backs" mce_src="http://polymorphicpodcast.com/images/blog/simplicity/scriptpost.png" height="244" width="491"&gt;&lt;/p&gt;

  &lt;p&gt;Passing a string into the function would tell the page which handler to map to in the page event lifecycle.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;So there you have it. These are some of my ideas about how to make ASP.NET and Visual Studio simpler to use. Now tell me, what are yours?&lt;/p&gt;
&lt;b&gt;&lt;/b&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7270602" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/visual+studio/default.aspx">visual studio</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/12/04/12-ways-to-simplify-asp-net-and-visual-studio.aspx</feedburner:origLink></item><item><title>nBuilder, Ugly Outfitters and VM Workshop</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/gVB1DNEsqR4/nbuilder-ugly-outfitters-and-vm-workshop.aspx</link><pubDate>Tue, 01 Dec 2009 20:26:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7268080</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7268080</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/12/01/nbuilder-ugly-outfitters-and-vm-workshop.aspx#comments</comments><description>&lt;p&gt;In this episode of the &lt;a href="http://polymorphicpodcast.com/" mce_href="http://polymorphicpodcast.com/"&gt;Polymorphic Podcast&lt;/a&gt; I interview Gareth Down of &lt;a href="http://nbuilder.org/"&gt;nBuilder&lt;/a&gt;. Writing demo applications, prototypes and tests just got a whole lot easier using the fluent interface of nBuilder to quickly generate test objects in .NET.&lt;/p&gt;
&lt;a href="http://polymorphicpodcast.com/shows/nbuilder/"&gt;&lt;img src="http://polymorphicpodcast.com/images/ListenBanner.png" title="Listen to the Show" alt="Listen to the Show" mce_src="http://polymorphicpodcast.com/images/ListenBanner.png" border="0" height="58" width="378"&gt;&lt;/a&gt; 

&lt;table border="0" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;th align="left"&gt;Full Speed:&lt;/th&gt;

      &lt;td&gt;&lt;a href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-12-01-nbuilder.mp3"&gt;download&lt;/a&gt;&lt;/td&gt;

      &lt;td&gt;&lt;object type="application/x-shockwave-flash" data="http://polymorphicpodcast.com/plugins/audio-player/player.swf" id="audioplayer1" height="24" width="290"&gt;     &lt;param name="movie" value="http://polymorphicpodcast.com/plugins/audio-player/player.swf"&gt;     &lt;param name="FlashVars" value="playerID=1&amp;amp;bg=0xE9E6DF&amp;amp;leftbg=0xEEEEEE&amp;amp;lefticon=0x666666&amp;amp;rightbg=0xCCCCCC&amp;amp;rightbghover=0x999999&amp;amp;righticon=0x666666&amp;amp;righticonhover=0xFFFFFF&amp;amp;text=0x666666&amp;amp;slider=0x666666&amp;amp;track=0xFFFFFF&amp;amp;border=0x666666&amp;amp;loader=0xCCCCCC&amp;amp;soundFile=http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-12-01-nbuilder.mp3"&gt;     &lt;param name="quality" value="high"&gt;     &lt;param name="wmode" value="transparent"&gt;     &lt;/object&gt;&lt;br&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;th align="left"&gt;Fast Version:&lt;/th&gt;

      &lt;td&gt;&lt;a href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-12-01-nbuilder_fast.mp3"&gt;download&lt;/a&gt;&lt;/td&gt;

      &lt;td&gt;&lt;object type="application/x-shockwave-flash" data="http://polymorphicpodcast.com/plugins/audio-player/player.swf" id="audioplayer1" height="24" width="290"&gt;     &lt;param name="movie" value="http://polymorphicpodcast.com/plugins/audio-player/player.swf"&gt;     &lt;param name="FlashVars" value="playerID=1&amp;amp;bg=0xE9E6DF&amp;amp;leftbg=0xEEEEEE&amp;amp;lefticon=0x666666&amp;amp;rightbg=0xCCCCCC&amp;amp;rightbghover=0x999999&amp;amp;righticon=0x666666&amp;amp;righticonhover=0xFFFFFF&amp;amp;text=0x666666&amp;amp;slider=0x666666&amp;amp;track=0xFFFFFF&amp;amp;border=0x666666&amp;amp;loader=0xCCCCCC&amp;amp;soundFile=http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-12-01-nbuilder_fast.mp3"&gt;     &lt;param name="quality" value="high"&gt;     &lt;param name="wmode" value="transparent"&gt;     &lt;/object&gt;&lt;br&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;h2&gt;Fast Feed Gets New Life&lt;/h2&gt;

&lt;p&gt;I would like to extend a huge thanks to &lt;a href="http://blog.syntaxc4.net/"&gt;Cory Fowler&lt;/a&gt; (&lt;a href="http://twitter.com/SyntaxC4"&gt;@SyntaxC4&lt;/a&gt;) for his contribution to the &lt;a href="http://feeds2.feedburner.com/PolymorphicPodcastFastFeed"&gt;Polymorphic Podcast Fast Feed&lt;/a&gt;. The Fast Feed is an RSS feed to versions of podcast episodes that are sped up and pitch corrected (no chipmunking here) so you can listen in a fraction of the time. Cory asked me on Twitter &lt;a href="http://twitter.com/SyntaxC4/status/5773195062"&gt;if I planned to convert the show’s archives&lt;/a&gt;. In a gesture of kindness to us all &lt;a href="http://twitter.com/SyntaxC4/status/5773254533"&gt;Cory volunteered to convert the entire back archives of the show&lt;/a&gt; into the “fast” format. Now that I have all the files, I’ll release two vintage shows a week until we catch up to present episodes – it’ll be a blast from the past!&lt;/p&gt;

&lt;p&gt;In all his spare time, Cory is also behind &lt;a href="http://blog.syntaxc4.net/?tag=/jtweetr"&gt;jTweetr&lt;/a&gt; – a jQuery interface for Twitter. Make sure to check out &lt;a href="http://blog.syntaxc4.net/"&gt;Cory’s blog&lt;/a&gt; and his posts on &lt;a href="http://blog.syntaxc4.net/?tag=/jtweetr"&gt;jTweetr&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;p&gt;I highlight a number of resources in the show. Here are the relevant links:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx"&gt;&lt;b&gt;Ugly Outfitters:&lt;/b&gt;&lt;/a&gt; ASP.NET AJAX, jQuery and Infragistics Drag and Drop Framework Mashup &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://polymorphicpodcast.com/vmworkshop"&gt;&lt;b&gt;VM Workshop&lt;/b&gt;&lt;/a&gt;: Reference application for working with MVVM and Presentation Model &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.infragistics.com/pixel8/media/p/201325.aspx"&gt;&lt;b&gt;Introducing 'Shazzam' with Walt Ritscher&lt;/b&gt;&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.infragistics.com/pixel8/media/p/201392.aspx"&gt;&lt;b&gt;Data Visualization in the Wild: Chart Analysis with Dr. Tobias Komischke&lt;/b&gt;&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://community.infragistics.com/pixel8/media/p/206488.aspx"&gt;&lt;b&gt;User Engaged Prototyping with Billy Hollis&lt;/b&gt;&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://jeffreypalermo.com/blog/windows-7-rsquo-s-solution-to-beta-software/"&gt;&lt;b&gt;Windows 7’s solution to beta software : XP Mode&lt;/b&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7268080" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Design+Patterns/default.aspx">Design Patterns</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Polymorphic+Podcast/default.aspx">Polymorphic Podcast</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/12/01/nbuilder-ugly-outfitters-and-vm-workshop.aspx</feedburner:origLink></item><item><title>Win Asus Netbook or NetAdvantage for .NET While You’re NotAtPDC!</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/n0WG-5GyB24/win-asus-netbook-or-netadvantage-for-net-while-you-re-notatpdc.aspx</link><pubDate>Mon, 16 Nov 2009 22:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7257088</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7257088</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/11/16/win-asus-netbook-or-netadvantage-for-net-while-you-re-notatpdc.aspx#comments</comments><description>&lt;p&gt;Even if you can't make it to PDC for the convention you deserve a a chance to win some cool prizes! &lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/16/win-asus-netbook-or-netadvantage-for-net-while-you-re-notatpdc.aspx" mce_href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/16/win-asus-netbook-or-netadvantage-for-net-while-you-re-notatpdc.aspx"&gt;Learn how you could win an Asus netbook or a license to NetAdvantage for .NET by following @infragistics and tweeting about a #NotAtPDC session!&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7257088" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Community+News/default.aspx">Community News</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/11/16/win-asus-netbook-or-netadvantage-for-net-while-you-re-notatpdc.aspx</feedburner:origLink></item><item><title>Integrating Infragistics Drag &amp; Drop with jQuery and Microsoft Ajax Preview 6</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/1gIMn7huWRw/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx</link><pubDate>Tue, 10 Nov 2009 21:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7250872</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7250872</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx#comments</comments><description>&lt;h2&gt;The Concept&lt;/h2&gt;

&lt;p&gt;I created “&lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx" mce_href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx"&gt;Ugly Outfitters&lt;/a&gt;” to showcase the interaction between &lt;a href="http://www.infragistics.com/dotnet/netadvantage/aspnet/dragdrop.aspx#Overview" mce_href="http://www.infragistics.com/dotnet/netadvantage/aspnet/dragdrop.aspx#Overview"&gt;Infragistics Drag &amp;amp; Drop&lt;/a&gt;, &lt;a href="http://jquery.com/" mce_href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and &lt;a href="http://aspnet.codeplex.com/wikipage?title=AJAX&amp;amp;referringTitle=Home" mce_href="http://aspnet.codeplex.com/wikipage?title=AJAX&amp;amp;referringTitle=Home"&gt;Microsoft Ajax Preview 6&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Why Ugly Outfitters? Well, I decided that rather than just dragging around some bland icons on the screen why not attempt to inject a little bit of humor into the process. Like I said... attempt ;)&lt;/p&gt;

&lt;p&gt;If you want to jump right in take a look at this short video demonstrating the application with a quick overview of the code:&lt;/p&gt;

&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LUTAwKFybsc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/LUTAwKFybsc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" mce_src="http://www.youtube.com/v/LUTAwKFybsc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; Also available are &lt;a href="http://community.infragistics.com/aspnet/media/p/186691.aspx" mce_href="http://community.infragistics.com/aspnet/media/p/186691.aspx"&gt;higher quality versions of the video.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What follows is an excerpt of the discussion of what’s found in Ugly Outfitters. The best way to get acquainted with the details is always to &lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx#_download" mce_href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx#_download"&gt;download the code&lt;/a&gt; and review it’s design.&lt;/p&gt;

&lt;h2&gt;The Approach&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://media.infragistics.com/community/images/craigs/blog/2009-11-06/uo.gif" mce_src="http://media.infragistics.com/community/images/craigs/blog/2009-11-06/uo.gif" align="right" hspace="10" vspace="10"&gt;&lt;/p&gt;

&lt;p&gt;The page is constructed to have a list of shirts on the top of the page, a list of pants along the bottom and a large “outfit designer” area to preview combinations. Along with the coupling of the garment images, when an image is dropped on the page the garment title and description are updated.&lt;/p&gt;

&lt;p&gt;A typical approach of constructing a page like this is often to include a server-side repeater to generate the HTML required to list the shirt and pant images. Instead of explicitly rendering HTML for each list item, this page uses a series of client templates to create the thumb nail lists. The data for the page is served to the client in JSON arrays, rather than being embedded into blocks of HTML. Using the JSON arrays make coding interaction on the page easy as all the required data is available in a programmatically accessible format.&lt;/p&gt;

&lt;h3&gt;Variations&lt;/h3&gt;

&lt;p&gt;The sample is available in three different variations. The first sample uses the ASP.NET ScriptManager control to bring in the required scripts and leverages the code behind to render the JSON array to the page. &lt;/p&gt;

&lt;p&gt;The second sample is exactly the same as the first except instead of using a ScriptManager, the JavaScript files are loaded into the page using the Microsoft Ajax Preview 6 Script Loader control. The Script Loader is used to bring in ASP.NET AJAX, the Client Templates, jQuery and the Infragistics Drag and Drop Framework.&lt;/p&gt;

&lt;p&gt;The final variation extends the second sample, but removes the dependence on the code behind and is a static HTML file. Data is injected into the page by referencing a dynamic JavaScript file. This script file is added as a custom script and then loaded into the page using the Script Loader.&lt;/p&gt;

&lt;p&gt;To read the full write-up including code samples, please check out: &lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx#_jumpStart" mce_href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx#_jumpStart"&gt;Integrating Infragistics Drag &amp;amp; Drop with jQuery and Microsoft Ajax Preview 6&lt;/a&gt; on my Infragistics blog.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7250872" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/NetAdvantage/default.aspx">NetAdvantage</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Infragistics/default.aspx">Infragistics</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/11/10/integrating-infragistics-drag-amp-drop-with-jquery-and-microsoft-ajax-preview-6.aspx</feedburner:origLink></item><item><title>Serialize and Deserialize JSON</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/3rAKSzpqTpY/serialize-and-deserialize-json.aspx</link><pubDate>Fri, 06 Nov 2009 16:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7248382</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7248382</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/11/06/serialize-and-deserialize-json.aspx#comments</comments><description>
&lt;p&gt;On one of the projects I am working on I needed a way to work get the JSON string generated from some sort of serialization process. If you are working Ajax or MVC controller actions, this work is done for you automatically, but I wanted the string all by itself. After some searching I ran across this article &lt;a href="http://msdn.microsoft.com/en-us/library/bb412179.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb412179.aspx"&gt;How to: Serialize and Deserialize JSON Data&lt;/a&gt;. The article is great, and gave me everything I needed to know, but I thought I would make it a little cleaner and wrap it all up in a class.&lt;/p&gt;

&lt;p&gt;Below is the a generic class that will serialize and deserialize JSON:&lt;/p&gt;

&lt;pre style="border: 1px solid rgb(204, 204, 204); padding: 10px; background-color: rgb(238, 238, 238); font-family: courier,courier new,sans-serif; font-size: 1.2em;"&gt;using System.IO;&lt;br&gt;using System.Runtime.Serialization.Json;&lt;br&gt;&lt;br&gt;public class JsonSerializer&lt;t&gt;&lt;br&gt;{&lt;br&gt;    public JsonSerializer() { }&lt;br&gt;&lt;br&gt;    public string Serialize(T instance)&lt;br&gt;    {&lt;br&gt;        using (MemoryStream stream = new MemoryStream())&lt;br&gt;        {&lt;br&gt;            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));&lt;br&gt;            ser.WriteObject(stream, instance);&lt;br&gt;            stream.Position = 0;&lt;br&gt;&lt;br&gt;            using (StreamReader rdr = new StreamReader(stream))&lt;br&gt;            {&lt;br&gt;                return rdr.ReadToEnd();&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    public T Deserialize(string json)&lt;br&gt;    {&lt;br&gt;        using (MemoryStream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(json)))&lt;br&gt;        {&lt;br&gt;            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));&lt;br&gt;            T result = (T)serializer.ReadObject(stream);&lt;br&gt;            return result;    &lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;/t&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: For a more robust solution, &lt;a href="http://twitter.com/jglozano/status/5482607550"&gt;Javier Lozano suggests&lt;/a&gt; checking out &lt;a href="http://www.codeplex.com/Json"&gt;Json.NET&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7248382" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/C_2300_/default.aspx">C#</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/11/06/serialize-and-deserialize-json.aspx</feedburner:origLink></item><item><title>VM Workshop: Model View ViewModel (MVVM) and the Presentation Model Pattern in 5 UI Platforms</title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/AB1eX7VYgSo/vm-workshop-model-view-viewmodel-mvvm-and-the-presentation-model-pattern-in-5-ui-platforms.aspx</link><pubDate>Tue, 03 Nov 2009 16:51:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245973</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7245973</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/11/03/vm-workshop-model-view-viewmodel-mvvm-and-the-presentation-model-pattern-in-5-ui-platforms.aspx#comments</comments><description>
&lt;p&gt;For some reason the family of design patterns that exist around the &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller" mce_href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;Model View Controller&lt;/a&gt; pattern seem to be an elusive band of characters. The first time I&amp;nbsp; encountered Model View Controller I studied the text hard trying to understand how the &lt;a href="http://en.wikipedia.org/wiki/Strategy_pattern" mce_href="http://en.wikipedia.org/wiki/Strategy_pattern"&gt;Strategy&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Observer_pattern" mce_href="http://en.wikipedia.org/wiki/Observer_pattern"&gt;Observer&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Composite_pattern" mce_href="http://en.wikipedia.org/wiki/Composite_pattern"&gt;Composite&lt;/a&gt; patterns worked together to accomplish some goal that – try as I might - remained fuzzy. Somehow I have a sense that I am not alone.&lt;/p&gt;

&lt;p&gt;Model View Controller (MVC) is the parent pattern to a number of contemporary patterns that seem to find a natural home in Microsoft development. Variations of MVC have appeared over the years in an attempt to work within the construct of modern event-driven programming models. One of most distinguishing differences among MVC and some of the derivative patterns is that with MVC the controller executes first, where with the other patterns the view tends to execute first and then delegates control to some sort of “presentation” class.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://polymorphicpodcast.com/vmworkshop/patterns.gif" alt="VM Workshop Patterns" mce_src="http://polymorphicpodcast.com/vmworkshop/patterns.gif" height="382" width="550"&gt;&lt;/p&gt;

&lt;p&gt;A few years ago I did a series on Model View Presenter (MVP) [&lt;a href="http://polymorphicpodcast.com/shows/mv-patterns/" mce_href="http://polymorphicpodcast.com/shows/mv-patterns/"&gt;Design Patterns Bootcamp: Model View * Patterns&lt;/a&gt;] in an attempt to discuss how to completely abstract away the user interface layer. MVP proves to be an effective pattern, but can be confusing to some with the heavy use of interfaces and events.&lt;/p&gt;

&lt;p&gt;The recent popularity of XAML applications has brought focus to the &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx"&gt;Model View ViewModel&lt;/a&gt; (MVVM) pattern, which is technically a fine-tuned version of &lt;a href="http://martinfowler.com/eaaDev/PresentationModel.html" mce_href="http://martinfowler.com/eaaDev/PresentationModel.html"&gt;Presentation Model&lt;/a&gt; that &lt;a href="http://blogs.msdn.com/johngossman/archive/2005/10/11/479632.aspx" mce_href="http://blogs.msdn.com/johngossman/archive/2005/10/11/479632.aspx"&gt;takes advantage of .NET’s data binding framework&lt;/a&gt;. Further, the advent of ASP.NET MVC has created a strong push for some sort of presentation strategy into the realm of ASP.NET WebForms.&lt;/p&gt;

&lt;p&gt;So this history lesson is great, but how do you do you write the code to implement the patterns?&lt;/p&gt;

&lt;h2&gt;Introducing VM Workshop&lt;/h2&gt;

&lt;p&gt;The &lt;a href="http://polymorphicpodcast.com/vmworkshop" mce_href="http://polymorphicpodcast.com/vmworkshop"&gt;VM Workshop&lt;/a&gt; is a simple reference application demonstrating the Model View ViewModel and Presentation Model pattern in a number of different UI platforms.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://polymorphicpodcast.com/vmworkshop/" mce_href="http://polymorphicpodcast.com/vmworkshop/"&gt;&lt;img src="http://polymorphicpodcast.com/vmworkshop/logo.png" mce_src="http://polymorphicpodcast.com/vmworkshop/logo.png" align="right" border="0" height="227" hspace="15" vspace="15" width="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project includes examples in:&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;Silverlight &lt;/li&gt;

  
&lt;li&gt;WPF &lt;/li&gt;

  
&lt;li&gt;WebForms &lt;/li&gt;

  
&lt;li&gt;ASP.NET MVC &lt;/li&gt;

  
&lt;li&gt;Ajax &lt;/li&gt;

  
&lt;li&gt;WinForms &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…and as an &lt;a href="http://vmworkshop.codeplex.com/" mce_href="http://vmworkshop.codeplex.com/"&gt;open source project&lt;/a&gt;, you are invited to help add examples of how to deal with a myriad of different UI use cases!&lt;/p&gt;

&lt;p&gt;The purpose of the VM Workshop is to be a working programmer’s reference, not an exposition in pattern purity. Therefore you may see small details that may not fit the textbook definition of the patterns, but the point is to provide a template for effective pattern use. For instance there is an example in ASP.NET MVC is included in VM Workshop. Obviously the pattern being implemented is Model View Controller, but the construction of a “view model” class is still relevant in this context. While referring to ViewModel class in a ASP.NET application may be technically inappropriate, I use the term “view model” to interchangeably refer to a ViewModel or Presentation Model class for simplicity. &lt;/p&gt;

&lt;p&gt;I recently messaged &lt;a href="http://blogs.msdn.com/johngossman/" mce_href="http://blogs.msdn.com/johngossman/"&gt;John Gossman&lt;/a&gt;, arguably one of the most visible proponent of MVVM, to ask whether or not MVVM is exclusive to XMAL applications or if the pattern may be applied to any UI platform. John replied saying:&lt;/p&gt;

&lt;blockquote&gt;
 
&lt;p&gt;&lt;i&gt;I think the pattern is completely applicable to any UI technology.&amp;nbsp; There are some details around the use of commands and data-binding that tend to be XAML specific, so I tend to use MVVM for the XAML version of the pattern and to keep from having religious wars with Patterns zealots.&amp;nbsp; The more general pattern is called PresentationModel by Fowler.&amp;nbsp; OTOH, one of the nice things is if you design your Model and ViewModel’s correctly you should be able to reuse them between XAML-based and other UI technologies.&lt;/i&gt; &lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;VM Workshop is meant to be a learn-by-example project showcasing different styles of implementation.&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;Examples in C# and VB.NET&lt;/h3&gt;

&lt;p&gt;Often discussions surrounding design patterns tend to only be available in C#. In order to extend the conversation to as many developers as possible, I’ve include a VB.NET solution that operates in complete parity to the C# version. The only difference in the VB.NET version is that due to lack of lambda support some of the places &lt;a href="http://www.codeplex.com/AutoMapper" mce_href="http://www.codeplex.com/AutoMapper"&gt;AutoMapper&lt;/a&gt; is leveraged in the C# version are removed and objects are mapped manually. &lt;/p&gt;

&lt;h2&gt;A Grid, a Form and an Action&lt;/h2&gt;

&lt;p&gt;The initial example is provided for all the UI platforms. Each implementation features the same UI and workflow composition. First a grid is presented to the user:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://polymorphicpodcast.com/vmworkshop/grid.png" alt="Grid" mce_src="http://polymorphicpodcast.com/vmworkshop/grid.png" height="278" width="234"&gt;&lt;/p&gt;

&lt;p&gt;Upon selecting an individual item, an edit form becomes available allowing the user make changes to the item:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://polymorphicpodcast.com/vmworkshop/form.png" alt="Form" mce_src="http://polymorphicpodcast.com/vmworkshop/form.png" height="257" width="372"&gt;&lt;/p&gt;

&lt;blockquote&gt;
  
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; These screen shots here are taken from the WebForms sample, but the UI reflects the appropriate look for each of the respective UI technologies.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;Once changes are complete, and the ‘Save' button is pressed, the persistence operation is initiated. After persistence is complete, each implementation tells the UI to how to response respond to the action.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Please note that true persistence is not implemented in VM Workshop.&lt;/b&gt; In an effort to avoid using a database (which keeps the code more portable) persistence functions are simply stubbed out in the code. In the end, the project includes the same messages that would be sent among the application layers in any real-world application. &lt;/p&gt;

&lt;h2&gt;Minimizing Code in the View&lt;/h2&gt;

&lt;p&gt;The motivation for using these patterns is often creating a more testable user interface layer, decoupling your application from UI technologies or perhaps to promote better application composition. No matter what the motivation, the overarching goal is to remove application logic from the view layer. The examples in VM Workshop use a number of general concepts to achieve a thin view. &lt;/p&gt;

&lt;h3&gt;Lazy Loading&lt;/h3&gt;

&lt;p&gt;The grids are populated through a lazy loaded property on the view model class. This ensures that the request for data is restricted to only the times when the data wasn’t previously prepared. Another benefit is that a call to somehow ‘get stuff’ is not required. When the grid binds to the 'Products' property the property’s implementation knows where to get the data if it doesn’t have it.&lt;/p&gt;

&lt;h3&gt;Visibility Properties&lt;/h3&gt;

&lt;p&gt;Visibility properties (in XAML implementations) or boolean properties on the view model classes are used to control whether or not controls, messages or other UI elements appear to the user. Binding the state of these properties to the appropriate elements on the screen relieves the view of having to decide what is shown to the user and what is hidden.&lt;/p&gt;

&lt;h3&gt;No Logical Operations&lt;/h3&gt;

&lt;p&gt;While taking great care to remove all logical operations from the view, even seemingly benign tasks such as casting input into primitive types is delegated to the view model or some other class for execution. Even simple operations like type casting can quickly cascade into a series of business rules. Consider how convoluted validation scenarios can become when the application is expecting a currency value, but is one way or another served a string. While the validation does have UI implications, this type of logic is best handled in a lower level than the view.&lt;/p&gt;

&lt;h3&gt;Presentation Objects and Data Transfer Objects&lt;/h3&gt;

&lt;p&gt;The use of presentation objects or data transfer objects, or DTOs, (I tend to flip between terms depending on my mood) is used to accomplish at least two goals:&lt;/p&gt;

&lt;ol&gt;
  
&lt;li&gt;&lt;b&gt;Hide the domain model from the rest of the application.&lt;/b&gt; Concealing the full-fledged Products class from the view makes sure unnecessary pressure is not exerted on the model to mutate at the whim of the view. 
    &lt;br&gt;&lt;br&gt;&lt;/li&gt;

  
&lt;li&gt;&lt;b&gt;Make custom mapping the responsibility of the type.&lt;/b&gt; The presentation object’s job is to prepare the data coming from the domain model into a form that is natural to the view. This mapping or conversion responsibility is best placed in the hands of the presentation object and not within the procedure of an operation. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Get Acquainted&lt;/h2&gt;

&lt;p&gt;Check out the video that will get you oriented with VM Workshop:&lt;/p&gt;

&lt;p&gt;
&lt;object height="344" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/zXIzIzbO7pM&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="allowscriptaccess" value="always"&gt;
&lt;embed src="http://www.youtube.com/v/zXIzIzbO7pM&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" mce_src="http://www.youtube.com/v/zXIzIzbO7pM&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/object&gt;
&lt;/p&gt;

&lt;h2&gt;Get Involved&lt;/h2&gt;

&lt;p&gt;The code for &lt;a href="http://vmworkshop.codeplex.com" mce_href="http://vmworkshop.codeplex.com"&gt;VM Workshop is available on CodePlex&lt;/a&gt; and you are encouraged to submit your implementations into the workshop!&lt;/p&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;p&gt;VM Workshop uses &lt;a href="http://nbuilder.org/" mce_href="http://nbuilder.org/"&gt;nBuilder&lt;/a&gt; create data objects and &lt;a href="http://www.codeplex.com/AutoMapper" mce_href="http://www.codeplex.com/AutoMapper"&gt;AutoMapper&lt;/a&gt; for DTO to domain object mapping.&lt;/p&gt;

&lt;h2&gt;Thanks&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;a href="http://infragistics.com/" mce_href="http://infragistics.com/"&gt;Infragistics&lt;/a&gt; for providing the time to develop the VM Workshop.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245973" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Design+Patterns/default.aspx">Design Patterns</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/MVC/default.aspx">MVC</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/windows+forms/default.aspx">windows forms</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/MVVM/default.aspx">MVVM</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/11/03/vm-workshop-model-view-viewmodel-mvvm-and-the-presentation-model-pattern-in-5-ui-platforms.aspx</feedburner:origLink></item><item><title>ASP.NET AJAX Preview 6 with Stephen Walther </title><link>http://feedproxy.google.com/~r/PolymorphicPodcastBlog/~3/bgQepCVh1bU/asp-net-ajax-preview-6-with-stephen-walther.aspx</link><pubDate>Mon, 02 Nov 2009 23:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245521</guid><dc:creator>craigshoemaker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/craigshoemaker/rsscomments.aspx?PostID=7245521</wfw:commentRss><comments>http://weblogs.asp.net/craigshoemaker/archive/2009/11/02/asp-net-ajax-preview-6-with-stephen-walther.aspx#comments</comments><description>
&lt;p&gt;&lt;a href="http://stephenwalther.com/blog/"&gt;Stephen Walther&lt;/a&gt;, Microsoft Product Manager for &lt;a href="http://asp.net/ajax"&gt;ASP.NET AJAX&lt;/a&gt;, joins the show to discuss the recent advancements in the AJAX toolset found in Preview 6. Listen or download below!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://polymorphicpodcast.com/shows/ajaxpreview6/" mce_href="http://polymorphicpodcast.com/shows/ajaxpreview6/"&gt;&lt;img src="http://polymorphicpodcast.com/images/ListenBanner.png" title="Listen to the Show" alt="Listen to the Show" mce_src="http://polymorphicpodcast.com/images/ListenBanner.png" border="0" height="58" width="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;table border="0" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;
    
&lt;tr&gt;
      &lt;th align="left"&gt;Full Speed:&lt;/th&gt;
      
&lt;td&gt;&lt;a href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-10-26-ajaxpreview6.mp3"&gt;download&lt;/a&gt;&lt;/td&gt;

      
&lt;td&gt;
&lt;object type="application/x-shockwave-flash" data="http://polymorphicpodcast.com/plugins/audio-player/player.swf" id="audioplayer1" height="24" width="290"&gt;     
&lt;param name="movie" value="http://polymorphicpodcast.com/plugins/audio-player/player.swf"&gt;     
&lt;param name="FlashVars" value="playerID=1&amp;amp;bg=0xE9E6DF&amp;amp;leftbg=0xEEEEEE&amp;amp;lefticon=0x666666&amp;amp;rightbg=0xCCCCCC&amp;amp;rightbghover=0x999999&amp;amp;righticon=0x666666&amp;amp;righticonhover=0xFFFFFF&amp;amp;text=0x666666&amp;amp;slider=0x666666&amp;amp;track=0xFFFFFF&amp;amp;border=0x666666&amp;amp;loader=0xCCCCCC&amp;amp;soundFile=http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-10-26-ajaxpreview6.mp3"&gt;     
&lt;param name="quality" value="high"&gt;     
&lt;param name="wmode" value="transparent"&gt;     &lt;/object&gt;
&lt;/td&gt;
    &lt;/tr&gt;

    
&lt;tr&gt;
      &lt;th align="left"&gt;Fast Version:&lt;/th&gt;
      
&lt;td&gt;&lt;a href="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-10-26-ajaxpreview6_fast.mp3"&gt;download&lt;/a&gt;&lt;/td&gt;

      
&lt;td&gt;
&lt;object type="application/x-shockwave-flash" data="http://polymorphicpodcast.com/plugins/audio-player/player.swf" id="audioplayer1" height="24" width="290"&gt;     
&lt;param name="movie" value="http://polymorphicpodcast.com/plugins/audio-player/player.swf"&gt;     
&lt;param name="FlashVars" value="playerID=1&amp;amp;bg=0xE9E6DF&amp;amp;leftbg=0xEEEEEE&amp;amp;lefticon=0x666666&amp;amp;rightbg=0xCCCCCC&amp;amp;rightbghover=0x999999&amp;amp;righticon=0x666666&amp;amp;righticonhover=0xFFFFFF&amp;amp;text=0x666666&amp;amp;slider=0x666666&amp;amp;track=0xFFFFFF&amp;amp;border=0x666666&amp;amp;loader=0xCCCCCC&amp;amp;soundFile=http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-10-26-ajaxpreview6_fast.mp3"&gt;     
&lt;param name="quality" value="high"&gt;     
&lt;param name="wmode" value="transparent"&gt;     &lt;/object&gt;
&lt;/td&gt;

    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Just about all the details discussed in our conversation are available from the following links:&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx"&gt;Announcing Microsoft Ajax Library (Preview 6) and the Microsoft Ajax Minifier&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx"&gt;Entirely unobtrusive and imperative templates with Microsoft Ajax Library Preview 6&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488"&gt;CodePlex Site&lt;/a&gt; &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://jtemplates.tpython.com/"&gt;jTemplates&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;A Changed Landscape: ASP.NET AJAX&lt;/h3&gt;

&lt;p&gt;If you are in the Southern California area and would like to see some of the latest AJAX bits in action I am giving my talk to the following user groups: &lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;&lt;a href="http://www.iedotnetug.org/UG/"&gt;Inland Empire .NET User Group&lt;/a&gt; 12/8/09 &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://www.ocdotnet.org/"&gt;Orange County .NET User Group&lt;/a&gt; 1/12/10 &lt;/li&gt;

  
&lt;li&gt;&lt;a href="http://www.ladotnet.org/default.asp"&gt;LA.NET User Group&lt;/a&gt; 2/1/10 &lt;/li&gt;

&lt;/ul&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245521" width="1" height="1"&gt;</description><enclosure url="http://polymorphicpodcast.com/podcast/files/PolymorphicPodcast-2009-10-26-ajaxpreview6.mp3" length="37611422" type="audio/mpeg" /><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/craigshoemaker/archive/tags/Polymorphic+Podcast/default.aspx">Polymorphic Podcast</category><feedburner:origLink>http://weblogs.asp.net/craigshoemaker/archive/2009/11/02/asp-net-ajax-preview-6-with-stephen-walther.aspx</feedburner:origLink></item></channel></rss>
