<?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>.NETicated</title><link>http://www.platinumbay.com/blogs/dotneticated/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/dotneticated" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Team Build Property Reference Guide</title><link>http://feedproxy.google.com/~r/dotneticated/~3/4NpJg3oLS3s/team-build-property-reference-guide.aspx</link><pubDate>Mon, 12 Oct 2009 02:46:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:892</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/10/11/team-build-property-reference-guide.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/TeamBuildProperty_130F6/TeamBuildPropertyTargetReference.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/TeamBuildProperty_130F6/TeamBuildPropertyTargetReference_thumb.png" title="TeamBuildPropertyTargetReference" style="border:0px none;margin:0px 0px 0px 20px;display:inline;" alt="TeamBuildPropertyTargetReference" align="right" border="0" height="451" width="192" /&gt;&lt;/a&gt;I’ve been working quite a bit with Team Build lately, and overriding properties is a method of customization I’ve found quite useful in certain scenarios. Along the way, I found Aaron Hallberg’s excellent &lt;a href="http://blogs.msdn.com/aaronhallberg/archive/2008/02/12/team-build-2008-property-reference.aspx" title="Team Build 2008 Property Reference by Aaron Hallberg" target="_blank"&gt;Team Build 2008 Property Reference&lt;/a&gt; blog post, but it didn’t show me where the properties were referenced. In fact, there isn’t an easy way to determine where any particular Property is being used or set other than reading through the 1,500 lines in the Microsoft.TeamFoundation.Build.targets file. I decided to spend a few hours, read through the file myself, and compile a chart of each Property, what Target it is referenced by, and how it is referenced.&lt;/p&gt;  &lt;p&gt;Hopefully the chart is self-explanatory, but here’s some tips:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Target names are along the horizontal axis&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Base represents the root of the Targets file where global Properties are set&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Property names are along the vertical axis&lt;/li&gt;    &lt;li&gt;Legend&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Set: The Property is Set inside the Target. In the case of &lt;/li&gt;      &lt;li&gt;Used: The Property is used inside the Target&lt;/li&gt;      &lt;li&gt;Condition: The Target or a contained Task references the Property in a condition&lt;/li&gt;      &lt;li&gt;Error If Exists: Team Build will throw an exception if the Property is set, or not set, under the right conditions&lt;/li&gt;      &lt;li&gt;Null Error: Team Build will throw an exception if the Property is null&lt;/li&gt;      &lt;li&gt;Depends On: The target has a DependsOn for the Property. The Property contains a semi-colon delimited list of Target names&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;I do not claim the chart to be 100% without error, so verify before you use it. Please send any updates or corrections to me.&lt;/p&gt;  &lt;p&gt; As a side note, if you are working with Team Build, Aaron Hallberg’s &lt;a href="http://blogs.msdn.com/aaronhallberg" title="MSDN - Aaron Hallberg" target="_blank"&gt;blog&lt;/a&gt; is choked full of Team Build goodness.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=892" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4NpJg3oLS3s:aO7KijkaJUE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4NpJg3oLS3s:aO7KijkaJUE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4NpJg3oLS3s:aO7KijkaJUE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4NpJg3oLS3s:aO7KijkaJUE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/4NpJg3oLS3s" height="1" width="1"/&gt;</description><enclosure url="http://www.platinumbay.com/blogs/dotneticated/attachment/892.ashx" length="27893" type="application/vnd.openxmlformats-officedocument.spre" /><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/TFS/default.aspx">TFS</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Team+Foundation/default.aspx">Team Foundation</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Team+Build/default.aspx">Team Build</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/10/11/team-build-property-reference-guide.aspx</feedburner:origLink></item><item><title>Neat Visual Studio Test Options</title><link>http://feedproxy.google.com/~r/dotneticated/~3/LBvpCENo1Pw/neat-visual-studio-test-options.aspx</link><pubDate>Fri, 25 Sep 2009 04:17:50 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:881</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/09/25/neat-visual-studio-test-options.aspx#comments</comments><description>&lt;p&gt;Digging around in Tools &amp;gt; Options today to find the answer to an inquiry I received, I found some stuff I didn’t know existed. If you work with Visual Studio Test Projects, you will want to know about these options. The Test Tools options are found in Tools &amp;gt; Options &amp;gt; Test Tools.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Test Execution Options&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The original question I received was from someone asking how to reduce the number of test results that Visual Studio kept around after test runs. The answer lies in the Test Execution options under Test Result Management. There is an option there labeled “Limit number of old Test Results to.” By default, this value is set to 25. While 25 may be an ideal setting if you are running a multitude of test runs and want to compare results, for most of us this is overkill. Personally I set it to three, and that tells Visual Studio to clean up results older than three runs.&lt;/p&gt;  &lt;p&gt;Also take note of the checkbox below it labeled “Double-clicking a Failed or Inconclusive unit test result displays the point of failure in the test.” When you double-click on a failed or inconclusive unit test result, you will no longer be taken to a test result report. Rather, you will be taken to the line of code that failed in the test.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/VisualStudioTestOptions_11FB7/image.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="367" alt="image" src="http://www.platinumbay.com/blogs/postimages/VisualStudioTestOptions_11FB7/image_thumb.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Test Project Options&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I have always been frustrated when test projects were created with the “About Test Projects” introduction file and the Manual Test. The next step after creation for me was always to delete these items. In digging around today, I discovered that what files are created with test projects is configurable. Under the Test Project node, you will find a two side-by-side list boxes at the bottom of the settings pane. The left side allows you to select a language-specific test project, and the right side contains checkboxes allowing you to specify which files are included by default.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/VisualStudioTestOptions_11FB7/image_3.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="367" alt="image" src="http://www.platinumbay.com/blogs/postimages/VisualStudioTestOptions_11FB7/image_thumb_3.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m sure you will find these tips as useful as I have, I know they’ll be making their way into my Visual Studio Tips and Tricks talk.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=881" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=LBvpCENo1Pw:9D0VfS8B_CM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=LBvpCENo1Pw:9D0VfS8B_CM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=LBvpCENo1Pw:9D0VfS8B_CM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=LBvpCENo1Pw:9D0VfS8B_CM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/LBvpCENo1Pw" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tips/default.aspx">Tips</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MSTest/default.aspx">MSTest</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/09/25/neat-visual-studio-test-options.aspx</feedburner:origLink></item><item><title>jQuery and MVC: JSON Form Submission</title><link>http://feedproxy.google.com/~r/dotneticated/~3/u57PuZ-1xWY/jquery-and-mvc-json-form-submission.aspx</link><pubDate>Tue, 01 Sep 2009 02:33:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:865</guid><dc:creator>Steve</dc:creator><slash:comments>8</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/31/jquery-and-mvc-json-form-submission.aspx#comments</comments><description>&lt;p&gt;In my last two posts (&lt;a href="http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/jquery-and-mvc-json.aspx" target="_blank"&gt;jQuery and MVC: JSON&lt;/a&gt; and &lt;a href="http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/29/favorite-image-icons-with-jquery-and-mvc.aspx" target="_blank"&gt;Favorite Image Icons with jQuery and MVC&lt;/a&gt;) I covered some basics of jQuery’s AJAX functionality to improve user experience. One of the scenarios which may not seem particularly asynchronous friendly is form submission. Fortunately, jQuery provides for asynchronous post, and in JSON format too.&lt;/p&gt;  &lt;p&gt;The complete code to perform this is:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;form&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).submit(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(e) {&lt;br /&gt;    e.preventDefault();&lt;br /&gt;    $.post($(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).attr(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;), $(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).serialize(), &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:green;"&gt;// handle response&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;json&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;});&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;First, get a jQuery reference to the form element and add a submit event handler:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;form&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).submit(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(e) {&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Next, we need to cancel the form’s default behavior by using the &lt;font face="courier new,courier"&gt;preventDefault &lt;/font&gt;function:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;e.preventDefault();&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Next, and this is the cool part, we call the post method in jQuery. The post method takes four arguments: url, data, callback, and type. The first three should be familiar from the previous blog posts, but the last one is new. The type parameter specifies the type of data and accepts &amp;quot;xml&amp;quot;, &amp;quot;html&amp;quot;, &amp;quot;script&amp;quot;, &amp;quot;json&amp;quot;, &amp;quot;jsonp&amp;quot;, or &amp;quot;text&amp;quot;. The example above is using JSON.

&lt;p&gt;Rather than hard coding the url, it can be retrieved from the form element itself:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).attr(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And rather than manually pulling form fields into the data object, as the form may change, we can call jQuery’s &lt;font face="courier new,courier"&gt;serialize &lt;/font&gt;function on the form itself:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).serialize()&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, we can tie it all together with an MVC action. This example uses the Employee entity from the Northwind database. Since the identifier on the Employee entity is EmployeeID and not ID, &lt;font face="courier new,courier"&gt;id &lt;/font&gt;needs to be specified as an action parameter in order to retrieve the correct employee from the database.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;AcceptVerbs&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HttpVerbs&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Post)]&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Edit(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;id, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Employee &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;employee)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:green;"&gt;// do work&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ Data = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ Success = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;true &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;} };&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;One common scenario for this functionality is to provide asynchronous searching within a page. Even asynchronous form submits are possible with jQuery, making your arsenal that much more powerful.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=865" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u57PuZ-1xWY:8Qa6Rz2nHb8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u57PuZ-1xWY:8Qa6Rz2nHb8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u57PuZ-1xWY:8Qa6Rz2nHb8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u57PuZ-1xWY:8Qa6Rz2nHb8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/u57PuZ-1xWY" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/JSON/default.aspx">JSON</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/31/jquery-and-mvc-json-form-submission.aspx</feedburner:origLink></item><item><title>Favorite Image Icons with jQuery and MVC</title><link>http://feedproxy.google.com/~r/dotneticated/~3/pSVBn6uTd2g/favorite-image-icons-with-jquery-and-mvc.aspx</link><pubDate>Sun, 30 Aug 2009 00:01:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:855</guid><dc:creator>Steve</dc:creator><slash:comments>6</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/29/favorite-image-icons-with-jquery-and-mvc.aspx#comments</comments><description>&lt;p&gt;User experience, that’s the name of the game these days. Green screens and console applications are (hopefully) becoming a thing of the past. In the web world, this means a more fluid and asynchronous experience. In my &lt;a href="http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/jquery-and-mvc-json.aspx" target="_blank"&gt;last post&lt;/a&gt;, I gave a quick introduction to using jQuery and MVC to perform asynchronous requests to the browser. In this post, I will expand on that topic and show how to build a favorite image icon.&lt;/p&gt;  &lt;p&gt;The concept is pretty simple. For example, in the Twitter web UI, an empty star image appears on the right side of a tweet if you mouse over it.If the star is clicked, the icon changes to a flashing dot, and then to a yellow star indicating that the tweet has been favorited. It’s a neat, asynchronous effect, and it’s fairly simple to achieve.&lt;/p&gt;  &lt;p&gt;First, we need three images. Here are the images that Twitter uses:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/FavoriteImageIconswithjQueryandMVC_F909/icon_throbber.gif"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/FavoriteImageIconswithjQueryandMVC_F909/icon_throbber_thumb.gif" title="" style="border:0px none;display:inline;" alt="" width="16" border="0" height="16" /&gt;&lt;/a&gt; &lt;a href="http://www.platinumbay.com/blogs/postimages/FavoriteImageIconswithjQueryandMVC_F909/icon_star_empty.gif"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/FavoriteImageIconswithjQueryandMVC_F909/icon_star_empty_thumb.gif" title="" style="border:0px none;display:inline;" alt="" width="16" border="0" height="16" /&gt;&lt;/a&gt; &lt;a href="http://www.platinumbay.com/blogs/postimages/FavoriteImageIconswithjQueryandMVC_F909/icon_star_full.gif"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/FavoriteImageIconswithjQueryandMVC_F909/icon_star_full_thumb.gif" title="" style="border:0px none;display:inline;" alt="" width="16" border="0" height="16" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next, a CSS style is defined for the off, on, and loading states. The purpose of each style is to allow style switching to not only change the picture, but also to allow the state to be determined through the style class assigned.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.favimgoff&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.favimgon&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.imgload&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;width&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;16px&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;height&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;16px&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;border&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;0px&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;background-repeat&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;no-repeat&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.favimgoff &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;background-image&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;url(images/icon_star_empty.gif)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; }&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.favimgon &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;background-image&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;url(images/icon_star_full.gif)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; }&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.imgload &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;background-image&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;url(images/icon_throbber.gif)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;; }&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;On the MVC side, an action is needed to handle the server processing.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;SetOrRemoveUserFavorite(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;favoriteId)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:green;"&gt;// do work here, and set SetOn to the proper state&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result.Data = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ Success = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;true&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, SetOn = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;true &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, on the client side, add an image tag with the class attribute and id set. The image is set to a one pixel transparent gif otherwise certain browsers may not render the background image.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;img &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;class&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&amp;quot;favimgoff&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;src&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;= Url.Content(&amp;quot;~/Content/images/spacer.gif&amp;quot;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;id&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&amp;quot;1&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, jQuery on the client side takes care of the tying it all together:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;.favimgoff, .favimgon&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).click(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;() {&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$favimg = $(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;($favimg.attr(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;imgload&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) {&lt;br /&gt;        $favimg.removeClass().addClass(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;imgload&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;        $.getJSON(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;&amp;lt;%= Url.Action(&amp;quot;SetOrRemoveUserFavorite&amp;quot;, &amp;quot;Services&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, {&lt;br /&gt;            favoriteId: $favimg.attr(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;        }, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json.Success) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json.SetOn) {&lt;br /&gt;                    $favimg.removeClass().addClass(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;favimgon&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;                } &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;                    $favimg.removeClass().addClass(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;favimgoff&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;                alert(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;Favorite could not be set. Please refresh the page and try again.&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;});&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Let’s step through the jQuery script. First, define the click event handler for both classes, and get a reference to the image clicked:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;.favimgoff, .favimgon&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;).click(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;() {&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$favimg = $(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, to avoid any duplicate action taken while the process is run, make sure the image isn’t in the loading state. This is necessary because jQuery will still have an event reference to the original image even when the class changes from the original two classes of on or off.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;($favimg.attr(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;imgload&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) {&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, remove any existing class and add the loading class so the user gets feedback that their action is being processed:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$favimg.removeClass().addClass(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;imgload&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Then, make a server call to the action defined, and pass the id of the item as a parameter to the action:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$.getJSON(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;&amp;lt;%= Url.Action(&amp;quot;SetOrRemoveUserFavorite&amp;quot;, &amp;quot;Services&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, {&lt;br /&gt;    favoriteId: $favimg.attr(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;}, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json.Success) {&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, based on the &lt;font face="courier new,courier"&gt;SetOn &lt;/font&gt;value returned from the server call, remove the loading class and set the appropriate class:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json.SetOn) {&lt;br /&gt;    $favimg.removeClass().addClass(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;favimgon&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;} &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;    $favimg.removeClass().addClass(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;favimgoff&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;If by chance the server call fails and &lt;font face="courier new,courier"&gt;Success &lt;/font&gt;is false, alert the user:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;alert(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;Favorite could not be set. Please refresh the page and try again.&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;That’s it. Utilizing the baked-in goodness of jQuery and ASP.NET MVC, providing a rich, asynchronous user experience doesn’t have to be complex.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=855" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=pSVBn6uTd2g:GL1bFZivKWk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=pSVBn6uTd2g:GL1bFZivKWk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=pSVBn6uTd2g:GL1bFZivKWk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=pSVBn6uTd2g:GL1bFZivKWk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/pSVBn6uTd2g" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/JSON/default.aspx">JSON</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/29/favorite-image-icons-with-jquery-and-mvc.aspx</feedburner:origLink></item><item><title>jQuery and MVC: JSON</title><link>http://feedproxy.google.com/~r/dotneticated/~3/dP1hG7KP3b0/jquery-and-mvc-json.aspx</link><pubDate>Fri, 28 Aug 2009 23:09:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:852</guid><dc:creator>Steve</dc:creator><slash:comments>4</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/jquery-and-mvc-json.aspx#comments</comments><description>&lt;p&gt;I strongly dislike synchronous browser requests: the request has to be sent to the server, server action is performed, a server response is received, and the page is re-rendered which usually involves reloading images, style sheets, JavaScript files, etc. It takes time, sends an awful lot of traffic across the wire, and it doesn’t provide for the best user experience. In some scenarios this makes sense, but in most cases I find it to be an annoyance.&lt;/p&gt;  &lt;p&gt;Enter jQuery to the rescue. jQuery is the most exciting innovation to happen to JavaScript since, well, maybe JavaScript itself. One of the jQuery features I enjoy the most is the AJAX functionality which allows jQuery to talk to the server asynchronously, or behind the scenes.&lt;/p&gt;  &lt;p&gt;I personally like to use the JSON (JavaScript Object Notion) format, which is lighter-weight than XML. Using jQuery, a JSON GET request is written as:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$.getJSON(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;[url]&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, { [parameters] }, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:green;"&gt;// callback function code&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;});&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Let’s say I want to perform an asynchronous search in my web page for people names without having to reload the page. In MVC, I need an action to handle the request:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public class &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;SearchController &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Controller&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] peopleNames = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Bob&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Steve&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Joe&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Frank&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Lou&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Search(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;q)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;results = peopleNames.Where(n =&amp;gt; n.Contains(q));&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(results.Count() &amp;gt; 0)&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; { Data = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ Success = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;true&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, Results = results } };&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else&lt;br /&gt;            return new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;JsonResult&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; { Data = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{ Success = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;false &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;} };&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The first thing to notice is the built-in &lt;font face="courier new,courier"&gt;JsonResult &lt;/font&gt;type on the Search action. MVC understands and is able to handle JSON data. Simply return a &lt;font face="courier new,courier"&gt;JsonResult &lt;/font&gt;object and populate the &lt;font face="courier new,courier"&gt;Data &lt;/font&gt;property with the data to be returned. The serialization of that data is handled under the covers.&lt;/p&gt;

&lt;p&gt;Back in the MVC View, call &lt;font face="courier new,courier"&gt;getJSON &lt;/font&gt;to make a request to the action and handle the response:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;$.getJSON(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;&amp;lt;%= Url.Action(&amp;quot;Search&amp;quot;, &amp;quot;Search&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, { q: $(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;#39;input#search&amp;#39;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) }, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;function&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(json.Success) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:green;"&gt;// results found&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:green;"&gt;// nothing found&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;br /&gt;});&lt;/span&gt;&lt;/pre&gt;
Note that &lt;font face="courier new,courier"&gt;Url.Action&lt;/font&gt; is used to get the virtual url. &lt;font face="courier new,courier"&gt;Url.Action&lt;/font&gt; and &lt;font face="courier new,courier"&gt;Url.Content&lt;/font&gt; are great ways to handle relative paths. Next, the search query is passed from an input field with an ID of search. And finally, the callback is handled. jQuery handles the deserialization under the covers, and the values can be handled as simple properties.

&lt;p&gt;The introduction of ASP.NET MVC and jQuery make asynchronous calls very quick and easy, and help to provide the end user with a better experience. In future posts, we’ll look at more specific examples of utilizing jQuery and MVC to provide a better user experience.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=852" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=dP1hG7KP3b0:-JvjXAK9i7U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=dP1hG7KP3b0:-JvjXAK9i7U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=dP1hG7KP3b0:-JvjXAK9i7U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=dP1hG7KP3b0:-JvjXAK9i7U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/dP1hG7KP3b0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/JSON/default.aspx">JSON</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/jquery-and-mvc-json.aspx</feedburner:origLink></item><item><title>Reflection-Based Performance Analysis</title><link>http://feedproxy.google.com/~r/dotneticated/~3/j9WK0fAf4lM/reflection-based-performance-analysis.aspx</link><pubDate>Fri, 28 Aug 2009 08:51:04 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:847</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/reflection-based-performance-analysis.aspx#comments</comments><description>&lt;p&gt;Back in 2007, I took some SharePoint training from Todd Bleaker (MVP, owner of MindSharp, and SharePoint guru). At one point he posed a question about the performance of the following methods:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionOne()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;str = &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;str;
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionTwo()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;str;
    str = &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;str;
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionThree()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;str = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;null&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
    str = &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;str;
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionFour()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;I took the challenge and wrote the above methods. Then to evaluate the probable performance I compiled the code and opened the resulting assembly in Reflector. Here is the Reflector output:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionOne()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionTwo()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionThree()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OptionFour()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;You may notice that all the methods appear the same. What happened? Compiler optimization? To find out I checked the IL, shown below:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;"&gt;.method public hidebysig instance string OptionOne() cil managed
{
    .maxstack 1
    .locals init (
        [0] string str,
        [1] string CS$1$0000)
    L_0000: nop 
    L_0001: ldstr &amp;quot;Hello World&amp;quot;
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: stloc.1 
    L_0009: br.s L_000b
    L_000b: ldloc.1 
    L_000c: ret 
}

.method public hidebysig instance string OptionTwo() cil managed
{
    .maxstack 1
    .locals init (
        [0] string str,
        [1] string CS$1$0000)
    L_0000: nop 
    L_0001: ldstr &amp;quot;Hello World&amp;quot;
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: stloc.1 
    L_0009: br.s L_000b
    L_000b: ldloc.1 
    L_000c: ret 
}

.method public hidebysig instance string OptionThree() cil managed
{
    .maxstack 1
    .locals init (
        [0] string str,
        [1] string CS$1$0000)
    L_0000: nop 
    L_0001: ldnull 
    L_0002: stloc.0 
    L_0003: ldstr &amp;quot;Hello World&amp;quot;
    L_0008: stloc.0 
    L_0009: ldloc.0 
    L_000a: stloc.1 
    L_000b: br.s L_000d
    L_000d: ldloc.1 
    L_000e: ret 
}

.method public hidebysig instance string OptionFour() cil managed
{
    .maxstack 1
    .locals init (
        [0] string CS$1$0000)
    L_0000: nop 
    L_0001: ldstr &amp;quot;Hello World&amp;quot;
    L_0006: stloc.0 
    L_0007: br.s L_0009
    L_0009: ldloc.0 
    L_000a: ret 
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;What is really happening is that Reflector is making a best guess optimization as to what the original code looked like. We can clearly see in the IL that OptionFour is probably the most performant, and OptionThree is probably the least. This is because OptionThree is loading a null and storing it in local 1, then loading the string and storing it in the same location, making the first load unnecessary.&lt;/p&gt;

&lt;p&gt;Reflector can be a great tool to use for analyzing possible performance, as well as debugging assemblies. If you don’t have it, download it today: &lt;a href="http://www.red-gate.com/products/reflector/"&gt;www.red-gate.com/products/reflector/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=847" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=j9WK0fAf4lM:YAaPYr6MpOU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=j9WK0fAf4lM:YAaPYr6MpOU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=j9WK0fAf4lM:YAaPYr6MpOU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=j9WK0fAf4lM:YAaPYr6MpOU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/j9WK0fAf4lM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Reflector/default.aspx">Reflector</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/reflection-based-performance-analysis.aspx</feedburner:origLink></item><item><title>Running T4 Templates with MSBuild</title><link>http://feedproxy.google.com/~r/dotneticated/~3/SgxfTwr5Rbo/running-t4-templates-with-msbuild.aspx</link><pubDate>Fri, 28 Aug 2009 07:55:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:846</guid><dc:creator>Steve</dc:creator><slash:comments>5</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/running-t4-templates-with-msbuild.aspx#comments</comments><description>&lt;p&gt;If you haven’t explored T4 yet, you’re missing one of Visual Studio’s best, and best kept, secrets. T4, which stands for Text Templating Transformation Toolkit, is code generation built right into Visual Studio 2008. It is also available in Visual Studio 2005 if you install the Visual Studio SDK. It is a great feature that I use quite frequently to automate repetitive tasks.&lt;/p&gt;  &lt;p&gt;T4 template execution only occurs though when the template file is open in the editor and saved. In other words, template execution does not occur when you type &lt;font face="courier new,courier"&gt;Ctrl+B&lt;/font&gt; to build the project. There are scenarios however where execution of the templates at every build is the desired behavior.&lt;/p&gt;  &lt;p&gt;I did find several custom MSBuild tasks to perform this behavior, but I wanted to avoid additional assembly references. Instead, the following custom MSBuild target was created to address this.&lt;/p&gt;  &lt;p&gt;First and foremost, a .targets file is created in the MSBuild directory (%systemdrive%:\Windows\Microsoft.NET\Framework\v3.5):&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;xml &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;version&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;1.0&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;encoding&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;utf-8&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Project &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Target &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;Name&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;ExecuteT4Templates&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;ItemGroup&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;T4Templates &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;Include&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;.\**\*.tt&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;ItemGroup&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Exec&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;WorkingDirectory&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;C:\Program Files\Common Files\microsoft shared\TextTemplating\1.2\&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;Command&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;TextTransform &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;&amp;amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;%(T4Templates.FullPath)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;&amp;amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Target&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Project&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;There are a couple important things to note. First, a custom target is created, and an item group is added to the target. In the item group, we create a new item called T4Templates that will recurse the project and hold information for each text template that is found. Finally, an execute task is added which calls &lt;font face="courier new,courier"&gt;TextTransform.exe&lt;/font&gt; for each file found.&lt;/p&gt;

&lt;p&gt;Once the targets file is create, the project file is edited to import the new targets file using &lt;font face="courier new,courier"&gt;Import&lt;/font&gt;. I put it above the first &lt;font face="courier new,courier"&gt;PropertyGroup&lt;/font&gt; node so it’s visible when future maintenance is performed, but it can be placed anywhere within the root &lt;font face="courier new,courier"&gt;Project&lt;/font&gt; node:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Import &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;Project&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;$(MSBuildToolsPath)\T4Execution.targets&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, the &lt;font face="courier new,courier"&gt;DefaultTargets&lt;/font&gt; attribute in the Project node is modified to include the ExecuteT4Templates target: Note: This change is required for any project where this behavior is desired.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:red;"&gt;DefaultTargets&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;=&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;ExecuteT4Templates;Build&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;
Now whenever the project is built (&lt;font face="courier new,courier"&gt;Ctrl+B&lt;/font&gt;), template execution occurs. To be fair, there are several issues with the above approach, including:

&lt;ul&gt;
  &lt;li&gt;Template execution does not occur when Debug (&lt;font face="courier new,courier"&gt;F5&lt;/font&gt;) is triggered unless a project file or property has changed.&lt;/li&gt;

  &lt;li&gt;There is no built-in way to get the number of items in an &lt;font face="courier new,courier"&gt;ItemGroup&lt;/font&gt; to use conditional execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How important is this functionality in your projects? How would you do it differently?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=846" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=SgxfTwr5Rbo:jLNUmxtREI4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=SgxfTwr5Rbo:jLNUmxtREI4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=SgxfTwr5Rbo:jLNUmxtREI4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=SgxfTwr5Rbo:jLNUmxtREI4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/SgxfTwr5Rbo" height="1" width="1"/&gt;</description><enclosure url="http://www.platinumbay.com/blogs/dotneticated/attachment/846.ashx" length="3958" type="application/x-zip-compressed" /><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Visual+Studio+SDK/default.aspx">Visual Studio SDK</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MSBuild/default.aspx">MSBuild</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/T4/default.aspx">T4</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/28/running-t4-templates-with-msbuild.aspx</feedburner:origLink></item><item><title>Pop Quiz: .NET Integers, Unit Testing, and Boundary Checking</title><link>http://feedproxy.google.com/~r/dotneticated/~3/lNO_11YUQ0g/pop-quiz-net-integers-unit-testing-and-boundary-checking.aspx</link><pubDate>Thu, 27 Aug 2009 00:10:40 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:838</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/26/pop-quiz-net-integers-unit-testing-and-boundary-checking.aspx#comments</comments><description>&lt;p&gt;I ask this question in a bunch of my talks, mostly because most folks aren’t aware of this. What is the bug in the following method?&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Add(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num1, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num2)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num1 + num2;
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Do you see it? In a simple unit test, the method appears to work as expected:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;"&gt;[&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;()]
&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;AddTest()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;MathHelper &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;target = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;MathHelper&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;();
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num1 = 16;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num2 = 16;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;expected = 32;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;actual = target.Add(num1, num2);
    &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.AreEqual(expected, actual);&lt;/span&gt;&lt;span style="background:#fefefe;"&gt; &lt;/span&gt;&lt;span style="background:#fefefe;color:green;"&gt;// PASS&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;However, what if we pass in a different set of parameters, say int.MaxValue?&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;"&gt;[&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;()]
&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;AddMaxTest()
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;MathHelper &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;target = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;MathHelper&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;();
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num1 = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.MaxValue;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;num2 = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.MaxValue;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;result = target.Add(num1, num2);

    &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.Fail(&lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;Expected an overflow exception. Received: &amp;quot; &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;+ result);
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Any guesses on the outcome of this test? In actuality, no exception is thrown. The test fails with the output: “Assert.Fail failed. Expected an overflow exception. Received: -2”. The output from the fail assert is “-2”. What!? Is it a bug in the .NET framework? What’s going on?&lt;/p&gt;

&lt;p&gt;The answer lies in that I am passing in a signed int. In a signed int, the top bit is flag bit indicating positive or negative, leaving the other 31 bits to indicate the numeric value. When doing binary math that overflows the 31 bits, the 32nd bit is switched as though it is unsigned. In this case a positive becomes a negative and the result becomes –2. Let’s hope the system isn’t trying to deposit $100 into an account with $2,147,483,647.&lt;/p&gt;

&lt;p&gt;But what does this mean to the original method? How do we handle this scenario? The point of this experiment isn’t to demonstrate a potential issue with the .NET framework. Rather, I’d like you to take notice of the first unit test. The test does evaluate the method for proper functioning, 100% code coverage would be achieved on the Add method, and yet the issue at hand is not found. And to this I would like to make an important point:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Coverage is a misleading metric.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to properly test your code, it is important to not only make sure you test as much as possible, but to ensure you also perform boundary checking. If the max values weren’t tested, it might not have been found that the code could erase $2,147,483,749 from some pour soul’s bank account. Well, he’d be poor after the fact. Are here is my second point:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boundary check everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To help solve this problem, there is a neat tool from Microsoft Research called Pex. From the Pex website:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Right from the Visual Studio code editor, &lt;strong&gt;Pex&lt;/strong&gt; finds interesting input-output values of your methods, which you can save as a small test suite with high code coverage. Pex performs a systematic analysis, hunting for boundary conditions, exceptions and assertion failures, which you can debug right away. Pex enables Parameterized Unit Testing, an extension of Unit Testing that reduces test maintenance costs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What I would really love to see someday is a combination of existing code coverage in Visual Studio Team System with parameter boundary checking in Pex to give a truer sense of test coverage. Maybe for Dev11?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=838" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=lNO_11YUQ0g:Ws_WLeKA9Hc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=lNO_11YUQ0g:Ws_WLeKA9Hc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=lNO_11YUQ0g:Ws_WLeKA9Hc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=lNO_11YUQ0g:Ws_WLeKA9Hc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/lNO_11YUQ0g" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Testing/default.aspx">Testing</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Unit+Tests/default.aspx">Unit Tests</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/PEX/default.aspx">PEX</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/26/pop-quiz-net-integers-unit-testing-and-boundary-checking.aspx</feedburner:origLink></item><item><title>LINQ: Porting jQuery’s Each</title><link>http://feedproxy.google.com/~r/dotneticated/~3/KhnkUWO1INs/linq-porting-jquery-s-each.aspx</link><pubDate>Wed, 26 Aug 2009 23:26:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:837</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/26/linq-porting-jquery-s-each.aspx#comments</comments><description>&lt;p&gt;As some astute readers pointed out, this functionality does in fact exist in LINQ. The name isn’t terribly obvious however: Aggregate. I was able to update the original tests to use the Aggregate method. The main difference is that a non-generic IEnumerable does not contain this functionality. For that type I had to use:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.OfType&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt;()&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The updated test methods are here:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;!&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Aggregate((str1, str2) =&amp;gt; (str1 + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ str2).Trim());&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { 1, 2, 3, 4, 5 };&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Aggregate((num1, num2) =&amp;gt; num1 + num2);&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;!&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.OfType&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt;().Aggregate((&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;str1, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;str2) =&amp;gt; (str1 + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ str2).Trim());&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;List&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;!&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Aggregate((str1, str2) =&amp;gt; (str1 + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ str2).Trim());&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I love learning new stuff, thanks to Steve Gilham and Jordan Terrell for their comments below.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;I really like the Each function in jQuery, and I find myself wanting to use it in LINQ. Since it doesn’t exist I decided to write one. Here goes:&lt;/strike&gt;&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;&lt;strike&gt;using &lt;/strike&gt;&lt;/span&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;using &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;System.Linq;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;using &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;System.Collections;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;using &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public static class &lt;/span&gt;&lt;/strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;strike&gt;ExtensionMethods&lt;br /&gt;&lt;/strike&gt;&lt;/span&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public static &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;TType Each&amp;lt;TType&amp;gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;TType&amp;gt; collection, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Func&lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;TType, TType, TType&amp;gt; func)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;default&lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(TType);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;foreach &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;queryable &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;in &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;collection)&lt;br /&gt;            result = func(result, queryable);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public static &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;TType Each&amp;lt;TType&amp;gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;collection, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Func&lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;TType, TType, TType&amp;gt; func)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;/strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;strike&gt;collection.OfType&amp;lt;TType&amp;gt;().Each(func);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/strike&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strike&gt;You can then call these extension methods using any IEnumerable type, such as List, Collection, etc. I’m utilizing lambdas to define inline methods, though a delegate to an existing method could be passed in as well.&lt;/strike&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;!&amp;quot; &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Each((str1, str2) =&amp;gt; (str1 + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ str2).Trim());&lt;/span&gt;&lt;/strike&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { 1, 2, 3, 4, 5 };&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Each((num1, num2) =&amp;gt; num1 + num2);&lt;/span&gt;&lt;/strike&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IEnumerable &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;!&amp;quot; &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Each((&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;str1, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;str2) =&amp;gt; (str1 + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ str2).Trim());&lt;/span&gt;&lt;/strike&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;collection = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;List&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; { &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;!&amp;quot; &lt;/span&gt;&lt;/strike&gt;&lt;strike&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;result = collection.Each((str1, str2) =&amp;gt; (str1 + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ str2).Trim());&lt;/span&gt;&lt;/strike&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strike&gt;What do you think? Would you do it differently?&lt;/strike&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=837" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=KhnkUWO1INs:97jkylxqsr8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=KhnkUWO1INs:97jkylxqsr8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=KhnkUWO1INs:97jkylxqsr8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=KhnkUWO1INs:97jkylxqsr8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/KhnkUWO1INs" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/LINQ/default.aspx">LINQ</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/26/linq-porting-jquery-s-each.aspx</feedburner:origLink></item><item><title>Static Page Checking in ASP.NET MVC</title><link>http://feedproxy.google.com/~r/dotneticated/~3/6bCSJYA-2Ug/static-page-checking-in-asp-net-mvc.aspx</link><pubDate>Fri, 21 Aug 2009 18:35:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:828</guid><dc:creator>Steve</dc:creator><slash:comments>9</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/21/static-page-checking-in-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;If you have built an ASP.NET web forms site of any substance, you have undoubtedly been bitten when code in the web form becomes outdated due to code change. It’s easy to see when the page is open in Visual Studio, as the code has red squiggles and the error shows up in the Error List tool window. As soon as the page is closed however, that error disappears. Even running a build will be successful. For some of my sites, which have over 150 pages, this can be very annoying to say the least.&lt;/p&gt;
  
&lt;p&gt;ASP.NET MVC has a neat hidden feature to solve this problem. The MVC team was most likely were stung by the same issue more than once. This feature is static page checking during compilation. Unfortunately, instead of being an option in the Properties window for the project (future release idea?), it is in the *.*proj xml file itself. To enable this feature:&lt;/p&gt;
  
&lt;ol&gt;   
&lt;li&gt;Right-click on the Project node in the Solution Explorer tool window&lt;/li&gt;
    
&lt;li&gt;Choose “Unload Project” - Note: If your project is under version control, you will be prompted to do a check-in. Simply click “Continue” to ignore the check-in request.&lt;/li&gt;
    
&lt;li&gt;Right-click the Project node again&lt;/li&gt;
    
&lt;li&gt;Choose “Edit *.*proj&amp;quot;, and the project file will now open in Visual Studio with color coding and IntelliSense&lt;/li&gt;
    
&lt;li&gt;In the first &lt;font face="courier new,courier"&gt;PropertyGroup &lt;/font&gt;node, there is a new node named &lt;font face="courier new,courier"&gt;MvcBuildViews&lt;/font&gt;&lt;/li&gt;
    
&lt;li&gt;By default this is set to &lt;font face="courier new,courier"&gt;false&lt;/font&gt;. Simply change the value to &lt;font face="courier new,courier"&gt;true&lt;/font&gt;&lt;/li&gt;
    
&lt;li&gt;Right-click the Project node and choose “Reload Project”&lt;/li&gt;
    
&lt;li&gt;If prompted that the file is already open, click yes to close the xml view.&lt;/li&gt;
    
&lt;li&gt;Build your project&lt;/li&gt;
 &lt;/ol&gt;
  
&lt;p&gt;You will notice that builds take longer than they did prior to this change. This is because under the covers, MSBuild is now making an additional call to aspnet_compiler in the AfterBuild MSBuild target:&lt;/p&gt;
  
&lt;p&gt;&lt;font face="courier new,courier"&gt;C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v temp -p &amp;quot;[physical path]&amp;quot;&lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;To avoid this delay in day-to-day development, you may choose to copy the &lt;font face="courier new,courier"&gt;MvcBuildViews &lt;/font&gt;node into the build-specific &lt;font face="courier new,courier"&gt;PropertyGroup &lt;/font&gt;nodes, and set it to &lt;font face="courier new,courier"&gt;false&lt;/font&gt; for Debug and &lt;font face="courier new,courier"&gt;true &lt;/font&gt;for Release.&lt;/p&gt;&lt;p&gt;Update: &lt;a href="http://twitter.com/jglozano" target="_blank"&gt;@jglozano&lt;/a&gt; points out that this only works with the default WebForms View Engine.&lt;br /&gt;&lt;/p&gt;
  
&lt;p&gt;Hope this helps&lt;/p&gt;
&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=828" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=6bCSJYA-2Ug:-w984hLmdW0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=6bCSJYA-2Ug:-w984hLmdW0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=6bCSJYA-2Ug:-w984hLmdW0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=6bCSJYA-2Ug:-w984hLmdW0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/6bCSJYA-2Ug" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/08/21/static-page-checking-in-asp-net-mvc.aspx</feedburner:origLink></item><item><title>Community Radio Episode Two</title><link>http://feedproxy.google.com/~r/dotneticated/~3/Xj46visH2QA/community-radio-episode-two.aspx</link><pubDate>Fri, 19 Jun 2009 08:38:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:808</guid><dc:creator>Steve</dc:creator><slash:comments>5</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/19/community-radio-episode-two.aspx#comments</comments><description>&lt;p&gt;I’m proud to announce that episode two of Community Radio has been published to &lt;a href="http://live.ineta.org/audio"&gt;http://live.ineta.org/audio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this episode, Steve talks with Heather Kostes, Emily Freet, and Nicole Moser about their roles at Microsoft, the MVP program, MVP benefits, becoming an MVP, karaoke, and more. Narrated by &lt;a href="http://twitter.com/JohnBlumenauer" target="_blank"&gt;John Blumenauer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As always, your feedback is greatly appreciated.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=808" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Xj46visH2QA:66nG0RRe3dQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Xj46visH2QA:66nG0RRe3dQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Xj46visH2QA:66nG0RRe3dQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/Xj46visH2QA" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVP/default.aspx">MVP</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/19/community-radio-episode-two.aspx</feedburner:origLink></item><item><title>European Union Says No to Free Dessert</title><link>http://feedproxy.google.com/~r/dotneticated/~3/9GzswyHn5-0/europe-says-no-to-free-dessert.aspx</link><pubDate>Sun, 14 Jun 2009 22:42:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:799</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/14/europe-says-no-to-free-dessert.aspx#comments</comments><description>&lt;p&gt;As reported all over the web this week, Microsoft has decided to ship Windows 7 in Europe without Internet Explorer. For a long time, the EU has been complaining that Microsoft has been using their dominant position to hawk IE on unsuspecting computer users.&lt;/p&gt;  &lt;p&gt;Horseradish!&lt;/p&gt;  &lt;p&gt;Let’s bring this discussion back across the pond for a second, and look at new home construction. The Department of Justice had a quarrel with Microsoft awhile back over a similar matter. Of course, if they were really going after monopolies they would go after the micro-monopolies of new home builders for charging egregious fees for options. Take for instance the elegant and simple recessed light. The last time I bought a new house the builder wanted $125 for every single one I added. A quick trip to Home Depot confirmed that the hardware costs less than $10, and wiring was equally inexpensive. I wanted to put their lights out.&lt;/p&gt;  &lt;p&gt;And what about the auto industry that forces you to choose from their tires, or their radios, or their floormats. Shouldn’t they be spanked? And what about government in general? Shouldn’t I be able to choose a DMV that offers better service if I want to? I think my four year old nephew could do that, and I’d gladly pay him instead.&lt;/p&gt;  &lt;p&gt;But let’s take a step back for a second and remember that there is a major difference between these comparisons and Internet Explorer. Internet Explorer is free. Free as in no charge. Free as in ‘No sir, you can keep your money’. You buy the operating system, and you get a free browser. Restaurants do the same thing; buy a meal, get a free dessert. Is the European Union really that uptight to complain about getting their dessert for free? And a dessert that can easily be replaced by downloading another browser? Maybe they don&amp;#39;t like free things and will soon consider an air tax.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=799" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9GzswyHn5-0:QZUKA6-jfHI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9GzswyHn5-0:QZUKA6-jfHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9GzswyHn5-0:QZUKA6-jfHI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/9GzswyHn5-0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Personal+_1320_+Off+Topic/default.aspx">Personal – Off Topic</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/14/europe-says-no-to-free-dessert.aspx</feedburner:origLink></item><item><title>Community Radio Episode One</title><link>http://feedproxy.google.com/~r/dotneticated/~3/Qa2O-KuslVk/community-radio-episode-one.aspx</link><pubDate>Fri, 12 Jun 2009 06:45:13 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:793</guid><dc:creator>Steve</dc:creator><slash:comments>4</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/12/community-radio-episode-one.aspx#comments</comments><description>&lt;p&gt;I’m proud to announce that the inaugural episode of Community Radio has been published: &lt;a href="http://live.ineta.org/audio"&gt;http://live.ineta.org/audio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this inaugural episode, I talk with Richard, Carl and Sara about Speaker Idol, speaking at Tech-Ed, podcasting, .NET Rocks, Richard and Carl&amp;#39;s back stories, and more. Narrated by &lt;a href="http://twitter.com/csharpfritz"&gt;Jeff Fritz&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As always, your feedback is greatly appreciated.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=793" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Qa2O-KuslVk:e0D8unWxy_4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Qa2O-KuslVk:e0D8unWxy_4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Qa2O-KuslVk:e0D8unWxy_4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/Qa2O-KuslVk" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/12/community-radio-episode-one.aspx</feedburner:origLink></item><item><title>Results – Community Radio Narration Contest</title><link>http://feedproxy.google.com/~r/dotneticated/~3/PKTMTbsq4mM/results-community-radio-narration-contest.aspx</link><pubDate>Thu, 11 Jun 2009 00:01:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:789</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/10/results-community-radio-narration-contest.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/24/community-radio-narration-contest.aspx" target="_blank"&gt;contest&lt;/a&gt; deadline has come and gone, and I received four submissions. After reviewing the submission I have determined that they were all great, so whoever sends me $500 first… just kidding. I’ve decided that the only satisfactory course of action is to use them all on a rotational basis. In fact, I’ve decided to use community contributions exclusively going forward because, well, this is your radio! The first four, in no particular (though apparently alphabetical) order, are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://twitter.com/csharpfritz" target="_blank"&gt;Jeff Fritz&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://twitter.com/JohnBlumenauer" target="_blank"&gt;John Blumenauer&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://twitter.com/fallenrogue" target="_blank"&gt;Leon Gersing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Michael Diiorio&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Would you like to introduce an episode of Community Radio? Record yourself in high-quality MP3 or WAV format speaking the following phrases. I look forward to your submissions!&lt;/p&gt;  &lt;h4&gt;Intro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;[Hey, Hi, Howdy, Hey Y’all, etc.], this is [your name] welcoming you to Community Radio: connecting the developer community everywhere. Community Radio is powered by INETA Live and hosted by Steve Andrews: Microsoft MVP for Visual Studio Team System, Director of Technology for INETA North America, and all-around Community Fanatic. And now… to the communitymobile! Enjoy the show!&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Note: In the second to last sentence, it&amp;#39;s communitymobile, as in &amp;quot;To the Batmobile.&amp;quot;&lt;/i&gt;&lt;/p&gt;  &lt;h4&gt;Outro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;Thanks for listening to Community Radio: powered by INETA Live, and hosted by Steve Andrews. If you enjoyed this episode, pass us along to your friends and colleagues and check out our podcast archives at live.ineta.org. I’m [your name], join us next time for another edition of... Community Radio.&amp;quot;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=789" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=PKTMTbsq4mM:WCsFpm-IfxY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=PKTMTbsq4mM:WCsFpm-IfxY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=PKTMTbsq4mM:WCsFpm-IfxY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/PKTMTbsq4mM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/10/results-community-radio-narration-contest.aspx</feedburner:origLink></item><item><title>Community Tour 2010</title><link>http://feedproxy.google.com/~r/dotneticated/~3/UJ3BdVr9fpU/community-tour-2010.aspx</link><pubDate>Tue, 09 Jun 2009 21:43:43 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:786</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/09/community-tour-2010.aspx#comments</comments><description>&lt;p&gt;I think most folks know that I tend to speak at developer events from time to time. Actually in 2008 I gave 48 presentations at 32 events. My goal for 2009 is 52 events and I have 44 confirmed so far. Next year though I thought I’d take it up another notch. No, I’m not going for 72 events as some have suggested, nor am I retiring. Rather, I’m going on a North American tour and I’m currently on the hunt for a class A diesel motor home.&lt;/p&gt;  &lt;p&gt;&lt;img title="" style="border-top-width:0px;display:block;border-left-width:0px;float:none;border-bottom-width:0px;margin-left:auto;margin-right:auto;border-right-width:0px;" height="129" alt="" src="http://www.platinumbay.com/blogs/postimages/CommunityTour2010_1118D/CT2010CoachMockup.gif" width="380" border="0" /&gt;&lt;/p&gt;  &lt;h6 align="center"&gt;&lt;em&gt;Note: Image for dramatization only. Logos are for illustrative purposes and do not signify support from any organization. Also, CommunityTour.com is sadly already taken.&lt;/em&gt;&lt;/h6&gt;  &lt;p&gt;As part of this tour, I am organizing and planning a number of programs, including:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community Events:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;continuing to speak at user groups, code camps, and other developer events.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Guest Lecturing:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;engaging with college and university students about real-world programming, best practices, etc.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community Camp:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;teaching up-and-coming influentials about speaking, presentations, writing, blogging, the MVP program, the INETA Speakers Bureau, and more.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Volunteering:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;continuing the idea of &lt;a href="http://www.GeekFoodDrive.com"&gt;www.GeekFoodDrive.com&lt;/a&gt; and &lt;a href="http://www.GeekGive.org"&gt;www.GeekGive.org&lt;/a&gt; by helping to organize volunteer opportunities at community events.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Mobile Code Camp:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;bringing the code camp idea to smaller and under-represented areas in the US where there aren’t currently any community events&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community Radio:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;talking with folks along the way, tapping the pockets of knowledge and sharing that knowledge with the community.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community TV:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;video interviews with community influentials.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;INETA Live:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;recording INETA Live webcasts from local technologists on the road.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h5&gt;Community Organizers&lt;/h5&gt;  &lt;p&gt;If you would like the Community Bus at one of your events next year, have feedback, are interested in organizing specific programs in your area, or you would be interested in riding along, please &lt;a href="http://www.platinumbay.com/blogs/dotneticated/contact.aspx" target="_blank"&gt;contact me&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Sponsors&lt;/h5&gt;  &lt;p&gt;To learn more about sponsoring the tour, please request a Community Tour 2010 Sponsorship Prospectus from the &lt;a href="http://www.platinumbay.com/blogs/dotneticated/contact.aspx" target="_blank"&gt;Contact page&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=786" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=UJ3BdVr9fpU:9aDIBNDMrlo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=UJ3BdVr9fpU:9aDIBNDMrlo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=UJ3BdVr9fpU:9aDIBNDMrlo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/UJ3BdVr9fpU" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/blog/default.aspx">blog</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/code+camp/default.aspx">code camp</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community/default.aspx">Community</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/09/community-tour-2010.aspx</feedburner:origLink></item><item><title>Community Radio Narration Contest</title><link>http://feedproxy.google.com/~r/dotneticated/~3/ztEvV9pz_vQ/community-radio-narration-contest.aspx</link><pubDate>Sun, 24 May 2009 23:26:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:772</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/24/community-radio-narration-contest.aspx#comments</comments><description>&lt;p&gt;I started recording episodes of Community Radio at Microsoft Tech-Ed 2009 in Los Angeles, California. Since coming back home, I’ve been hard at work editing these episodes and creating the intro/outro music. There is still one element missing however, the narrator. That’s where you come in.&lt;/p&gt;  &lt;p&gt;I’m holding a contest to find the Community Radio narrator. To enter, record yourself speaking the below intro and outro phrases in the highest quality format (either MP3 or WAV). The recorded intro and outro must be no longer than 27 seconds each. To submit your entry, send an email to &lt;a href="mailto:steve@platinumbay.com?subject=Submission:%20Community%20Radio%20Narration%20Contest" target="_blank"&gt;Steve&lt;/a&gt; with a link to download your recordings. Entries must be received by 11:59 PM eastern time on Friday, May 29th.&lt;/p&gt;  &lt;h4&gt;Intro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;Welcome to Community Radio: connecting the developer community everywhere. Community Radio is powered by INETA Live, located on the web at live.ineta.org, and hosted by Steve Andrews: Microsoft MVP for Visual Studio Team System, Director of Technology for INETA North America, and all-around Community Fanatic. And now… to the communitymobile! Enjoy the show!&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;i&gt;Note: In the second to last sentance, it&amp;#39;s communitymobile, as in &amp;quot;To the Batmobile.&lt;/i&gt;&lt;/font&gt;&amp;quot;&lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Outro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;Thanks for listening to Community Radio: powered by INETA Live and hosted by Steve Andrews. If you enjoyed this episode, pass us along to your friends and colleagues and check out our podcast archives at live.ineta.org. Narration by [your name]. Join us next time for another edition of... Community Radio.&amp;quot;&lt;/p&gt;  &lt;p&gt;Good luck!&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=772" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ztEvV9pz_vQ:b_RGlY-l-Fo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ztEvV9pz_vQ:b_RGlY-l-Fo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ztEvV9pz_vQ:b_RGlY-l-Fo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/ztEvV9pz_vQ" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/contest/default.aspx">contest</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/24/community-radio-narration-contest.aspx</feedburner:origLink></item><item><title>WinFormsMVC</title><link>http://feedproxy.google.com/~r/dotneticated/~3/hruQ1kaBT1o/winformsmvc.aspx</link><pubDate>Wed, 20 May 2009 21:11:27 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:763</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/20/winformsmvc.aspx#comments</comments><description>&lt;p&gt;I’ve been working on a Windows Forms based project recently, and I quickly became frustrated at how unwieldy it became after just a short while. I have also been working a lot with the ASP.NET MVC framework recently, and I thought this model might work better, so I set out to build a proof-of-concept of what Windows Forms MVC might look like.&lt;/p&gt;  &lt;p&gt;So far I have a very rough framework, but it’s at a point where feedback would be beneficial so I have published the project over on &lt;a title="CodePlex" href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt;. So go take a look, browse the source, and let me know what you think!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://winformsmvc.codeplex.com"&gt;http://winformsmvc.codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=763" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hruQ1kaBT1o:giK6MLFmtN4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hruQ1kaBT1o:giK6MLFmtN4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hruQ1kaBT1o:giK6MLFmtN4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/hruQ1kaBT1o" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/20/winformsmvc.aspx</feedburner:origLink></item><item><title>Training: Hands-on Introduction to ASP.NET MVC Development</title><link>http://feedproxy.google.com/~r/dotneticated/~3/DKgwJqcqsYM/training-hands-on-introduction-to-asp-net-mvc-development.aspx</link><pubDate>Tue, 19 May 2009 01:02:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:761</guid><dc:creator>Steve</dc:creator><slash:comments>12</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/18/training-hands-on-introduction-to-asp-net-mvc-development.aspx#comments</comments><description>&lt;p&gt;Registration is now open for this four hour course taking place on May 29th, 2009 at the Desmond Hotel and Conference Center in Malvern, PA.&lt;/p&gt;  &lt;p&gt;ASP.NET MVC is a free and fully supported Microsoft framework for building web applications that use a model-view-controller pattern. Like ASP.NET Web Forms, ASP.NET MVC is built on the ASP.NET framework. The benefits of ASP.NET MVC include complete control over your HTML markup, intuitive website URLs, clear separation of concerns which results in web applications that are easier to maintain and extend over time, and testability – including support for test-driven development.&lt;/p&gt;  &lt;p&gt;This course will be led by Steve Andrews, a Microsoft MVP for Visual Studio Team System, Director of Technology for INETA North America, and founding partner of Five Velocity Partners, a consulting and training provider specializing in Application Lifecycle Management and custom application development.&lt;/p&gt;  &lt;h4&gt;Overview:&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;4 Hour Course, including lunch&lt;/li&gt;    &lt;li&gt;Instructor-Led Introduction to ASP.NET MVC Development &lt;/li&gt;    &lt;li&gt;Overview of the Strengths and Weaknesses of ASP.NET MVC from a Developer’s Perspective &lt;/li&gt;    &lt;li&gt;Overview of the Essentials of the ASP.NET MVC Object Model &lt;/li&gt;    &lt;li&gt;Opportunity for a Hands-on Lab Writing ASP.NET MVC Extensions &lt;/li&gt;    &lt;li&gt;Discussion of Unique ASP.NET Deployment Requirements and Strategies &lt;/li&gt;    &lt;li&gt;Opportunity for Questions and Answers &lt;/li&gt; &lt;/ul&gt;  &lt;table cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Location&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Event&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Friday May 29, 2009          &lt;br /&gt;9:00am -1:00pm ET&lt;/td&gt;        &lt;td&gt;Desmond Hotel &amp;amp; Conference Center          &lt;br /&gt;Malvern, PA&lt;/td&gt;        &lt;td&gt;&lt;i&gt;Hands-on Introduction to ASP.NET MVC Development&lt;/i&gt;           &lt;br /&gt;Registration Fee: $349           &lt;br /&gt;Presented By: Steve Andrews&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Includes&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Bound hard-copy of the training materials&lt;/li&gt;    &lt;li&gt;USB memory stick with trainings resources including demos and labs&lt;/li&gt;    &lt;li&gt;Continental breakfast&lt;/li&gt;    &lt;li&gt;Buffet lunch&lt;/li&gt;    &lt;li&gt;High-speed internet access&lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Requirements:&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Comfortable with ASP.NET development &lt;/li&gt;    &lt;li&gt;Understanding of the ASP.NET page lifecycle &lt;/li&gt;    &lt;li&gt;Attendees must bring their own laptop installed with:      &lt;ul&gt;       &lt;li&gt;Visual Studio 2008 SP1 Standard or greater &lt;/li&gt;        &lt;li&gt;SQL Server 2005 or 2008, Express or greater &lt;/li&gt;&lt;li&gt;ASP.NET MVC Framework version 1.0&lt;br /&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To register for this event, please contact &lt;a href="mailto:steve@platinumbay.com?subject=Inquiry:%20Hands-on%20Introduction%20to%20ASP.NET%20MVC%20Development" target="_blank"&gt;Steve Andrews&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=761" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=DKgwJqcqsYM:JheAiS6h3Rk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=DKgwJqcqsYM:JheAiS6h3Rk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=DKgwJqcqsYM:JheAiS6h3Rk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/DKgwJqcqsYM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Training/default.aspx">Training</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/18/training-hands-on-introduction-to-asp-net-mvc-development.aspx</feedburner:origLink></item><item><title>Volunteering at Tech·Ed 2010 in New Orleans</title><link>http://feedproxy.google.com/~r/dotneticated/~3/u8swPqfIZxM/volunteering-at-tech-183-ed-2010-in-new-orleans.aspx</link><pubDate>Sun, 17 May 2009 20:04:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:757</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/volunteering-at-tech-183-ed-2010-in-new-orleans.aspx#comments</comments><description>&lt;p&gt;Tech·Ed this week was tons of fun and an amazing experience! I worked several booths, interacted and networked with a large number of my peers, and enjoyed almost every moment. Needless to say I was thoroughly exhausted when I got home. One of the highlights of the week though was the Wednesday night INETA Developer Party at Chaya; thanks to Infragistics for helping to sponsor it! The food was great: sushi, great wine, delicious pastries.&lt;/p&gt;  &lt;p&gt;During the course of the night the topic of New Orleans and Tech·Ed came up, and I suggested that we fly in a day or two early and volunteer for an organization like Habitat for Humanity. The whole table was in agreement and every person said they would do it.&lt;/p&gt;  &lt;p&gt;Today, I sent an email to Habitat for Humanity inquiring about volunteering on June 5th, 2010 which is the Saturday before Tech·Ed. This is where you come in. If you are interested in arriving early for Tech·Ed 2010 to help rebuild New Orleans, please contact me so I can start to get a headcount.&lt;/p&gt;  &lt;p&gt;More information about volunteering for Habitat for Humanity can be found here: &lt;a href="http://www.habitat-nola.org/volunteer/faq.php" title="http://www.habitat-nola.org/volunteer/faq.php"&gt;http://www.habitat-nola.org/volunteer/faq.php&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=757" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u8swPqfIZxM:Sj8Rvbh9ibI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u8swPqfIZxM:Sj8Rvbh9ibI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u8swPqfIZxM:Sj8Rvbh9ibI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/u8swPqfIZxM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tech+Ed/default.aspx">Tech Ed</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community/default.aspx">Community</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/volunteering-at-tech-183-ed-2010-in-new-orleans.aspx</feedburner:origLink></item><item><title>Tech·Ed Visual Studio Tips with Sara Ford</title><link>http://feedproxy.google.com/~r/dotneticated/~3/an42OZIluYw/tech-183-ed-visual-studio-tips-with-sara-ford.aspx</link><pubDate>Sun, 17 May 2009 19:50:26 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:756</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/tech-183-ed-visual-studio-tips-with-sara-ford.aspx#comments</comments><description>&lt;p&gt;While at Tech·Ed this week I had several opportunities to sit down with &lt;a title="Sara Ford&amp;#39;s Blog" href="http://blogs.msdn.com/saraford" target="_blank"&gt;Sara Ford&lt;/a&gt;, including for my new Community Radio podcast. Along the way, I learned a few new tips and tidbits of knowledge about Visual Studio.&lt;/p&gt;  &lt;h3&gt;Cycle Clipboard Ring&lt;/h3&gt;  &lt;p&gt;If you’re like me when using Visual Studio, the last block of text you copied to the clipboard is always in the back of your mind, in many cases for future use. And then you mistakenly hit Ctrl+C (Copy), and overwrite the clipboard and destroying the coding flow. No more. Instead of using Ctrl+V (Paste) to paste from the clipboard, you can use Ctrl+Shift+V, which cycles through Visual Studio’s clipboard ring. Yes, Visual Studio has a clipboard ring.&lt;/p&gt;  &lt;p&gt;In the past when I presented this tip folks wanted to know how large the clipboard ring is, and I didn’t know. I asked Sara this week and it’s 20 items.&lt;/p&gt;  &lt;h3&gt;File Tab Channel File Menu&lt;/h3&gt;  &lt;p&gt;There are a couple nifty tips about the File Tab Channel, which is the horizontal bar above documents that lists each document name.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="31" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb.png" width="314" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;First, if you right-click on a document’s tab, there are a couple new menu items added in Visual Studio 2008 that can be very useful:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Copy Full Path – Copies the full file path to the clipboard. &lt;/li&gt;    &lt;li&gt;Open Containing Folder – opens Windows Explorer to the directory containing the file. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Second, the File Tab Channel File Menu, the down arrow on the right side of the File Tab Channel, lists all the open documents. It can also be invoked from the keyboard using Ctrl+Alt+DownArrow.&lt;/p&gt;  &lt;p&gt;Lastly, and I learned this little-known tip this week, the File Tab Channel File Menu itself is state-sensitive. That is, when there are more documents than can be displayed in the space, the icon changes from &lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_3.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="23" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb_3.png" width="21" border="0" /&gt;&lt;/a&gt; to &lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_4.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="24" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb_4.png" width="24" border="0" /&gt;&lt;/a&gt;. This can be really handy since it isn’t always apparent how many documents are open.&lt;/p&gt;  &lt;h3&gt;Using the Find Combo Box to Set a Breakpoint&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_5.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 5px 0px;border-right-width:0px;" height="30" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb_5.png" width="218" align="left" border="0" /&gt;&lt;/a&gt;Another little-known tip is that if you type a method name for the currently open document into the Find combo box, located in the Standard command bar, and press F9, it will set a breakpoint on that method.&lt;/p&gt;  &lt;h3&gt;More Tips&lt;/h3&gt;  &lt;p&gt;If you liked these tips you can find more in Sara’s book, “&lt;a title="Visual Studio Tips" href="http://www.amazon.com/Microsoft-Visual-Studio-Tips-Sara/dp/0735626405" target="_blank"&gt;Visual Studio Tips&lt;/a&gt;”, available now on Amazon.com. 100% of the author royalties are being donated to a scholarship fund at the local community college for residents of Waveland, MS which was destroyed by Hurricane Katrina. Microsoft is also matching her donations 100%. Go buy three or four copies!&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=756" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=an42OZIluYw:glwfQ26r2xM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=an42OZIluYw:glwfQ26r2xM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=an42OZIluYw:glwfQ26r2xM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/an42OZIluYw" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tips/default.aspx">Tips</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tech+Ed/default.aspx">Tech Ed</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Sara+Ford/default.aspx">Sara Ford</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/tech-183-ed-visual-studio-tips-with-sara-ford.aspx</feedburner:origLink></item><item><title>INETA Live – Call for Speakers</title><link>http://feedproxy.google.com/~r/dotneticated/~3/4QN-5ErhzF0/ineta-live-call-for-speakers.aspx</link><pubDate>Mon, 04 May 2009 03:25:51 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:752</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/03/ineta-live-call-for-speakers.aspx#comments</comments><description>&lt;p&gt;Want to be famous-er? Give back knowledge? Geek out with your peers? You should do an INETA Live webcast! One of my initiatives as Director of Technology for INETA is to further develop &lt;a href="http://live.ineta.org/Videos"&gt;INETA Live&lt;/a&gt;. Details on INETA Live can be found below:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What is INETA Live?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;INETA Live is a forum for virtual events and webcasts via Microsoft Live Meeting.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What to Present&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Whatever you want! Speakers can present a full presentation that they may present to user groups, an intro to one of their talks, or a topic of current interest. The choice is completely up to you!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;When do the webcasts happen?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;INETA Live webcasts are typically done during the week at 12 noon or 8pm eastern time. Feel free to request other arrangements if these times do not work for you.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Hosts&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Each presentation and speaker will be introduced by a meeting host who will also serve to field audience questions to the speaker.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Recording&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The presentation will be recorded for future viewing on INETA Live.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What next?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;If you are interested in doing an INETA Live presentation, please contact me. &lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=752" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4QN-5ErhzF0:kLus6cc5PoQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4QN-5ErhzF0:kLus6cc5PoQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4QN-5ErhzF0:kLus6cc5PoQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/4QN-5ErhzF0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/03/ineta-live-call-for-speakers.aspx</feedburner:origLink></item><item><title>INETA Live Webcasts: Round One</title><link>http://feedproxy.google.com/~r/dotneticated/~3/hw6Ij-qLYWY/ineta-live-webcasts-round-one.aspx</link><pubDate>Mon, 20 Apr 2009 08:15:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:745</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/20/ineta-live-webcasts-round-one.aspx#comments</comments><description>&lt;p&gt;One of my initiatives as Director of Technology for INETA is to further develop &lt;a href="http://live.ineta.org/Videos" target="_blank"&gt;INETA Live&lt;/a&gt;. To that end, Rachel Appel and I will be hosting &lt;b&gt;five&lt;/b&gt; exciting live webcasts this month on Live Meeting, all from INETA speakers. Details below, and remember to stay tuned for more exciting content from INETA Live. If you are interested in doing a live webcast on INETA Live, please contact me.&lt;/p&gt;
  
&lt;p&gt;&lt;i&gt;* All times are Eastern US/Canada &lt;/i&gt;    &lt;br /&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_thumb.png" title="image" style="border-width:0px;margin:0px 15px 0px 0px;display:inline;" alt="image" width="64" align="left" border="0" height="64" /&gt;&lt;/a&gt;&lt;span style="font-weight:bold;font-size:1.2em;"&gt;Pete Brown – A Lap Around Silverlight 3&lt;/span&gt;     &lt;br /&gt;&lt;span style="font-size:0.85em;"&gt;When: April 21st, 2009 at 12:00pm ET      &lt;br /&gt;Host: Rachel Appel       &lt;br /&gt;Link: &lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=ZBZ3KJ&amp;amp;role=attend" title="Join Live Meeting" target="_blank"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=ZBZ3KJ&amp;amp;role=attend&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Abstract:&lt;/b&gt; Join us for a lap around the new features in Silverlight 3 ranging from business application development to rich media, validation, navigation and out of browser support. If you’re new to Silverlight 3, or new to Silverlight itself, you’ll want to join us for this end-to-end look at Microsoft’s premier RIA platform. We’ll cover the basics from Silverlight 2, but focus primarily on the new announcements from mix09 and new features in Silverlight 3.&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Bio:&lt;/b&gt; Pete Brown is a Microsoft MVP for Client Application Development (Silverlight and WPF), an INETA speaker, and an Architect/Project Manager for Applied Information Sciences in the Washington, DC area. From his first sprite graphics and custom character sets on the Commodore 64 to 3d modeling and design through to Silverlight, Surface, XNA, and WPF, Pete has always had a deep interest in programming, design, and user experience. His involvement in Silverlight goes back to the Silverlight 1.1 alpha application that he co-wrote and put into production in July 2007. Pete has been programming for fun since 1984, and professionally since 1992. In his spare time, Pete enjoys programming, blogging, designing and building his own woodworking projects and raising his two children with his wife in the suburbs of Maryland. Pete’s blog is at &lt;a href="http://www.irritatedVowel.com/Blog" target="_blank"&gt;http://www.irritatedVowel.com/Blog&lt;/a&gt; , and you can follow him on Twitter at &lt;a href="http://twitter.com/pete_brown" target="_blank"&gt;http://twitter.com/pete_brown&lt;/a&gt;. &lt;/p&gt;
  
&lt;p style="padding-top:12px;"&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_3.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_thumb_3.png" title="image" style="border-width:0px;margin:0px 15px 0px 0px;display:inline;" alt="image" width="64" align="left" border="0" height="64" /&gt;&lt;/a&gt;&lt;span style="font-weight:bold;font-size:1.2em;"&gt;Steve Andrews – Visual Studio 2008 Tips and Treats&lt;/span&gt;     &lt;br /&gt;&lt;span style="font-size:0.85em;"&gt;When: April 22nd, 2009 at 12:00pm ET      &lt;br /&gt;Host: Rachel Appel       &lt;br /&gt;Link: &lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=TNTB2N&amp;amp;role=attend" title="Join Live Meeting" target="_blank"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=TNTB2N&amp;amp;role=attend&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;Based on real life experience of 8+ hours a day developing with Visual Studio, learn some sweet tips and tricks to tame the IDE. With something new for everyone, these techniques will give you valuable information to start using right away, increase your productivity, and make you wonder how you survived all this time without them.&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Bio:&lt;/b&gt; Steve Andrews is a Team System MVP and INETA Board Member and Speaker, and has been working as a developer for more than 9 years. During this time, he has designed and developed applications in such widely varying areas as trust accounting, medical information management, supply chain management, and retail systems. Steve is also a MCTS, ICSOO, and community fanatic.&lt;/p&gt;
  
&lt;p style="padding-top:12px;"&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_4.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_thumb_4.png" title="image" style="border-width:0px;margin:0px 15px 0px 0px;display:inline;" alt="image" width="64" align="left" border="0" height="64" /&gt;&lt;/a&gt;&lt;span style="font-weight:bold;font-size:1.2em;"&gt;Claudio Lassala – Design Patterns in .NET&lt;/span&gt;     &lt;br /&gt;&lt;span style="font-size:0.85em;"&gt;When: April 27th, 2009 at 12:00pm ET      &lt;br /&gt;Host: Steve Andrews       &lt;br /&gt;Link: &lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=P648S9&amp;amp;role=attend" title="Join Live Meeting" target="_blank"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=P648S9&amp;amp;role=attend&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Abstract:&lt;/b&gt; Design Patterns are used every day by most developers in one way or another. A basic understanding of patterns and how to implement them is very useful for all .NET developers, and this session tries to clarify design patterns in a way that everybody can understand and start thinking about patterns in a more natural way.     &lt;br /&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Bio:&lt;/b&gt; Claudio Lassala is a Senior Developer at EPS Software Corp. He has presented several lectures at Microsoft events such as PDC Brazil and various other Microsoft seminars, as well as several conferences and user groups across North America and Brazil. He is a multiple winner of the Microsoft MVP Award since 2001 (for Visual FoxPro in 2001-2002, and for C# ever since), an INETA speaker, and also holds the MCSD for .NET certification. He has articles published on several magazines, such as MSDN Brazil Magazine, CoDe Magazine, UTMag, Developers Magazine, and FoxPro Advisor.Claudio blogs at &lt;a href="http://claudiolassala.spaces.live.com" target="_blank"&gt;http://claudiolassala.spaces.live.com&lt;/a&gt;, and can be followed on Twitter at &lt;a href="http://twitter.com/ClaudioLassala" target="_blank"&gt;http://twitter.com/ClaudioLassala&lt;/a&gt;. More detailed information regarding his presentations and articles can be found in his &lt;a href="https://mvp.support.microsoft.com/default.aspx/profile=ec6b1e0b-8efc-4530-97b0-55bd924e26d0" target="_blank"&gt;MVP Profile&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=745" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hw6Ij-qLYWY:FsuysQxYIv0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hw6Ij-qLYWY:FsuysQxYIv0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hw6Ij-qLYWY:FsuysQxYIv0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/hw6Ij-qLYWY" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/20/ineta-live-webcasts-round-one.aspx</feedburner:origLink></item><item><title>Community Radio #1: The After-Party</title><link>http://feedproxy.google.com/~r/dotneticated/~3/ehpldy3S_Rs/community-radio-1-the-after-party.aspx</link><pubDate>Sat, 11 Apr 2009 11:38:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:738</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/11/community-radio-1-the-after-party.aspx#comments</comments><description>&lt;p&gt;One of my near-term goals is to start up a community-focused podcast. Until I get hardware funding however, I’ve decided to start with blogcasts. For this episode, I’m having a conversation with some folks about community events and after-parties via email. These folks are:&lt;/p&gt;  &lt;table cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;b&gt;Name:&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Blog&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Stephen Forte&lt;/td&gt;        &lt;td&gt;Technology Entrepreneur &amp;amp; Consultant&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.stephenforte.net"&gt;www.stephenforte.net&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Rob Zelt&lt;/td&gt;        &lt;td&gt;President, INETA North America&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.robzelt.com/blog"&gt;www.robzelt.com/blog&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Michael Eaton&lt;/td&gt;        &lt;td&gt;Independent Consultant&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.mjeaton.net/blog"&gt;www.mjeaton.net/blog&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Rachel Appel&lt;/td&gt;        &lt;td&gt;Independent Consultant&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.rachelappel.com"&gt;www.rachelappel.com&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Daniel Egan&lt;/td&gt;        &lt;td&gt;Developer Evangelist, Microsoft&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.dotnetdoc.com"&gt;www.dotnetdoc.com&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;To kick it off, I threw out a couple ideas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There is some debate about whether, for code camps, to have a speaker party or an attendee party, and whether to hold it the evening before or after the event. &lt;/li&gt;    &lt;li&gt;There is also some discussion about the practicality of having post-meeting events as well. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here is the transcript:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;b&gt;Stephen Forte: &lt;/b&gt;&lt;/i&gt;I think that there should be neither. Code Camps are suppose to be community based and organized. So if you want to have some kind of party, everyone should just go to the bar afterwards, nothing official. That is what we did, and we were lucky, our DE was there and picked up the first round or two.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rob Zelt:&lt;/i&gt; &lt;/b&gt;I completely disagree with Stephen. (I&amp;#39;m not sure I do, but it always makes for a better conversation this way ;-)&lt;/p&gt;  &lt;p&gt;While I do think it is important for events like code camps to not put up barriers between speakers and attendees, I also think that creating an opportunity for speakers and volunteers to gather at a speaker dinner the night before a code camp creates an incentive for new speakers and volunteers to get involved. It doesn&amp;#39;t need to be anything fancy (or funded), but can go a long way as a pat on the back for those putting in the effort to make the event happen. &lt;/p&gt;  &lt;p&gt;I really like the model the SoCal groups use for their events that include a speaker/volunteer dinner of Friday and then a big attendee/speaker/volunteer event on the Saturday night. They go all out with a live band and everything, but I think the importance is in giving everybody a chance to socialize.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Steve Andrews: &lt;/i&gt;&lt;/b&gt;I agree with Stephen in that they typically shouldn’t be official. My thought though is that the speaker and/or attendee parties for Code Camps should occur after the event, as to attract more attendees and speakers, including those who come from out of town.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Daniel Egan: &lt;/i&gt;&lt;/b&gt;I agree with Rob... (obviously since he used us as a reference lol).&amp;nbsp; The great thing about code camp is that you are able to find new speakers that are not on the &amp;quot;user group circuit&amp;quot; already. The Friday meetup allows you the time to make the contact with these individuals and encourage them to do the talks at the UGs also. We do leave ours &amp;quot;Semi-open&amp;quot; meaning that others are allowed to come but it is not announced to ALL the attendees, but if they find out about it, they are welcome.&lt;/p&gt;  &lt;p&gt;As a matter of fact, I think I met Steve Andrews at the San Diego Speakers dinner.&amp;nbsp; So I guess you can decide if that was a good thing or bad thing :)&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Michael Eaton:&lt;/i&gt; &lt;/b&gt;I go back and forth on this one. While I think speaker dinners are ok, they can appear elitist. If I get into town early for an event, it&amp;#39;s nice to hang out with friends (who, for the most part, are speakers), but this doesn&amp;#39;t have to be an official event. As far as I&amp;#39;m concerned, anyone can show up, especially if it&amp;#39;s not being paid for by the event organizers.&lt;/p&gt;  &lt;p&gt;After parties are a great way to relax, especially if you&amp;#39;ve traveled and then spoken at the event.I think far too often though, the after-party *is* the event for many people.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;b&gt;Rachel Appel: &lt;/b&gt;&lt;/i&gt;I think I&amp;#39;m with Mike on this one. I don&amp;#39;t want to appear elitist, nor do I want to exclude anyone. But I like to hang with my friends too, many of whom happen to be speaking. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Steve Andrews: &lt;/i&gt;&lt;/b&gt;I think opening up such events to everyone, and not just speakers or other influentials, is a great way to help grow local community. One suggestion I&amp;#39;ve heard for organizers who have some budget for food or drinks for speakers is to invite everyone, and issue drink and/or food tickets to speakers. Of course, I&amp;#39;d also propose raffling some off as well to attendees.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Michael Eaton:&lt;/i&gt;&lt;/b&gt; Hmmm, I don&amp;#39;t know about that. I know at Codemash this year, the speakers got free drink tickets for one of the hotel bars. I was given a couple for being an &amp;quot;influencer&amp;quot;, but honestly, it was weird because I had these tickets and many of my friends didn&amp;#39;t.&lt;/p&gt;  &lt;p&gt;On a related note, I know that at devLink last year, there was a raffle to win a chance to have dinner with the speakers. Maybe the national guys got off on it, but it was largely made fun of by the regional speakers.&lt;/p&gt;  &lt;p&gt;I think speakers should be applauded for traveling to events and giving up their time, but I really think we need to be careful about setting them apart at after-events.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=738" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ehpldy3S_Rs:kXisSMhfKE0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ehpldy3S_Rs:kXisSMhfKE0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ehpldy3S_Rs:kXisSMhfKE0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/ehpldy3S_Rs" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/11/community-radio-1-the-after-party.aspx</feedburner:origLink></item><item><title>INETA Board of Directors: The Board Meeting</title><link>http://feedproxy.google.com/~r/dotneticated/~3/X3M84XcRPhQ/ineta-board-of-directors-the-board-meeting.aspx</link><pubDate>Wed, 08 Apr 2009 02:01:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:739</guid><dc:creator>Steve</dc:creator><slash:comments>0</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/07/ineta-board-of-directors-the-board-meeting.aspx#comments</comments><description>&lt;p&gt;This past weekend I went down to Raleigh, NC for my first INETA Board Meeting. Never a fan of being cooped up in a conference room, I had slight apprehensions about nicotine and caffeine withdrawls and the like. Rather, it turned out to be a very engaging and enjoyable time with fellow community-minded folks. I would even argue it was productive!&lt;/p&gt;  &lt;p&gt;As part of the meeting, we voted on the primary roles each director would be responsible for. I think the choices were obvious and well-placed, and I look forward to what the team will do over the next year. The primary role assignments are:&lt;/p&gt;  &lt;table cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;Chris Williams&lt;/td&gt;        &lt;td&gt;Director of Membership&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Lori McKinney&lt;/td&gt;        &lt;td&gt;Director of Marketing&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Randy Walker&lt;/td&gt;        &lt;td&gt;Director of Speakers&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Shawn Weisfeld&lt;/td&gt;        &lt;td&gt;Director of Community Activities&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Steve Andrews&lt;/td&gt;        &lt;td&gt;Director of Technology&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;One piece of information I would like to share is that the Regional Speaker Program is not dead as some have suggested. Rather, it is actively being pursued and we are working on getting all the right pieces in place. More information will be announced as it is available.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=739" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=X3M84XcRPhQ:rSneHAV6sSU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=X3M84XcRPhQ:rSneHAV6sSU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=X3M84XcRPhQ:rSneHAV6sSU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/X3M84XcRPhQ" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/07/ineta-board-of-directors-the-board-meeting.aspx</feedburner:origLink></item><item><title>INETA Board of Directors</title><link>http://feedproxy.google.com/~r/dotneticated/~3/HdEShpjY4pQ/ineta-board-of-directors.aspx</link><pubDate>Thu, 12 Mar 2009 21:32:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:725</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/03/12/ineta-board-of-directors.aspx#comments</comments><description>&lt;p&gt;On Tuesday, INETA NORAM (the International .NET Association, North America) announced the results of their Board of Directors elections. INETA’s mission is to offer assistance and resources to community groups that promote and educate their membership in Microsoft&amp;#39;s .NET technologies.&lt;/p&gt;  &lt;p&gt;What makes this election different from the past however, is that I was elected to a Director position! I am very excited to step into this position on March 3rd and be a part of helping make our developer communities stronger.&lt;/p&gt;  &lt;p&gt;Throughout my moderate speaking schedule though, I have heard various complaints about INETA, and I want to take this opportunity to get your thoughts and concerns. To that end, I am soliciting feedback on INETA from the North American community. What does INETA do well? What issues have you had with INETA in the past? How can INETA better serve your local community? What do you want INETA to be?&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;While I can’t promise anything, this is your opportunity to be heard. Feel free to send me an email, Twitter DM, IM, certified letter, carrier pigeon, or singing telegram.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=725" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=HdEShpjY4pQ:uafPkbFQtuw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=HdEShpjY4pQ:uafPkbFQtuw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=HdEShpjY4pQ:uafPkbFQtuw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/HdEShpjY4pQ" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/03/12/ineta-board-of-directors.aspx</feedburner:origLink></item></channel></rss>
