<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Erik Porter&#39;s Blog</title>
  <icon>http://erikporter.com/Content/icons/mushroom.ico</icon>
  <logo>http://erikporter.com/Content/icons/mushroom.png</logo>
  <updated>2011-02-08T17:09:30.347</updated>
  <subtitle type="html">Life and Development at Microsoft and Other Technology Discussions</subtitle>
  <id>http://erikporter.com/atom</id>
  <link rel="alternate" type="text/html" hreflang="en" href="/atom"/>
  <link rel="self" type="application/atom+xml" href="http://erikporter.com/ATOM"/>
  <generator uri="http://oxite.net" version="1.0">Oxite</generator>
  <entry>
    <title type="html">ASP.NET Web Pages Templates for VB</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/ASPNET-Web-Pages-Templates-for-VB"/>
    <id>http://erikporter.com/Blog/ASPNET-Web-Pages-Templates-for-VB</id>
    <updated>2011-02-09T01:09:30.457</updated>
    <published>2011-02-08T17:09:30.347</published>
    <author>
      <name>Erik</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Today, (well…yesterday, but I didn’t have time to blog about it yesterday) our team added the Visual Basic versions of the templates you can get inside of WebMatrix for ASP.NET Web Pages.&amp;#160; These are available as NuGet packages on the &lt;a href=&quot;http://nuget.org&quot;&gt;NuGet Gallery&lt;/a&gt; site.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Starter-Site-Template-(VB)-1-0&quot;&gt;Starter Site Template (VB)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Bakery-Template-(VB)-1-0&quot;&gt;Bakery Template (VB)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Photo-Gallery-Template-(VB)-1-0&quot;&gt;Photo Gallery Template (VB)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Calendar-Template-(VB)-1-0&quot;&gt;Calendar Template (VB)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Along with the above 4 templates we’ve also shipped the original 4 C# templates that are included in WebMatrix as packages for those of you who might use ASP.NET Web Pages without WebMatrix.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Starter-Site-Template-1-0&quot;&gt;Starter Site Template&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Bakery-Template-1-0&quot;&gt;Bakery Template&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Photo-Gallery-Template-1-0&quot;&gt;Photo Gallery Template&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Calendar-Template-1-0&quot;&gt;Calendar Template&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In this release, we’ve also included a new template that doesn’t ship (yet) in WebMatrix.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://nuget.org/Packages/Packages/Details/Wishlist-Template-1-0&quot;&gt;WishList Template (C# only)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To run these templates, simply open an existing or create a new ASP.NET Web Pages app and navigate to (or click the “ASP.NET Web Pages Administration” link on your dashboard in WebMatrix), login to the admin, search for “template”, pick which package you want and install it.&amp;#160; This will put the contents of the template into a folder called “Microsoft Templates” in your app root.&amp;#160; Inside will be instructions to tell you to take the contents of that folder and move them to the root of your site.&amp;#160; This step is unfortunate, but required since NuGet or the ASP.NET Web Pages Administration app doesn’t currently allow you to override existing files.&amp;#160; Now run your site and you should see the template you installed.&lt;/p&gt;  &lt;p&gt;Jim Wang, who works on our team (and built the WishList Template), made a video on &lt;a href=&quot;http://weblogs.asp.net/jimwang/archive/2011/02/07/getting-wishlist-through-admin-in-webmatrix.aspx&quot;&gt;how to get WishList installed in less than a minute&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We hope these are helpful to get you started with ASP.NET Web Pages!&amp;#160; For those of you working with VB, we want to hear from you.&amp;#160; Are these templates helpful?&amp;#160; Anyone running ASP.NET Web Pages WITHOUT WebMatrix (or Visual Studio)?&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">IE 9 Windows Jump List ASP.NET Web Pages Helper</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/IE-9-Windows-Jump-List-ASPNET-Web-Pages-Helper"/>
    <id>http://erikporter.com/Blog/IE-9-Windows-Jump-List-ASPNET-Web-Pages-Helper</id>
    <updated>2010-09-15T20:40:15</updated>
    <published>2010-09-15T13:40:14.923</published>
    <author>
      <name>Erik</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I’m sure you’ve all heard today about the &lt;a href=&quot;http://bit.ly/d7UsEK&quot;&gt;beta release of IE 9&lt;/a&gt;.&amp;#160; It’s looking pretty good!&amp;#160; Did you see that you can &lt;a href=&quot;http://www.beautyoftheweb.com/#/experience/twitter&quot;&gt;integrate with the Windows Jump List now&lt;/a&gt;?&amp;#160; Neato!&amp;#160; &lt;a href=&quot;http://www.neowin.net/news/optimizing-your-site-for-internet-explorer-9039s-new-features-part-1&quot;&gt;Neowin has a write up&lt;/a&gt; on the meta tags you need to have to integrate with Windows.&amp;#160; Over lunch I wrote a quick helper in ASP.NET Web Pages (install &lt;a href=&quot;http://www.microsoft.com/web/webmatrix/&quot;&gt;WebMatrix&lt;/a&gt; via WebPI &lt;a href=&quot;http://www.microsoft.com/web/webmatrix/download/&quot;&gt;here&lt;/a&gt;) that you can just drop into your App_Code folder…&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:66eebd2c-361e-4d4a-bd1d-440bdcd116a0&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt; &lt;div style=&quot;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&quot;&gt; &lt;div style=&quot;background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px&quot;&gt;Code Snippet&lt;/div&gt; &lt;div style=&quot;background-color: #ffffff; max-height: 500px; overflow: auto; padding: 2px 5px; white-space: nowrap&quot;&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;using&lt;/span&gt; System;&lt;br&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;using&lt;/span&gt; System.Web;&lt;br&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;using&lt;/span&gt; System.Web.Mvc;&lt;br&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;using&lt;/span&gt; Microsoft.WebPages.Helpers;&lt;br&gt; &lt;br&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Windows&lt;/span&gt; {&lt;br&gt; &#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;static&lt;/span&gt; IHtmlString JumpListTask(&lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt; name, &lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt; actionUrl, &lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt; iconUrl) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HttpContext httpContext = HttpContext.Current;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;if&lt;/span&gt; (httpContext.Request.Browser.Browser == &lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;IE&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; httpContext.Request.Browser.Version.StartsWith(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;9&amp;quot;&lt;/span&gt;)) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(name)) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;ArgumentNullException&lt;/span&gt;(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(actionUrl)) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;ArgumentNullException&lt;/span&gt;(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;actionUrl&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&lt;br&gt; &lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(iconUrl)) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;ArgumentNullException&lt;/span&gt;(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;iconUrl&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&lt;br&gt; &lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;if&lt;/span&gt; (!(actionUrl.StartsWith(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;) || actionUrl.StartsWith(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;https://&amp;quot;&lt;/span&gt;))) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt; hostUrl = httpContext.Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;actionUrl = hostUrl + VirtualPathUtility.ToAbsolute(actionUrl);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&lt;br&gt; &lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TagBuilder html = &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; TagBuilder(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;meta&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;html.MergeAttribute(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;msapplication-task&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;html.MergeAttribute(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;name={0}; action-uri={1}; icon-uri={2}&amp;quot;&lt;/span&gt;, name, actionUrl, iconUrl));&lt;br&gt; &lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; HtmlString(html.ToString(TagRenderMode.SelfClosing));&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; HtmlString(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;}&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And then call it in your page…&lt;/p&gt;  &lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;   &lt;br /&gt;&amp;lt;html&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;head&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @Windows.JumpListTask(&amp;quot;Test&amp;quot;, &amp;quot;~/&amp;quot;, &amp;quot;fav.ico&amp;quot;)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/head&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;body&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/body&amp;gt;    &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;  &lt;p&gt;Not much to it, but hopefully some of you will find it handy.&amp;#160; Note: it does not render anything in browsers other than IE 9.&amp;#160; Maybe we can clean this up and put it in the next release of ASP.NET Web Pages.&amp;#160; :)&amp;#160; What do you think?&amp;#160; Do you have other ideas for helpers in ASP.NET Web Pages?&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Writing Helpers in ASP.NET Web Pages (Beta)</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Writing-Helpers-in-ASPNET-Web-Pages-Beta"/>
    <id>http://erikporter.com/Blog/Writing-Helpers-in-ASPNET-Web-Pages-Beta</id>
    <updated>2010-07-20T19:10:40.653</updated>
    <published>2010-07-20T12:10:40.62</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="WebMatrix" />
    <category term="ASPNET" />
    <category term="Razor" />
    <category term="ASPNETWebPages" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I’ve been seeing some people asking about how to write their own helpers in ASP.NET Web Pages.&amp;#160; If you’re not familiar with ASP.NET Web Pages or Razor be sure to check out &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx&quot;&gt;Scott Guthrie’s post&lt;/a&gt; announcing them.&amp;#160; I’m the PM for them.&amp;#160; :)&amp;#160; You can use &lt;a href=&quot;http://www.microsoft.com/web/webmatrix/&quot;&gt;WebMatrix&lt;/a&gt; (or Notepad or any text editor of your choice) to build web apps using ASP.NET Web Pages.&lt;/p&gt;  &lt;p&gt;First, let me overview how writing your own helper will be in the next version of ASP.NET Web Pages, then I’ll go over how you would go about writing them as of when this blog post went up.&lt;/p&gt;  &lt;h2&gt;Future @helper Usage (not in Beta)&lt;/h2&gt;  &lt;p&gt;In the next release of ASP.NET Web Pages you will be able to use our new @helper syntax to easily build new helpers.&amp;#160; The main scenario we’re trying to cover with this is simple.&amp;#160; Say you have a page with a little code/markup that you would like to reuse on other pages.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1f211786-3c6c-477e-862e-c7935fc668ef&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt; &lt;div style=&quot;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&quot;&gt; &lt;div style=&quot;background-color: #ffffff; overflow: auto; padding: 2px 5px;&quot;&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;DOCTYPE &lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Gravatar&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;img &lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Gravatar.GetUrl(&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;&amp;quot;someone@somewhere.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt; alt&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;=&amp;quot;Gravatar&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In the next version you will be able to simply do the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create a new file under App_Code in your app named Utilities.cshtml (this can be named anything) &lt;/li&gt;    &lt;li&gt;Cut the code/markup you’d like to reuse and place it into a method in the new file and replace any hard-coded values with any incoming parameters you have in your method. &lt;/li&gt;    &lt;li&gt;Call the new helper by the name of the file (Utilities in this example) and the name of the method &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here is what the Utilities.cshtml file would look like:&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:246eb5ec-737c-45d9-8a08-0fc497afe4a4&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt; &lt;div style=&quot;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&quot;&gt; &lt;div style=&quot;background-color: #ffffff; overflow: auto; padding: 2px 5px;&quot;&gt;&lt;span style=&quot;color:#000000&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;helper GetGravatarImage(string email) {&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;img &lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Gravatar.GetUrl(email)&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt; alt&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;=&amp;quot;Gravatar&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#232323&quot;&gt;}&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And here is what the original page would now look like using the new helper:&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e6a9c81d-4858-4cf9-b226-8b64771c29a4&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt; &lt;div style=&quot;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&quot;&gt; &lt;div style=&quot;background-color: #ffffff; overflow: auto; padding: 2px 5px;&quot;&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;DOCTYPE &lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Gravatar&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Utilities.GetGravatarImage(&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;&amp;quot;someone@somewhere.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;)&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Pretty straightforward and simple. Unfortunately, we’re still working on this feature.&amp;#160; It will be in the next release.&lt;/p&gt;  &lt;h2&gt;Writing a Helper Today in Beta&lt;/h2&gt;  &lt;p&gt;For the time being you can convert your code/markup into a static class, which is how we currently build helpers internally.&amp;#160; Here is an example:&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:42ab4a1b-f773-4699-b3db-ec1c54fb9139&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt; &lt;div style=&quot;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&quot;&gt; &lt;div style=&quot;background-color: #ffffff; overflow: auto; padding: 2px 5px;&quot;&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;using&lt;/span&gt; System.Web;&lt;br&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;using&lt;/span&gt; Microsoft.WebPages.Helpers;&lt;br&gt; &lt;br&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Utilities&lt;/span&gt; {&lt;br&gt; &#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;IHtmlString&lt;/span&gt; GetGravatarImage(&lt;span style=&quot;color:#0000ff&quot;&gt;string&lt;/span&gt; email) {&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;HtmlString&lt;/span&gt;(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;&amp;lt;img src=&amp;#92;&amp;quot;&amp;quot;&lt;/span&gt; + @Gravatar.GetUrl(email) + &lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;&amp;#92;&amp;quot; alt=&amp;#92;&amp;quot;Gravatar&amp;#92;&amp;quot; /&amp;gt;&amp;quot;&lt;/span&gt;);&lt;br&gt; &#160;&#160;&#160;&#160;}&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The most important thing to note here is that your method should return IHtmlString for things to get rendered properly.&amp;#160; How you build it internally doesn’t really matter.&amp;#160; In my simple example I just build a string and then wrap it up into a new instance of HtmlString (which is an implementation of HtmlString).&amp;#160; One other thing to note here is that I’m importing the Microsoft.WebPages.Helpers namespace because that’s where the Gravatar helper that I’m using exists.&lt;/p&gt;  &lt;p&gt;One other important thing to note is that while I’m building a string here because it’s such a simple solution, the better/safer way to do this is to &lt;a href=&quot;http://www.asp.net/mvc/tutorials/using-the-tagbuilder-class-to-build-html-helpers-cs&quot;&gt;build it using the TagBuilder&lt;/a&gt;, which is in MVC (and available in the Beta).&lt;/p&gt;  &lt;p&gt;The usage for this helper would be exactly the same as the new way stated above:&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:24facb84-631a-4891-940f-9b31b2e59662&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt; &lt;div style=&quot;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&quot;&gt; &lt;div style=&quot;background-color: #ffffff; overflow: auto; padding: 2px 5px;&quot;&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;DOCTYPE &lt;/span&gt;&lt;span style=&quot;color:#d75028&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Gravatar&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;Utilities.GetGravatarImage(&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;&amp;quot;someone@somewhere.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#232323&quot;&gt;)&lt;/span&gt;&lt;br&gt; &#160;&#160;&#160;&lt;span style=&quot;color:#232323&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#823125&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#4f76ac&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;So it’s still pretty easy to build your own, but unfortunately today you have to start learning some OOP concepts, which goes against our goal of simplicity and staying relatively procedural.&amp;#160; Can you see why we’re working on a newer syntax to help simplify this?&amp;#160; :)&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;Writing helpers isn’t too difficult but can be a lot of work if you’re trying to compartmentalize a lot of code/markup and requires you to understand more advanced concepts.&amp;#160; In the next release of ASP.NET Web Pages you will be able to simply cut and paste your code/markup that you want to reuse into a new file and use it.&lt;/p&gt;  &lt;p&gt;Do you like the new syntax?&amp;#160; What sorts of helpers are you building?&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Same Team, New Role at Microsoft</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/starting-my-new-job-as-a-pm-at-microsoft"/>
    <id>http://erikporter.com/Blog/starting-my-new-job-as-a-pm-at-microsoft</id>
    <updated>2010-04-19T18:19:34.817</updated>
    <published>2010-04-19T11:19:34.753</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="PM" />
    <category term="Orchard" />
    <category term="Microsoft" />
    <category term="Job" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Today is my first day as a PM (Program Manager) on the &lt;a href=&quot;http://asp.net&quot;&gt;ASP.NET&lt;/a&gt; team.&amp;#160; If you’ve been following any of the projects I’ve worked on at Microsoft like &lt;a href=&quot;http://oxite.net&quot;&gt;Oxite&lt;/a&gt; or &lt;a href=&quot;http://orchardproject.net&quot;&gt;Orchard&lt;/a&gt;, you may remember that I just joined the Orchard team as an SDE in November.&amp;#160; Why the fast move?&amp;#160; I’ve actually been interested in switching to the PM role for a couple years now, and the right opportunity happened to come up last week.&amp;#160; The fun part is, I’m still on the ASP.NET team, just in a completely different role.&amp;#160; It happened pretty fast.&amp;#160; On my birthday (April 9th) I started talking with the team about an open position.&amp;#160; Thursday of the next week they told me the job was mine.&amp;#160; On Friday, I was told “you start Monday”.&amp;#160; I am very excited to get started and ‘thrown into the fire’.&amp;#160; I can’t say what exactly I’ll be working on just yet, but it will be fun, no doubt.&lt;/p&gt;  &lt;p&gt;Does this mean I’m done with Orchard?&amp;#160; Absolutely not.&amp;#160; I love open source software at Microsoft and I think Orchard is a great project.&amp;#160; I will continue to give feedback and contribute in any way I can and have time for.&lt;/p&gt;  &lt;p&gt;I expect to finally get back to more blogging too.&amp;#160; Since joining Microsoft as a developer the amount I’ve blogged has steadily declined into nothingness.&amp;#160; Now that blogging will be one way to gather community feedback, it will definitely happen more often.&lt;/p&gt;  &lt;p&gt;My wife and I are expecting a baby girl in June (our second child).&amp;#160; The life changes just keep coming!&amp;#160; Exciting times.&amp;#160; :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Planning for the Next Oxite Release</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Planning-for-the-Next-Oxite-Release"/>
    <id>http://erikporter.com/Blog/Planning-for-the-Next-Oxite-Release</id>
    <updated>2009-06-22T06:46:42.77</updated>
    <published>2009-06-22T10:00:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="CodePlex" />
    <category term="Projects" />
    <category term="WebPlatformInstaller" />
    <category term="OxitevNext" />
    <category term="Extensibility" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;As many of you have been pointing out, it’s been a long time since the last Oxite release.&amp;#160; To be exact, it’s been 4 months today.&amp;#160; :|&amp;#160; For a piece of software, that isn’t much time at all.&amp;#160; For a web application, that can be pretty big.&amp;#160; We’re usually fast movers, but we made a decision a while back that we want to “go Beta” for the next release.&amp;#160; This means that the next release should be at least halfway comparable to the feature set of other blog engines out there and that non-developers should be able to run Oxite without much work.&amp;#160; Here are the 3 high level goals for the next release of Oxite:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Improve the admin (add missing features and improve the user experience) &lt;/li&gt;    &lt;li&gt;Build a great plug-in model (works well for non-devs and devs alike to build small new features on top of Oxite) &lt;/li&gt;    &lt;li&gt;Make installation easier (include Oxite in the &lt;a href=&quot;http://www.microsoft.com/web/gallery/&quot;&gt;Web App Gallery&lt;/a&gt;) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;With those goals in mind, here’s what we’re working on and how far along we are with each so you can get an idea how much more we have to go…&lt;/p&gt;  &lt;h2&gt;Required to ship&lt;/h2&gt;  &lt;p&gt;The following are items we will not ship without and how far along we are in their development.&lt;/p&gt;  &lt;h3&gt;Plug-in Model – 90%&lt;/h3&gt;  &lt;p&gt;There’s really too much to talk about with plug-ins here, but the gist of it is that anyone can use their favorite text editor to write a few lines of code, FTP up the file to their web server and run.&amp;#160; You can also use Oxite to edit the code file if your hoster will let you edit files through ASP.NET.&amp;#160; We will be including a few plug-ins out of the box so you can see how to build them and we’ll also have documentation when we ship (you can see the work in progress docs &lt;a href=&quot;http://oxite.codeplex.com/Wiki/View.aspx?title=Plugins&quot;&gt;here&lt;/a&gt;).&amp;#160; We have already demo’d plug-ins internally to a few teams and so far the response has been great.&amp;#160; We’re just in the process of finishing up a couple things and fixing last minute bugs.&lt;/p&gt;  &lt;h3&gt;Spam Filtering – 95%&lt;/h3&gt;  &lt;p&gt;We built a plug-in that will be included in the next release that calls out to a spam filtering service (like &lt;a href=&quot;http://akismet.com/&quot;&gt;Akismet&lt;/a&gt; or &lt;a href=&quot;http://antispam.typepad.com/&quot;&gt;TypePad AntiSpam&lt;/a&gt;) when new comments are added and verifies whether or not they are spam and removes any comments that are spam.&lt;/p&gt;  &lt;h3&gt;Site Setup Wizard – 15%&lt;/h3&gt;  &lt;p&gt;This feature has been designed and we’ve gone over the design with one of our new contributors who is going to handle the implementation.&amp;#160; We want to make setting up a new Oxite instance as simple as possible so walking through the wizard, you will be asked as little as possible to get Oxite running.&amp;#160; Afterwards, you can tweak Oxite’s settings to make it work the way you want it to.&lt;/p&gt;  &lt;h3&gt;User/Blog Management – 50%&lt;/h3&gt;  &lt;p&gt;We already have pages for adding, editing and removing users and blogs, however, we’re been doing a major overhaul to the admin area and we don’t expect these to be working at the moment.&amp;#160; As we overhaul the admin UX we are going to make some changes to the flow of these pages anyway.&lt;/p&gt;  &lt;h3&gt;Authorization Management – 50%&lt;/h3&gt;  &lt;p&gt;We have a permission API in place already for the new release, but we don’t have any UI in the admin for it yet.&amp;#160; Permissions are done by associating 3 things together: User, Role and Entity.&amp;#160; To make a person an owner of a blog to do whatever they want with it, you would associate the user with the admin role to a particular blog.&lt;/p&gt;  &lt;h3&gt;MetaWeblog API Improvements – 85%&lt;/h3&gt;  &lt;p&gt;In the new release, we’ve moved the MetaWeblog implementation from WCF to using MVC controller actions.&amp;#160; This makes future work simpler to implement and errors easier to bubble up.&amp;#160; This work is complete, but not fully test.&amp;#160; We will also be adding file support so you don’t have to use FTP for blog post images anymore.&lt;/p&gt;  &lt;h3&gt;Rich Text Editor – Complete (sort of)&lt;/h3&gt;  &lt;p&gt;So far, we’ve been unable to find a rich text editor that is compatible with the license of Oxite (Ms-PL) and built on jQuery.&amp;#160; In the meantime, we’ve implemented &lt;a href=&quot;http://markitup.jaysalvat.com/home/&quot;&gt;markItUp!&lt;/a&gt;&amp;#160; This will allow you to do simple formatting that most people will need.&amp;#160; In the near future, we will also be demonstrating how you can write your own plug-in to use your favorite rich text editor instead.&lt;/p&gt;  &lt;h3&gt;Contact Page – 0%&lt;/h3&gt;  &lt;p&gt;This is sort of a no brainer that we’ve somehow overlooked in past versions of Oxite.&amp;#160; All blogs have a contact page.&amp;#160; Oxite will join those ranks in the new version.&amp;#160; You know, the standard “enter your name and email and a message and I’ll send it to the site/blog owner” type of page.&lt;/p&gt;  &lt;h3&gt;Scale – 75%&lt;/h3&gt;  &lt;p&gt;Dumb caching has been implemented at the service level of Oxite.&amp;#160; What this means is that the results of calls to the repositories are now cached after the first time they’re called.&amp;#160; We invalidate cache by entity or entity type or sliding expiration.&amp;#160; The current cache service is implemented using ASP.NET Web Cache.&amp;#160; In the future, we will more than likely implement a Velocity cache service too for those who choose to use Velocity.&amp;#160; We will also probably make the caching a bit more smart and cache entities and query results instead of just straight query results.&lt;/p&gt;  &lt;h3&gt;Random Bugs and Admin UX Enhancements – 40%&lt;/h3&gt;  &lt;p&gt;We have a gazillion bugs we’ve fixed since the last release and are continuing to fix bugs (be sure to start a discussion on CodePlex and report them when you find them).&amp;#160; In this bucket, I am also including all of the admin work we’re doing.&amp;#160; We’ve added some cool things like dialogs (that work both service side and client side so they’ll work on phones and modern browsers alike), lots of new management pages, new UX around adding and editing posts and pages, etc.&amp;#160; The list goes on and on, but you’ll have to wait and see exactly what features get in the next release.&lt;/p&gt;  &lt;h3&gt;More Cleanup – 95%&lt;/h3&gt;  &lt;p&gt;We’ve done some more cleanup in this version of Oxite:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Database – Some tables have been cleaned up and reorganized to make the schema better match the data we store.&lt;/li&gt;    &lt;li&gt;Model – All of our model classes immutable so objects can never be in an incorrect state.&lt;/li&gt;    &lt;li&gt;Services – All add/edit/remove services have been modified to return generic result instances that include validation/model results to help keep validation in a single place.&lt;/li&gt;    &lt;li&gt;Controllers – All controller action parameters have been converted to &lt;em&gt;ENTITY&lt;/em&gt;Input or &lt;em&gt;ENTITY&lt;/em&gt;Address classes with ModelBinders to map the values appropriately, all validation has been pushed into the services and we now return ViewModels directly and have filters that convert them into the appropriate ViewResults.&lt;/li&gt;    &lt;li&gt;Views – Many views have been cleaned up and separated better.&amp;#160; The admin is now completely separate from the rest of the site and now renders HTML 5 instead of XHTML. Skinning the site is now simpler since the admin is not included in skinning anymore.&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Optional to ship&lt;/h2&gt;  &lt;p&gt;The following are items we would like to make time for, but if they take too long, we will ship the next release without them and put them in the next release.&amp;#160; These are ordered by priority.&lt;/p&gt;  &lt;h3&gt;Modules – 10%&lt;/h3&gt;  &lt;p&gt;We have a lot of the infrastructure in place, but have yet to fully design how modules will work in Oxite.&amp;#160; Basically, we want to break Oxite up into pieces (like IIS 7) so it’s easy to replace and build your own major chunks of Oxite.&amp;#160; Modules will be similar to plug-ins, but much more powerful and for those who are very familiar with .NET.&amp;#160; If you want to build forums on top of Oxite, a module would help you accomplish that.&amp;#160; Modules will be how you can get into the Oxite/MVC pipeline.&amp;#160; We’re really set on getting this into this release of Oxite, but if it ends up taking too long, we will cut it for this release.&lt;/p&gt;  &lt;h3&gt;Blog Management – 60%&lt;/h3&gt;  &lt;p&gt;While Oxite does support having more than one blog running in it, we haven’t yet optimized it when you go from one to two blogs.&amp;#160; To do this, there’s quite a bit of work involved like getting the dashboard to be aware of all blogs a user has access to, the menu needs to change in the admin, plug-ins need to have a way for site admins to specify which plug-ins are allowed to run and then blog owners need to be able to set their own settings on each plug-in that’s installed, etc.&amp;#160; This work is high priority on the optional list, but if it doesn’t make it in, it will in the next version.&lt;/p&gt;  &lt;h3&gt;Skin Engine Enhancements – 0%&lt;/h3&gt;  &lt;p&gt;While skinning is pretty great in Oxite, we have some ideas on how to improve it further to make scenarios like building an iPhone skin or optimizing Oxite for MSNBot or Google to index your site or making your site work in IE 6 even easier and better organized than it is today.&amp;#160; We will more than likely not get to this one for this version.&lt;/p&gt;  &lt;h3&gt;Threaded Commenting – 75%&lt;/h3&gt;  &lt;p&gt;Before we went off and implemented plug-ins we started down the path of adding threaded commenting so it’s easier to understand who is replying to who.&amp;#160; We got the server side implementation done, but not the client side implementation and it still needs to be properly tested.&amp;#160; Hopefully this one will make it in this release, but not making any promises.&lt;/p&gt;  &lt;h3&gt;AJAX Enhancements – 25%&lt;/h3&gt;  &lt;p&gt;We’ve done some work in the admin to make things work well client side, but still have some more we’d like to do as well as getting paging and commenting to work client side.&amp;#160; Nice to have, but not needed to ship.&lt;/p&gt;  &lt;h3&gt;Authorization Provider Model – 0%&lt;/h3&gt;  &lt;p&gt;Our authorization in Oxite is mostly separated out into its own thing, but there is still work to be done to enable anyone to build a module for their own authentication scheme (like OpenID, Live ID, Facebook Connect, etc).&amp;#160; This is another nice to have, but if it doesn’t make it in this version, it will be very high priority for the next version.&lt;/p&gt;  &lt;h3&gt;Exception Logging – 0%&lt;/h3&gt;  &lt;p&gt;This will make it much easier to debug problems when they come up for people, but is a nice to have and will not hold up shipping the next version if we don’t have time.&lt;/p&gt;  &lt;h3&gt;Unit Tests – 25%&lt;/h3&gt;  &lt;p&gt;For the most part, the Oxite team isn’t a TDD bunch, but we do see the importance of unit testing and will try to get more tests in there.&lt;/p&gt;  &lt;h2&gt;Post ship&lt;/h2&gt;  &lt;p&gt;After we ship the next release to CodePlex, we will be nearly immediately submitting Oxite to the Web App Gallery.&amp;#160; This will make it so those who want to just use Oxite and not go through the code can get Oxite up and running can get Oxite in a few clicks with the &lt;a href=&quot;http://www.microsoft.com/web/downloads/platform.aspx&quot;&gt;Web Platform Installer&lt;/a&gt;.&amp;#160; This is exciting stuff and will get Oxite out there much more than it is today.&lt;/p&gt;  &lt;h2&gt;Future&lt;/h2&gt;  &lt;p&gt;Even though we haven’t even started any development for these, I believe it’s important to understand where we’re going so we build the right things in the right priority.&amp;#160; These are items we’re beginning to plan, but would definitely love to hear feedback and eventually get help coding.&lt;/p&gt;  &lt;h3&gt;Oxite.net&lt;/h3&gt;  &lt;p&gt;This currently redirects to &lt;a href=&quot;http://visitmix.com/lab/oxite&quot;&gt;http://visitmix.com/lab/oxite&lt;/a&gt; (our home base).&amp;#160; &lt;a href=&quot;http://oxite.codeplex.com&quot;&gt;http://oxite.codeplex.com&lt;/a&gt; is the other place most people go to.&amp;#160; As we grow and need more features it will more than likely make sense to move the project to our own domain (oxite.net) and consolidate it all to one place (other than the source code).&amp;#160; Luckily, this will just be a DNS change since we already point to that domain for all our stuff.&amp;#160; This is not set in stone yet, but is our current intent.&amp;#160; We want oxite.net to be the page everybody goes to for information about features, documentation on how Oxite works, galleries for skins and plug-ins, etc.&lt;/p&gt;  &lt;h3&gt;Forums&lt;/h3&gt;  &lt;p&gt;This one comes up often and we think it’s a good idea.&amp;#160; Once Oxite modules are done, this becomes easier, but forums usually have a lot of features that blogs don’t (even though it’s still the same idea…post and then comment on the post).&lt;/p&gt;  &lt;h3&gt;Social&lt;/h3&gt;  &lt;p&gt;We don’t have user profile pages at all yet, nor anything like being able to add friends, etc.&amp;#160; That’s ok for now because there isn’t much of a reason for anybody to register on an Oxite site yet.&amp;#160; Anonymous users can comment and do just about anything an authenticated user could.&amp;#160; In the future we’d like there to be profiles and friends and some modules I can’t talk about yet.&amp;#160; :)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;None of this really even hints at a date for the next release.&amp;#160; That’s because we really never know when we’re going to work on Oxite.&amp;#160; Seems to be random as we have time.&amp;#160; We’re building momentum with Oxite.&amp;#160; In the last few weeks we’ve added more contributors to Oxite (5 to be exact and we have 2 more joining soon).&amp;#160; Some work for Microsoft, some don’t.&amp;#160; We need your help to continue building a great platform.&amp;#160; Go build something cool with Oxite and show it off.&amp;#160; We’re listening closely for individuals who know what they’re doing, build the right things and are very interested in our “little” project.&amp;#160; Show us your code!&amp;#160; :)&lt;/p&gt;  &lt;p&gt;So how do you think the next Oxite release is shaping up?&amp;#160; Useful?&amp;#160; Awesome?&amp;#160; Horrible?&amp;#160; Am I forgetting any other major features?&amp;#160; What will you build on top of Oxite?&amp;#160; Does it seem like something you’ll want to use?&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Oxite Plugin Extensibility Points Discussion</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Oxite-Plugin-Extensibility-Points-Discussion"/>
    <id>http://erikporter.com/Blog/Oxite-Plugin-Extensibility-Points-Discussion</id>
    <updated>2009-04-23T06:38:04.677</updated>
    <published>2009-04-22T23:37:57</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Plugins" />
    <category term="Community" />
    <category term="Extensibility" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Lately, I’ve been integrating some code built by another team at Microsoft, who will for now remain unidentified until they’re ready to make themselves known.&amp;#160; It’s a pretty cool plugins architecture that makes it super simple to build plugins.&amp;#160; It’s not fully baked yet so I’ve been filling in some pieces as I go, but the concepts are solid.&amp;#160; I’m still in the process of refactoring some things, but if you’d like to follow along at home, feel free to grab the &lt;a href=&quot;http://oxite.codeplex.com/SourceControl/ListDownloadableCommits.aspx&quot;&gt;latest checkin&lt;/a&gt;.&amp;#160; I make no promises that everything works perfectly and the UI for installing/uninstalling/editing plugins isn’t done yet.&amp;#160; You can actually run plugins with the latest code though.&lt;/p&gt;  &lt;p&gt;Today, I got our team together to brainstorm about plugins in &lt;a href=&quot;http://oxite.net&quot;&gt;Oxite&lt;/a&gt;.&amp;#160; I thought it might be handy to talk about some of the plugins we’d like to build, as well as some of the more popular plugins that have already been built for other blog engines.&amp;#160; We came up with a nice little list of some initial extensibility points we could have in Oxite.&amp;#160; Since I like to be pretty transparent with what we’re doing with Oxite (follow &lt;a href=&quot;http://twitter.com/HumanCompiler&quot;&gt;@HumanCompiler&lt;/a&gt; to keep up on Oxite) I tweeted about it:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://erikporter.com/PostImages/OxitePluginExtensibilityPointsDiscussion_13EE2/TwitterHumanCompiler1588629562.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;HumanCompiler Just sat down and laid out all the extensibility points Oxite will expose to plugin developers in the near future. Exciting!&quot; border=&quot;0&quot; alt=&quot;HumanCompiler Just sat down and laid out all the extensibility points Oxite will expose to plugin developers in the near future. Exciting!&quot; src=&quot;http://erikporter.com/PostImages/OxitePluginExtensibilityPointsDiscussion_13EE2/TwitterHumanCompiler1588629562_thumb.png&quot; width=&quot;597&quot; height=&quot;289&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Javier tweeted back pretty quickly:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://erikporter.com/PostImages/OxitePluginExtensibilityPointsDiscussion_13EE2/Twitterjglozano1588695624.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;jglozano @HumanCompiler sounds awesome! Would love to hear about it!&quot; border=&quot;0&quot; alt=&quot;jglozano @HumanCompiler sounds awesome! Would love to hear about it!&quot; src=&quot;http://erikporter.com/PostImages/OxitePluginExtensibilityPointsDiscussion_13EE2/Twitterjglozano1588695624_thumb.png&quot; width=&quot;599&quot; height=&quot;214&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That’s a great idea, Javier!&amp;#160; Even better, I’ll share the list we’ve come up with so far AND get the community involved.&amp;#160; I’d like to get your feedback!&amp;#160; So here’s the list we have so far:&lt;/p&gt;  &lt;h3&gt;Events&lt;/h3&gt;  &lt;p&gt;&lt;em&gt;These provide a way for plugins to be notified when something happens.&amp;#160; One might write a plugin so when a new comment is added to a blog post, it sends a txt msg to the post author (using the CommentAdded event).&amp;#160; Another example might be a plugin displays a “How to Use Your New Blog” page to a user who just signed up for a blog on your site (using the AreaAdded event).&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;AreaAdded &lt;/li&gt;    &lt;li&gt;AreaEdited &lt;/li&gt;    &lt;li&gt;AreaRemoved &lt;/li&gt;    &lt;li&gt;PostAdded &lt;/li&gt;    &lt;li&gt;PostEdited &lt;/li&gt;    &lt;li&gt;PostRemoved &lt;/li&gt;    &lt;li&gt;PostPublished &lt;/li&gt;    &lt;li&gt;PostUnpublished &lt;/li&gt;    &lt;li&gt;PostViewed &lt;/li&gt;    &lt;li&gt;CommentAdded &lt;/li&gt;    &lt;li&gt;CommentApproved &lt;/li&gt;    &lt;li&gt;CommentRemoved &lt;/li&gt;    &lt;li&gt;CommentSpamCheck &lt;/li&gt;    &lt;li&gt;PageAdded &lt;/li&gt;    &lt;li&gt;PageEdited &lt;/li&gt;    &lt;li&gt;PageRemoved &lt;/li&gt;    &lt;li&gt;PagePublished &lt;/li&gt;    &lt;li&gt;PageUnpublished &lt;/li&gt;    &lt;li&gt;TrackbackReceived &lt;/li&gt;    &lt;li&gt;PingbackReceived &lt;/li&gt;    &lt;li&gt;UserLoggedIn &lt;/li&gt;    &lt;li&gt;UserLoggedOut &lt;/li&gt;    &lt;li&gt;UserSearched &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Processing Methods&lt;/h3&gt;  &lt;p&gt;&lt;em&gt;I wasn’t sure what to call these actually.&amp;#160; WordPress calls them Filters, but that didn’t seem totally appropriate.&amp;#160; I’m open to names if you have any.&amp;#160; Basically, these are methods that plugins can hook into to do processing on an Oxite entity like a Post, Comment, User, etc.&amp;#160; One example might be a plugin that takes code blocks in all post bodies and properly formats them before being rendered by the view.&amp;#160; Maybe a plugin that applies a time of day mod to the currently selected skin.&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ProcessPostInput &lt;/li&gt;    &lt;li&gt;ProcessPostDisplay &lt;/li&gt;    &lt;li&gt;ProcessCommentInput &lt;/li&gt;    &lt;li&gt;ProcessCommentDisplay &lt;/li&gt;    &lt;li&gt;ProcessNewTag &lt;/li&gt;    &lt;li&gt;ProcessMarkup &lt;/li&gt;    &lt;li&gt;SelectSkin &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So what do you think?&amp;#160; Is this list a good start?&amp;#160; Are any of these completely pointless?&amp;#160; What others would you use in writing your own plugins?&amp;#160; Is the naming easy to understand?&amp;#160; What plugins would you develop if the sky was the limit?&amp;#160; Share your thoughts.&amp;#160; We’re listening.&amp;#160; :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Channel 9 Turns 5!</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Channel-9-Turns-5"/>
    <id>http://erikporter.com/Blog/Channel-9-Turns-5</id>
    <updated>2009-04-06T18:13:47.777</updated>
    <published>2009-04-06T11:11:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <content type="html" xml:lang="en">
      &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt; turns 5 today.  We&#39;ve got a new skin and videos to celebrate.&lt;br /&gt;&lt;br /&gt;

&lt;object data=&quot;data:application/x-silverlight-2,&quot; type=&quot;application/x-silverlight-2&quot; width=&quot;320&quot; height=&quot;240&quot;&gt;
&lt;param name=&quot;source&quot; value=&quot;http://channel9.msdn.com/App_Themes/default/VideoPlayer2009_02_24.xap&quot; /&gt;
&lt;param name=&quot;initParams&quot; value=&quot;m=mms://mschnlnine.wmod.llnwd.net/a1809/d1/ch9/5/9/6/3/6/4/C9BDay5DonBoxChrisAnderson_s_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/5/9/6/3/6/4/C9BDay5DonBoxChrisAnderson_large_ch9.png, postid=463695&quot; /&gt;
&lt;param name=&quot;background&quot; value=&quot;#00FFFFFF&quot; /&gt;
&lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=124807&quot; style=&quot;text-decoration: none;&quot;&gt;
&lt;img src=&quot;http://go.microsoft.com/fwlink/?LinkId=108181&quot; alt=&quot;Get Microsoft Silverlight&quot; style=&quot;border-style: none&quot;/&gt;
&lt;/a&gt;
&lt;/object&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Oxite.2009.2.15 Released</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Oxite20090215-Released"/>
    <id>http://erikporter.com/Blog/Oxite20090215-Released</id>
    <updated>2009-02-20T04:30:41.477</updated>
    <published>2009-02-18T16:12:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Oxite2009215" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;We’ve been hard at work over the last month working to refactor Oxite.&amp;#160; We received a lot of community feedback about how we organized the code in Oxite.&amp;#160; I don&#39;t want to go into too much detail, but want to be completely transparent (I’m from the &lt;a href=&quot;http://channel9.msdn.com/&quot;&gt;Channel 9&lt;/a&gt; team, would you expect anything less?) about how Oxite came to be.&amp;#160; Oxite was a side project by a couple of us that just thought it would be cool to release some of our code that was reusable, showed off the ability to control your markup 100% and was more than a sample (something people could actually ship on if they wanted to).&amp;#160; It obviously got expanded into more than that, but just wanted to share a little behind the “how, when, who and why” of Oxite.&amp;#160; For a more in-depth explanation, check out &lt;a href=&quot;http://duncanmackenzie.net/Blog/Responding-to-feedback-on-Oxite&quot;&gt;Duncan’s post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Back to the community feedback, although some of it was taken a bit too far, overall the community was right and we decided it was necessary to begin a large refactor to get our code more inline with &lt;a href=&quot;http://asp.net/mvc&quot;&gt;ASP.NET MVC&lt;/a&gt;.&amp;#160; Sampy has a post (&lt;a href=&quot;http://www.sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-1&quot;&gt;Part 1&lt;/a&gt; and &lt;a href=&quot;http://www.sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-2&quot;&gt;Part 2&lt;/a&gt;) about the architectural changes we’ve made in this release of Oxite.&amp;#160; You should check out.&amp;#160; He also started an &lt;a href=&quot;http://www.codeplex.com/oxite/Wiki/View.aspx?title=architecture&amp;amp;referringTitle=Home&quot;&gt;Oxite Architecture&lt;/a&gt; page on CodePlex.&amp;#160; I don’t think there’s a single line in Oxite that hasn’t been touched.&amp;#160; As with all projects, we will continue to evolve it moving forward.&amp;#160; We’ve discovered a few places where our current architecture has a few things that don’t work out perfectly.&amp;#160; In the next release we will address some of this, but they will be much smaller changes than in this release.&lt;/p&gt;

&lt;h3&gt;What We Refactored&lt;/h3&gt;

&lt;p&gt;Besides &amp;quot;everything&amp;quot;, well, we added dependency injection (much needed).&amp;#160; We already had things like our Controllers setup for this, we just hadn&#39;t taken the final step to add it.&amp;#160; Now that we are using it in lots of places, and things are much simpler and easier to setup now.&amp;#160; We get the added benefit of being able to replace anything that is loaded through DI with a web.config (or code) change.&amp;#160; You can replace everything from our Routes to Controllers to ActionFilters to Repositories.&amp;#160; Be sure to read &lt;a href=&quot;http://www.sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-1&quot;&gt;Sampy&#39;s post&lt;/a&gt;.&amp;#160; He has a section on DI.&lt;/p&gt;

&lt;p&gt;The model has also been cleaned up to make more sense.&amp;#160; Before, we were using interfaces for everything to get around LINQ to SQL building it&#39;s own concrete types, but this was problematic.&amp;#160; Now we just have our own concrete types.&amp;#160; Unfortunately, because we can&#39;t easily manipulate LINQ to SQL with different query options before the statement is executed and still get our types back, we have to project them to our types.&amp;#160; A little painful, but not too bad.&lt;/p&gt;

&lt;p&gt;Another big complaint we addressed was that our Controller Actions were being used like the Page Load method in WebForms.&amp;#160; We were brand new to MVC when we started Oxite and it was an honest mistake that I think those new to MVC will make.&amp;#160; With the model and repositories cleaned up it and the addition of ActionFilters, we were able to get almost all of our Controller Actions shrunk down so they follow &lt;a href=&quot;http://en.wikipedia.org/wiki/Single_responsibility_principle&quot;&gt;SRP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We&#39;ve also added quite a few ActionFilters that help us build up the ViewModel and fill things out for the Controller Actions for us.&amp;#160; These are where all our code to do additional things on the page have gone like filling in the sidebar data.&amp;#160; We also created an ActionFilter registry class that Sampy will probably explain more soon, for specifying when ActionFilters are executed.&lt;/p&gt;

&lt;p&gt;The last major thing I can think of that we cleaned up were the Views.&amp;#160; To be clear, what the Views produced was always very clean.&amp;#160; What I mean is we cleaned up the code and markup in the Views to use more HtmlHelpers when appropriate.&amp;#160; At the same time we also split more views apart and rearranged where they live to make more sense and to ensure we don&#39;t have repeated markup/code anywhere.&amp;#160; This helps make skinning easier.&lt;/p&gt;

&lt;p&gt;With all this refactoring, we still managed to stabilize current features, add new features and simplify deployment.&amp;#160; The refactor was our only goal for this release, but some of us really care what features Oxite has and want to improve on it with every release.&amp;#160; Lot’s of late nights, but well worth it.&amp;#160; Now that we’re all also running Oxite as our blogs we will continue to find/fix bugs and add new features.&amp;#160; Let’s go over old and new features.&lt;/p&gt;

&lt;h3&gt;Oxite Features&lt;/h3&gt;

&lt;p&gt;So we’ve got all the basics you’d expect in a blog:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Posts &lt;/li&gt;

  &lt;li&gt;Commenting &lt;/li&gt;

  &lt;li&gt;Tagging &lt;/li&gt;

  &lt;li&gt;Content pages &lt;/li&gt;

  &lt;li&gt;RSS and ATOM feeds everywhere (All up, Blog, Tag, Comment, etc) &lt;/li&gt;

  &lt;li&gt;Trackbacks (sending/receiving) and Pingbacks (receiving) &lt;/li&gt;

  &lt;li&gt;Email subscriptions &lt;/li&gt;

  &lt;li&gt;Sitemaps &lt;/li&gt;

  &lt;li&gt;Search &lt;/li&gt;

  &lt;li&gt;Metaweblog API support (use Windows Live Writer, etc to post to Oxite) &lt;/li&gt;

  &lt;li&gt;Web admin 
    &lt;ul&gt;
      &lt;li&gt;All up dashboard &lt;/li&gt;

      &lt;li&gt;Manage site &lt;/li&gt;

      &lt;li&gt;Manage areas (blogs) &lt;/li&gt;

      &lt;li&gt;Add/Edit Posts/Pages &lt;/li&gt;

      &lt;li&gt;Manage comments &lt;/li&gt;

      &lt;li&gt;BlogML import &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No need to go over those in detail since they&#39;re very standard these days.&amp;#160; We also have some other features that are either unique to Oxite or are just nice to have and not necessarily in every blog engine.&amp;#160; I&#39;ll let you be the judge which are which.&lt;/p&gt;

&lt;h4&gt;Background Services&lt;/h4&gt;

&lt;p&gt;Background services are basically classes that are wrapped by an executor that calls a Run method in a timer so it&#39;s run on a separate thread.&amp;#160; You might be asking why a web app would need this.&amp;#160; Most other blog engines don&#39;t do this, why Oxite?&amp;#160; Personal preference around user experience is the short answer.&amp;#160; The slightly longer answer is that we think it&#39;s a bad idea to hold up a page request to go off and do something intensive or dependent on a potentially long running task (like post to another website).&amp;#160; I&#39;ll use the two background services we ship with as examples of what I mean by that: SendTrackbacks and SendMessages.&amp;#160; SendTrackbacks is a service that simply takes any outbound trackbacks that were generated from creating or editing a post and sends them.&amp;#160; You say, &amp;quot;This seems like a really simple task. Why not just have that happen when you add/edit a post?&amp;quot;&amp;#160; Good question.&amp;#160; It IS a really simple task.&amp;#160; There&#39;s not much code in the service.&amp;#160; However, the work done in that service can take a while and is dependent on the sites that you linked to.&amp;#160; Submitting a new post could be infinitely held up by all those requests and only gets worse the more sites you link to (to get a response back from them).&amp;#160; SendMessages exists for the same reasons.&amp;#160; It&#39;s purpose is to take a generated list of emails and send them through SMTP.&amp;#160; Again, super simple and barely any code at all, but if you have a lot of people with email subscriptions set up or your SMTP server goes down or is slow this could take a really long time.&amp;#160; Background services move the load to the background so the user&#39;s request isn&#39;t held up.&lt;/p&gt;

&lt;h4&gt;Multiple Site Storage in Single Database&lt;/h4&gt;

&lt;p&gt;This is mostly a feature that we&#39;ve found important over the years to what we do, but thought it would be helpful to others.&amp;#160; In the web.config &amp;lt;appSettings&amp;gt; you can specify a &amp;quot;SiteName&amp;quot; that is a unique string in the database for the current application&#39;s instance name.&amp;#160; Since all posts, content pages, blogs, etc are all scoped by that name, you can store many sites in the same database.&amp;#160; This may or may not be useful depending on your hosting situations.&lt;/p&gt;

&lt;h4&gt;Skinning&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://asp.net/mvc&quot;&gt;ASP.NET MVC&lt;/a&gt; is perfect for skinning.&amp;#160; We built our own little skin engine that basically just helps the view engine decide where to look for WebForms, Styles and Scripts.&amp;#160; If you just want to create a skin just with CSS that&#39;s super simple.&amp;#160; If you want to create a skin with CSS and override some of the default Views, that is also really simple.&amp;#160; Check out &lt;a href=&quot;http://www.codeplex.com/oxite/Wiki/View.aspx?title=Skinning&amp;amp;referringTitle=Home&quot;&gt;Nathan&#39;s page on CodePlex about How to Skin Oxite&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Web Standards Compliant&lt;/h4&gt;

&lt;p&gt;From day 1 when we started building the &lt;a href=&quot;http://visitmix.com&quot;&gt;MIX Online&lt;/a&gt; site we found that &lt;a href=&quot;http://asp.net/mvc&quot;&gt;ASP.NET MVC&lt;/a&gt; was great for controlling your markup and have taken advantage of that in Oxite to ensure we are XHTML 1.0 Strict compliant as well as having our CSS, RSS and ATOM validate.&amp;#160; Go out and compare Oxite to other blog engines and see how well or not well they validate.&amp;#160; Take it a step further and compare Oxite to major websites out there.&amp;#160; Fun!&amp;#160; Beyond being compliant with web standards our markup is semantic.&amp;#160; This is just a good thing to be overall, but can also make skinning much easier as the classes properly describe the content they are attributed to.&amp;#160; Hats off to &lt;a href=&quot;http://nathan.heskew.com/&quot;&gt;Nathan&lt;/a&gt;!&amp;#160; Be sure to check out &lt;a href=&quot;http://visitmix.com/Articles/Web-Standards-Where-the-ROI-is&quot;&gt;Web Standards: Where the ROI is&lt;/a&gt; by &lt;a href=&quot;http://www.molly.com/&quot;&gt;Molly Holzschlag&lt;/a&gt; and &lt;a href=&quot;http://visitmix.com/Articles/Web-Design-from-the-Gut&quot;&gt;Web Design from the Gut&lt;/a&gt; by &lt;a href=&quot;http://www.rainypixels.com/&quot;&gt;Nishant Kothary&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;What&#39;s Next&lt;/h3&gt;

&lt;p&gt;Now that we&#39;ve got most of the refactoring done and are more solid across the board, what&#39;s next?&amp;#160; Lots!&amp;#160; Our team can&#39;t devote time to working on Oxite unless it is related to one of our projects (like it was for &lt;a href=&quot;http://visitmix.com/&quot;&gt;MIX Online&lt;/a&gt;).&amp;#160; It just so happens this month&#39;s work relates to Oxite for our next project so we will be making improvements.&amp;#160; We will be creating the new Session Browser for &lt;a href=&quot;http://2009.visitmix.com/&quot;&gt;MIX&lt;/a&gt; and it will be running Oxite.&amp;#160; Out of this, the new feature we&#39;ll be adding is files.&amp;#160; This was one of the few features we had in the first version of Oxite, but had to cut.&amp;#160; It&#39;s coming back in the next release because we need it for the session browser.&amp;#160; This includes being able to upload new files and associate them (or existing files at any URL) with a post.&amp;#160; We think that&#39;s valuable in a blogging platform (and of course for us) so we&#39;ll be adding it for the next release.&amp;#160; We will also be refactoring a few more things as we go.&amp;#160; On a personal level here are the things we will be working on in our spare time:&lt;/p&gt;

&lt;h4&gt;Plugins&lt;/h4&gt;

&lt;p&gt;Plugins will allow a developer to build new functionality on top of Oxite and allow someone running Oxite to drag-drop-run this new functionality.&amp;#160; Some of you may have noticed there are some plugin classes in Oxite today.&amp;#160; These were just the start and we ran out of time to finish that feature.&amp;#160; We will finish them off in the next release to make it super simple to tack on little pieces of functionality (everything from adding Routes, ActionFilters and Controllers to keeping track of settings for the plugin and making them installable) to Oxite.&lt;/p&gt;

&lt;h4&gt;Skin Variations&lt;/h4&gt;

&lt;p&gt;We will be adding the ability to create subfolders under a skin with addition Styles and Scripts (and potentially other subfolders for other sub-variations) to create variations of skins.&amp;#160; These variations will &amp;quot;inherit&amp;quot; all the Styles and Scripts from its parent skin.&amp;#160; We&#39;ve found lots of skins that would look great with tweaked colors, fonts, etc.&amp;#160; At the same time, we will also be modifying the site settings page to make selecting a skin and optionally a variation strongly typed (ex. dropdown lists).&lt;/p&gt;

&lt;h4&gt;Rich Text Editor (RTE)&lt;/h4&gt;

&lt;p&gt;Without a RTE in the web admin, it can be a bit difficult to craft your own HTML by hand.&amp;#160; For now, we suggest you use something like &lt;a href=&quot;http://writer.live.com/&quot;&gt;Windows Live Writer&lt;/a&gt; to post to Oxite.&amp;#160; Eventually we&#39;d like to add RTE to the plugin side of things so you can decide which RTE you&#39;d like to use.&amp;#160; We&#39;d also like to find an RTE that we can ship out of the box with Oxite, but it&#39;s difficult to find one with a license that agrees with MS-PL.&lt;/p&gt;

&lt;h4&gt;Trackback validation service and trackbacks display&lt;/h4&gt;

&lt;p&gt;We&#39;re currently keeping track of inbound and outbound trackbacks, but we don&#39;t currently validate that received trackbacks are valid (ex. did the site actually link to you or is this just spam), nor do we show trackbacks anywhere in the default skin.&amp;#160; This is what we&#39;ll be implementing.&lt;/p&gt;

&lt;h4&gt;User/Role Management&lt;/h4&gt;

&lt;p&gt;This is an area we dropped the ball on with this version of Oxite.&amp;#160; Our &amp;quot;authorization&amp;quot; model right now is basically &amp;quot;can you log into Oxite?&amp;#160; Ok, then you can do whatever you want.&amp;quot;&amp;#160; For most this is fine since you&#39;re usually just using Oxite for a single blog.&amp;#160; In the cases where you&#39;d like to have more than one blogger on your site (family website, company website, etc) this is crucial to be able to set permissions to blogs and other stuff and we will be adding it back.&lt;/p&gt;

&lt;h4&gt;Content Page Management&lt;/h4&gt;

&lt;p&gt;There is currently no UI for displaying what content pages are available on your site (other than the dropdown list for picking which page is the parent of the current page you&#39;re adding/editing) so you can move/remove them.&amp;#160; We haven&#39;t figured out if we&#39;re going to use a tree view or something else for this, but it is needed and has already been brought up in the community.&lt;/p&gt;

&lt;h4&gt;Other View Engines&lt;/h4&gt;

&lt;p&gt;We are investigating other view engines.&amp;#160; WebForms in MVC is great, but sometimes it isn&#39;t a great fit, especially when you want a designer to work on the views.&amp;#160; &lt;a href=&quot;http://dev.dejardin.org/&quot;&gt;Spark&lt;/a&gt; is one of them that we&#39;re investigating.&amp;#160; If anything, we will at least get back to following MVC and allowing other view engines to be registered and used.&lt;/p&gt;

&lt;h4&gt;Mobile Views&lt;/h4&gt;

&lt;p&gt;Because of our good markup that we render, viewing an Oxite site from a phone is a decent experience.&amp;#160; It is readable.&amp;#160; We want to do more.&amp;#160; You should be able to control your markup without a lot of work that gets sent to phones and this is what we&#39;ll enable.&lt;/p&gt;

&lt;p&gt;This list will take us a bit.&amp;#160; If I had to guess I&#39;d say 2 or 3 months to finish off that list (there will be many release in between).&amp;#160; Keep in mind this is just as we have time (an evening here and there) and it&#39;s possible and likely that this list will change over time.&amp;#160; I&#39;d love to hear what features you all think are important.&lt;/p&gt;

&lt;h3&gt;Where to Get Oxite&lt;/h3&gt;

&lt;p&gt;If you’ve read this far and want to checkout Oxite, please visit &lt;a href=&quot;http://oxite.codeplex.com/&quot;&gt;Oxite on CodePlex&lt;/a&gt;.&amp;#160; The latest release can be found &lt;a href=&quot;http://www.codeplex.com/oxite/Release/ProjectReleases.aspx?ReleaseId=23315&quot;&gt;here&lt;/a&gt;.&amp;#160; Be sure to go through the &lt;a href=&quot;http://www.codeplex.com/oxite/Wiki/View.aspx?title=gettingstarted&amp;amp;referringTitle=Home&quot;&gt;Setting up Oxite&lt;/a&gt; page as there are dependencies to run Oxite.&amp;#160; If you end up running it publicly somewhere, &lt;a href=&quot;http://www.codeplex.com/oxite/Wiki/View.aspx?title=oxitesites&amp;amp;referringTitle=Home&quot;&gt;let us know and we&#39;ll add your site to our list of sites running Oxite&lt;/a&gt;.&amp;#160; If you create a skin you want to share it, &lt;a href=&quot;http://www.codeplex.com/oxite/Wiki/View.aspx?title=skins&amp;amp;referringTitle=Home&quot;&gt;let us know and we&#39;ll post it up for others to find&lt;/a&gt;.&amp;#160; If you have feedback for us or just want to discuss Oxite, &lt;a href=&quot;http://www.codeplex.com/oxite/Thread/List.aspx&quot;&gt;start a discussion on CodePlex&lt;/a&gt;.&amp;#160; If you think it&#39;s lame that I use the default skin for Oxite (I do and it&#39;s lame), make a hot looking skin and I&#39;ll use it for my site and give you credit!&lt;/p&gt;

&lt;h3&gt;How to Keep Up on Oxite&lt;/h3&gt;

&lt;p&gt;Many of us are on Twitter and we talk about Oxite.&amp;#160; You can follow me on Twitter &lt;a href=&quot;http://twitter.com/humancompiler&quot;&gt;here&lt;/a&gt;.&amp;#160; &lt;a href=&quot;http://erikporter.com&quot;&gt;My blog&lt;/a&gt; will also be a good thing to &lt;a href=&quot;http://erikporter.com/RSS&quot;&gt;follow&lt;/a&gt; as I&#39;ll be talking about Oxite as we progress.&amp;#160; Oxite on CodePlex will also be a great place to watch since they have &lt;a href=&quot;http://www.codeplex.com/oxite/Thread/List.aspx&quot;&gt;discussions&lt;/a&gt;, an &lt;a href=&quot;http://www.codeplex.com/oxite/WorkItem/List.aspx&quot;&gt;issue tracker&lt;/a&gt; and &lt;a href=&quot;http://www.codeplex.com/oxite/Project/ProjectRss.aspx?ProjectRSSFeed=codeplex%3a%2f%2frelease%2foxite&quot;&gt;RSS for Releases&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;What Now?&lt;/h3&gt;

&lt;p&gt;I have some other &amp;quot;hidden&amp;quot; features I&#39;m going to blog about soon, but what do you want to see blogged about next?&amp;#160; What isn&#39;t clear in Oxite?&amp;#160; What&#39;s hard to use?&amp;#160; What things do you want to learn how to customize?&amp;#160; Any other questions you have, please leave a comment and I&#39;ll address them.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">My Blog Moved (to ErikPorter.com Running Oxite)</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/My-Blog-Moved-to-ErikPorterdotcom-Running-Oxite"/>
    <id>http://erikporter.com/Blog/My-Blog-Moved-to-ErikPorterdotcom-Running-Oxite</id>
    <updated>2009-02-16T19:58:27.603</updated>
    <published>2009-02-16T11:51:19</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Blog" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      Alrighty, so now that I&#39;m dogfooding my own code it&#39;s time to get back to blogging and talking about Oxite and other stuff our team works on. Unfortunately, first I need to finish off my site. As of this writing it is running plain old vanilla Oxite with nothing changed (other than my data).  I still need to add a few things like analytics, tweets to my sidebar, about page text, etc.&lt;br /&gt;&lt;br /&gt;
Once I get all of that I&#39;ll be putting up a blog post about the &lt;a href=&quot;http://www.codeplex.com/oxite/Release/ProjectReleases.aspx?ReleaseId=23315&quot;&gt;new version of Oxite we released last night&lt;/a&gt;. After that, I&#39;ll blog about some of the features we currently have that are not really documented.&lt;br /&gt;&lt;br /&gt;
My blog has moved from &lt;a href=&quot;http://weblogs.asp.net/eporter&quot;&gt;there&lt;/a&gt; to &lt;a href=&quot;http://erikporter.com&quot;&gt;here&lt;/a&gt; (if you happen to be looking for my old content).
    </content>
  </entry>
  <entry>
    <title type="html">Bill Gates: Transitioning into the Future</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/bill-gates-transitioning-into-the-future"/>
    <id>http://erikporter.com/Blog/bill-gates-transitioning-into-the-future</id>
    <updated>2009-02-14T05:45:47.733</updated>
    <published>2008-06-23T17:02:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <category term="BillGates" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;Bill Gates is leaving and Charles from Channel 9 has a great interview with Bill.&lt;/P&gt;&lt;IFRAME src=&quot;http://channel9.msdn.com/posts/Charles/410233/player/&quot; frameBorder=0 width=320 scrolling=no height=325 mce_src=&quot;http://channel9.msdn.com/posts/Charles/410233/player/&quot;&gt;&lt;/IFRAME&gt;&lt;BR&gt;&lt;A href=&quot;http://channel9.msdn.com/posts/Charles/Bill-Gates-Transitioning-into-the-Future/&quot; mce_href=&quot;http://channel9.msdn.com/posts/Charles/Bill-Gates-Transitioning-into-the-Future/&quot;&gt;Bill Gates: Transitioning into the Future&lt;/A&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Life at Microsoft</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/life-at-microsoft"/>
    <id>http://erikporter.com/Blog/life-at-microsoft</id>
    <updated>2009-02-14T05:45:47.263</updated>
    <published>2008-02-12T22:29:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel10" />
    <category term="Microsoft" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;I had the pleasure of &quot;acting&quot; with some fellow &#39;softies to create this fun video about the misconceptions that people have with Microsoft.&lt;/P&gt;
&lt;P&gt;&lt;IFRAME src=&quot;http://on10.net/blogs/tina/Life-At-Microsoft/player/&quot; frameBorder=0 width=320 scrolling=no height=325 mce_src=&quot;http://on10.net/blogs/21054/player/&quot;&gt;&lt;/IFRAME&gt;&lt;BR&gt;&lt;A href=&quot;http://on10.net/blogs/tina/Life-At-Microsoft/&quot; mce_href=&quot;http://on10.net/blogs/tina/Life-At-Microsoft/&quot;&gt;Life At Microsoft - The Truth Revealed&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;It was a lot of fun to run around with nerf guns, kick people, yell and scream.&amp;nbsp; Tina, can we do it again?&amp;nbsp; :)&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ASP.NET AJAX BUG: $addHandler Can&#39;t Attach to Element Inside an IFrame in Internet Explorer</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/asp-net-ajax-bug-addhandler-can-t-attach-to-element-inside-an-iframe-in-internet-explorer"/>
    <id>http://erikporter.com/Blog/asp-net-ajax-bug-addhandler-can-t-attach-to-element-inside-an-iframe-in-internet-explorer</id>
    <updated>2009-02-14T05:45:45.673</updated>
    <published>2008-01-17T09:32:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="ASPNETAJAX" />
    <category term="Bug" />
    <category term="addHandler" />
    <category term="InternetExplorer" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;I have an iframe on my page and an html page that&#39;s loaded in it (from the same domain) and an anchor tag is clicked in the iframe I want to execute some code on my page on the client.&amp;nbsp; In the Initialize method in my client object I call $addHandler and pass in the anchor tag from inside the iframe, &#39;click&#39; (to attach to the onclick of the anchor tag)&amp;nbsp;and my delegate.&amp;nbsp; I run the code in Firefox.&amp;nbsp; Everything works great.&amp;nbsp; I go to Internet Explorer and run it and when I click on the anchor tag inside of the iframe I get an error of &quot;Sys.ArgumentNullException: Value cannot be null. Parameter name: eventObject&quot;.&amp;nbsp; A quick search turned up this gem of a workaround:&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;&lt;A class=&quot;&quot; href=&quot;http://forums.asp.net/t/1037669.aspx&quot; mce_href=&quot;http://forums.asp.net/t/1037669.aspx&quot;&gt;Bug with $addHandler applied to element in an iFrame&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;I hope the ASP.NET team fixes this in future versions of ASP.NET AJAX, but for now this will work.&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">CES: Bill Gates Leaving Microsoft Video</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/ces-bill-gates-leaving-microsoft-video"/>
    <id>http://erikporter.com/Blog/ces-bill-gates-leaving-microsoft-video</id>
    <updated>2009-02-14T05:45:45.33</updated>
    <published>2008-01-07T22:22:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel10" />
    <category term="BillGates" />
    <category term="CES" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;This is a great video that was shown at CES&lt;/P&gt;&lt;IFRAME src=&quot;http://on10.net/blogs/larry/20489/player/Default.aspx&quot; frameBorder=0 width=320 scrolling=no height=325 mce_src=&quot;http://on10.net/blogs/larry/20489/player/Default.aspx&quot;&gt;&lt;/IFRAME&gt;&lt;BR&gt;&lt;A href=&quot;http://on10.net/blogs/larry/Bills-Last-Day-CES-2008-Keynote-Video/Default.aspx&quot; mce_href=&quot;http://on10.net/blogs/larry/Bills-Last-Day-CES-2008-Keynote-Video/Default.aspx&quot;&gt;Bill&#39;s Last Day: The CES Keynote video&lt;/A&gt;
    </content>
  </entry>
  <entry>
    <title type="html">PDC 2008</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/pdc-2008"/>
    <id>http://erikporter.com/Blog/pdc-2008</id>
    <updated>2009-02-14T05:45:45.127</updated>
    <published>2007-12-06T20:37:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="PDC" />
    <category term="Channel9" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;&lt;A href=&quot;http://msdn.microsoft.com/pdc2008&quot;&gt;http://msdn.microsoft.com/pdc2008&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;It&#39;s official now.&amp;nbsp; See you there?!?!&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Accompanying &lt;A class=&quot;&quot; href=&quot;http://channel9.msdn.com/ShowPost.aspx?PostID=363230&quot; mce_href=&quot;http://channel9.msdn.com/ShowPost.aspx?PostID=363230&quot;&gt;Channel 9 thread&lt;/A&gt; discussing it.&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">IE 8 Exists</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/ie-8-exists"/>
    <id>http://erikporter.com/Blog/ie-8-exists</id>
    <updated>2009-02-14T05:45:44.753</updated>
    <published>2007-12-06T20:32:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="InternetExplorer" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;Yipee!&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;&lt;A href=&quot;http://blogs.msdn.com/ie/archive/2007/12/05/internet-explorer-8.aspx&quot;&gt;http://blogs.msdn.com/ie/archive/2007/12/05/internet-explorer-8.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Ok, we all knew it existed and was being worked on, but this is the first time the IE team has talked about anything (even if there&#39;s no actual info here).&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Accompanying &lt;A class=&quot;&quot; href=&quot;http://channel9.msdn.com/ShowPost.aspx?PostID=363002&quot; mce_href=&quot;http://channel9.msdn.com/ShowPost.aspx?PostID=363002&quot;&gt;Channel 9 thread&lt;/A&gt; discussing the &quot;announcement&quot;.&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Yahoo Messenger for Windows Vista (using WPF) Preview Released</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/yahoo-messenger-for-windows-vista-using-wpf-preview-released"/>
    <id>http://erikporter.com/Blog/yahoo-messenger-for-windows-vista-using-wpf-preview-released</id>
    <updated>2009-02-14T05:45:44.377</updated>
    <published>2007-12-06T18:38:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Yahoo" />
    <category term="WPF" />
    <category term="Vista" />
    <content type="html" xml:lang="en">
      &lt;P&gt;&lt;A href=&quot;http://on10.net/Blogs/larry/yahoo-messenger-with-wpf-goes-live/&quot;&gt;http://on10.net/Blogs/larry/yahoo-messenger-with-wpf-goes-live/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Just installed it and while it&#39;s not feature complete yet and there are some performance issues, overall I really like it!&lt;/P&gt;
&lt;P&gt;It kind of makes the Windows Live Messenger team look a little stupid for letting their competition use our technology to make a better looking IM client, doesn&#39;t it?&amp;nbsp; ;)&lt;/P&gt;
&lt;P&gt;Definitely check it out!&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Facebook Beacon Now Lets You Completely Opt-Out</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/facebook-beacon-now-let-s-you-completely-opt-out"/>
    <id>http://erikporter.com/Blog/facebook-beacon-now-let-s-you-completely-opt-out</id>
    <updated>2009-02-14T05:45:44.003</updated>
    <published>2007-12-05T19:04:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Facebook" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;This is great to see.&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;&lt;A href=&quot;http://blog.facebook.com/blog.php?post=7584397130&quot; mce_href=&quot;http://blog.facebook.com/blog.php?post=7584397130&quot;&gt;http://blog.facebook.com/blog.php?post=7584397130&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Nothing better in this world than a company who admits mistakes, listens to customers and makes changes when needed.&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Facebook Beacon</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/facebook-beacon"/>
    <id>http://erikporter.com/Blog/facebook-beacon</id>
    <updated>2009-02-14T05:45:43.77</updated>
    <published>2007-11-30T18:26:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel10" />
    <category term="MIX" />
    <category term="Channel8" />
    <category term="Channel9" />
    <category term="TechNetEdge" />
    <category term="Facebook" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;Ever wanted something more powerful than just a &quot;Share on Facebook&quot; link on your site, but didn&#39;t want to write an entire Facebook app?&amp;nbsp; Enter &lt;A class=&quot;&quot; title=&quot;Facebook Beacon&quot; href=&quot;http://www.facebook.com/business/?beacon&quot; mce_href=&quot;http://www.facebook.com/business/?beacon&quot;&gt;Facebook Beacon&lt;/A&gt;.&amp;nbsp; With it, you can add a few lines of code to your site and your users can share actions they did on your site like (bought a product/service, changed their profile, posted a comment, etc) to Facebook so it shows up in their news feed and then travels down the viral highway that is Facebook.&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;We&#39;re considering integrating Beacon into our community web platform that runs (&lt;A class=&quot;&quot; title=&quot;Channel 9&quot; href=&quot;http://channel9.msdn.com/&quot; mce_href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/A&gt;, &lt;A class=&quot;&quot; title=&quot;Channel 10&quot; href=&quot;http://on10.net/&quot; mce_href=&quot;http://on10.net&quot;&gt;Channel 10&lt;/A&gt;, &lt;A class=&quot;&quot; title=&quot;MIX Online&quot; href=&quot;http://visitmix.com/&quot; mce_href=&quot;http://visitmix.com&quot;&gt;MIX Online&lt;/A&gt;, &lt;A class=&quot;&quot; title=&quot;Channel 8&quot; href=&quot;http://channel8.msdn.com/&quot; mce_href=&quot;http://channel8.msdn.com&quot;&gt;Channel 8&lt;/A&gt; and &lt;A class=&quot;&quot; title=&quot;TechNet Edge&quot; href=&quot;http://edge.technet.com/&quot; mce_href=&quot;http://edge.technet.com&quot;&gt;TechNet Edge&lt;/A&gt;).&amp;nbsp; Do you think this would get annoying?&amp;nbsp; Would you like to share what you&#39;re doing on our sites with your friends on Facebook?&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;FYI, we&#39;re building a Facebook app as well for our sites (and all sites involved in &lt;A class=&quot;&quot; title=&quot;Microsoft Communities&quot; href=&quot;http://mscommunities.com/&quot; mce_href=&quot;http://mscommunities.com&quot;&gt;Microsoft Communities&lt;/A&gt;), but we think this also adds value too.&amp;nbsp; Thoughts?&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">.NET Web Roadmap for 3.5 (ASP.NET, Silverlight, IIS 7)</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/net-web-roadmap-for-3-5-asp-net-silverlight-iis-7"/>
    <id>http://erikporter.com/Blog/net-web-roadmap-for-3-5-asp-net-silverlight-iis-7</id>
    <updated>2009-02-14T05:45:43.443</updated>
    <published>2007-11-29T18:08:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="ASPNETAJAX" />
    <category term="Silverlight" />
    <category term="ASPNET" />
    <category term="VisualStudio" />
    <category term="NET" />
    <category term="IIS" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;Scott Guthrie posted some fantastic info on ASP.NET Extensions 3.5 to match up with Visual Studio 2008 and .NET Framework&amp;nbsp;3.5.&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;&lt;A href=&quot;http://weblogs.asp.net/scottgu/archive/2007/11/29/net-web-product-roadmap-asp-net-silverlight-iis7.aspx&quot;&gt;http://weblogs.asp.net/scottgu/archive/2007/11/29/net-web-product-roadmap-asp-net-silverlight-iis7.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Highlights:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep=&quot;true&quot;&gt;Silverlight 1.1 is now Silverlight 2.0&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep=&quot;true&quot;&gt;Silverlight 2.0 will start to get some of the great features that WPF has&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep=&quot;true&quot;&gt;Some of the ASP.NET AJAX Futures (like the browser history control) will be moved into ASP.NET AJAX&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep=&quot;true&quot;&gt;IIS 7 will ship early next year&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep=&quot;true&quot;&gt;There will be new ways to deploy to IIS 7 and do things like versioning and rolling back on single servers and web farms&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Great stuff...check it out!&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Rich Text Editor on CodePlex</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/rich-text-editor-on-codeplex"/>
    <id>http://erikporter.com/Blog/rich-text-editor-on-codeplex</id>
    <updated>2009-02-14T05:45:43.147</updated>
    <published>2007-11-29T08:45:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="CodePlex" />
    <category term="ASPNET" />
    <category term="RichTextEditor" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;This is really great to see.&amp;nbsp; RTEs are a pain to write yourself.&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;&lt;A href=&quot;http://ledgards.com/blogs/josh/archive/2007/11/12/rich-text-editor-control-on-codeplex.aspx&quot;&gt;http://ledgards.com/blogs/josh/archive/2007/11/12/rich-text-editor-control-on-codeplex.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;My only requests are that they add Opera and Safari support, XHTML support, undo and better flexibility for customizing it (like hiding the view tabs and ASP.NET Themes).&lt;/P&gt;
&lt;P mce_keep=&quot;true&quot;&gt;Definitely worth checking out!&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Popfly - Building Mash-ups, Blocks, Pages in a Fun Community</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/popfly-building-mash-ups-blocks-pages-in-a-fun-community"/>
    <id>http://erikporter.com/Blog/popfly-building-mash-ups-blocks-pages-in-a-fun-community</id>
    <updated>2009-02-14T05:45:42.647</updated>
    <published>2007-05-18T17:26:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="AJAX" />
    <category term="Silverlight" />
    <category term="Channel9" />
    <category term="Popfly" />
    <category term="CommunityNews" />
    <category term="Mashup" />
    <content type="html" xml:lang="en">
      &lt;P mce_keep=&quot;true&quot;&gt;I&#39;ve been following &lt;A class=&quot;&quot; href=&quot;http://popfly.ms/&quot; mce_href=&quot;http://popfly.ms&quot;&gt;Popfly&lt;/A&gt; for a long time.&amp;nbsp; It&#39;s come a long way (and&amp;nbsp;2 code names) to where it is today and it&#39;s good stuff!&amp;nbsp; They have a cool editor in Silverlight for connecting blocks to create mash-ups, a web page editor, social networking to share your creations.&amp;nbsp; If you&#39;re into the nitty gritty you can even go in and edit all the Javascript yourself.&amp;nbsp; Check out the &lt;A class=&quot;&quot; href=&quot;http://channel9.msdn.com/showpost.aspx?postid=308460&quot; mce_href=&quot;http://channel9.msdn.com/showpost.aspx?postid=308460&quot;&gt;intro video&amp;nbsp;on Channel 9&lt;/A&gt;.&lt;/P&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Building a Silverlight 1.1 DLL with Visual Studio 2005</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/building-a-silverlight-1-1-dll-with-visual-studio-2005"/>
    <id>http://erikporter.com/Blog/building-a-silverlight-1-1-dll-with-visual-studio-2005</id>
    <updated>2009-02-14T05:45:42.21</updated>
    <published>2007-05-03T04:15:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Silverlight" />
    <category term="WPFE" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Hotness!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://blogs.sqlxml.org/bryantlikes/archive/2007/05/02/silverlight-hello-world-in-c-from-vs-2005.aspx&quot;&gt;http://blogs.sqlxml.org/bryantlikes/archive/2007/05/02/silverlight-hello-world-in-c-from-vs-2005.aspx&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Silverlight (WAS: WPF/E) is Official</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/silverlight-was-wpf-e-is-official"/>
    <id>http://erikporter.com/Blog/silverlight-was-wpf-e-is-official</id>
    <updated>2009-02-14T05:45:41.647</updated>
    <published>2007-04-16T08:18:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Silverlight" />
    <category term="CommunityNews" />
    <category term="WPFE" />
    <content type="html" xml:lang="en">
      &lt;p&gt;The official name as well as &lt;a href=&quot;http://www.microsoft.com/silverlight&quot;&gt;site&lt;/a&gt; is now out for Silverlight, which used to be called WPF/E.&amp;nbsp; Lookin&amp;#39; good!&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://on10.net/Blogs/tina/out-with-wpfe-in-with-microsoft-silverlight-this-has-just-been-announced/&quot;&gt;http://on10.net/Blogs/tina/out-with-wpfe-in-with-microsoft-silverlight-this-has-just-been-announced/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/tims/archive/2007/04/15/introducing-microsoft-silverlight.aspx&quot;&gt;http://blogs.msdn.com/tims/archive/2007/04/15/introducing-microsoft-silverlight.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/somasegar/archive/2007/04/15/silverlight-the-next-generation-web-media-experiences.aspx&quot;&gt;http://blogs.msdn.com/somasegar/archive/2007/04/15/silverlight-the-next-generation-web-media-experiences.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">SQL WHERE List Matches Any or All</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/sql-where-list-matches-any-or-all"/>
    <id>http://erikporter.com/Blog/sql-where-list-matches-any-or-all</id>
    <updated>2009-02-14T05:45:41.15</updated>
    <published>2007-03-26T01:06:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="SQLServer" />
    <category term="Channel9" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I saw a cool post recently from Jon Galloway called &amp;quot;&lt;a href=&quot;/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx&quot;&gt;Passing lists to SQL Server 2005 with XML Parameters&lt;/a&gt;&amp;quot;.&amp;nbsp; This is a pattern I&amp;#39;ve used several times while building the new version of &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt;.&amp;nbsp; If you&amp;#39;d like to learn how to pass in lists to stored procedures, check out Jon&amp;#39;s post.&lt;/p&gt;&lt;p&gt;One of the times I&amp;#39;ve used it is to search our database for all entries from&amp;nbsp;two of our forums.&amp;nbsp; For this example, we&amp;#39;ll say &lt;a href=&quot;http://channel9.msdn.com/ShowForum.aspx?ForumID=16&quot;&gt;Techoff&lt;/a&gt; and &lt;a href=&quot;http://channel9.msdn.com/ShowForum.aspx?ForumID=31&quot;&gt;Sandbox&lt;/a&gt;.&amp;nbsp; Once you have a temp table with the two forum&amp;nbsp;ids (actually forums in our system are just tags too) you can just do a where in statement like the following:&lt;/p&gt;&lt;p&gt;SELECT&amp;nbsp;e.* FROM Entry e INNER JOIN EntryForum ef ON e.EntryID = ef.EntryID&amp;nbsp;&lt;strong&gt;WHERE ef.ForumID IN (SELECT ForumID FROM ForumList)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Note: This is all pseudo code to represent the&amp;nbsp;basics of how we do this.&amp;nbsp; This is not the exact code.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;This selects all the entries (or posts) from our database that are from the list of forums I passed into the ForumList temp table.&amp;nbsp; WHERE IN specificies that all rows be returned that match ANY of the records in my temp table.&amp;nbsp; The following statement would be equivalent and work exactly the same.&lt;/p&gt;&lt;p&gt;SELECT&amp;nbsp;e.* FROM Entry e INNER JOIN EntryForum ef ON e.EntryID = ef.EntryID&amp;nbsp;&lt;strong&gt;WHERE ef.ForumID = @ForumID1 OR ef.ForumID = @ForumID2&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Note: In the above example, @ForumID1 and @ForumID2&amp;nbsp;have the values that were stored in the ForumList temp table in the example above that one.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;This works pretty well.&amp;nbsp; The other thing we do with passing in lists though is selecting only the entries that match ALL (not ANY) of the&amp;nbsp;list&amp;nbsp;we pass in to the stored procedure.&amp;nbsp; The example of this is when searching by multiple tags.&amp;nbsp; So for instance, you want to search on our site for all content that contains information on &lt;a href=&quot;http://channel9.msdn.com/tags/WPF&quot;&gt;WPF&lt;/a&gt; AND &lt;a href=&quot;http://channel9.msdn.com/tags/WCF&quot;&gt;WCF&lt;/a&gt;.&amp;nbsp; The previous example won&amp;#39;t work.&amp;nbsp; It would instead need to be something like this...&lt;/p&gt;&lt;p&gt;SELECT&amp;nbsp;e.* FROM Entry e INNER JOIN EntryTag et ON e.EntryID = et.EntryID&amp;nbsp;&lt;strong&gt;WHERE et.TagID = @TagIDWPF&amp;nbsp;&lt;em&gt;&lt;u&gt;AND&lt;/u&gt;&lt;/em&gt; et.TagID = @TagIDWCF&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Using WHERE IN, we can&amp;#39;t do this (at least I couldn&amp;#39;t find anything in the docs or internet searching to say otherwise).&amp;nbsp; &lt;a href=&quot;http://www.duncanmackenzie.net/&quot;&gt;Duncan&lt;/a&gt; helped figure out the idea on how to do this and here is the implentation I came up with:&lt;/p&gt;&lt;p&gt;DECLARE @TagCount int&lt;br /&gt;DECLARE @Tags TABLE (TagID bigint)&lt;br /&gt;DECLARE @Entries TABLE (EntryID bigint)&lt;/p&gt;&lt;p&gt;SELECT @TagCount = COUNT(*) FROM @Tags&lt;br /&gt;;&lt;br /&gt;WITH Entries(EntryID, MatchCount) AS&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.EntryID,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COUNT(DISTINCT t.TagID) AS MatchCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Entry e&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntryTag et&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ON&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.EntryID = et.EntryID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Tags t&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ON&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; et.TagID = t.TagID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GROUP BY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.EntryID&lt;br /&gt;)&lt;br /&gt;INSERT INTO @Entries (EntryID) SELECT EntryID FROM Entries WHERE MatchCount = @TagCount&lt;/p&gt;&lt;p&gt;What is this code doing?&amp;nbsp; Well, first,&amp;nbsp;it&amp;#39;s doing a count on the tags that were passed in (again, from XML turned into a temp table) and storing it in a variable.&amp;nbsp; Then, it creates a &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms175972.aspx&quot;&gt;Common Table Expression&lt;/a&gt; or CTE around a query that returns all the entries that match the tag list and how many of those tags it matches up with.&amp;nbsp; If you&amp;#39;re not familiar with CTEs, they&amp;#39;re basically a wrapper around a query so you can write a query against it.&amp;nbsp; Kind of like a subquery, but much more organized.&amp;nbsp; Recursive CTEs are particularly powerful and cool, but that&amp;#39;s another blog post.&amp;nbsp; So then after creating the CTE, fill another temp table with everything from the CTE where the MatchCount equals the count of how many tags were passed in originally.&amp;nbsp; This means that the entry returned had ALL the tags passed in associated with it.&amp;nbsp; So this will now only return entries that match ALL of the tags from the list that I passed in (stored in @Tags).&amp;nbsp; I hope this helps someone.&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Check out the first comment from Bryan.&amp;nbsp; He points out a slightly better implementation.&amp;nbsp; Thanks, Bryan!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Best Comment on Slashdot EVER!</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/best-comment-on-slashdot-ever"/>
    <id>http://erikporter.com/Blog/best-comment-on-slashdot-ever</id>
    <updated>2009-02-14T05:45:37.217</updated>
    <published>2007-03-14T21:23:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Slashdot" />
    <category term="TobinTitus" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I&amp;#39;m a Slashdot browser.&amp;nbsp; I&amp;#39;ve never commented on anything thing and never will.&amp;nbsp; Slashdot is 90% crap (mostly because of the comments left there).&amp;nbsp; That&amp;#39;s my opinion and I&amp;#39;m sticking to it.&amp;nbsp; That said, it&amp;#39;s good to watch what goes on there, because every once and a while there is a gem of great insight.&lt;/p&gt;&lt;p&gt;This isn&amp;#39;t the kind of gem I&amp;#39;m referring to, but it is still a gem and&amp;nbsp;TOO GOOD and TOO TRUE to pass up.&amp;nbsp; My buddy &lt;a href=&quot;http://blogs.iis.net/tobintitus&quot;&gt;Tobin&lt;/a&gt; pointed me to this one...&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://apple.slashdot.org/comments.pl?sid=44091&amp;amp;cid=4592270&quot;&gt;http://apple.slashdot.org/comments.pl?sid=44091&amp;amp;cid=4592270&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I&amp;#39;m not a big fan of bashing people...unless they deserve it.&amp;nbsp; :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">TechFest with Microsoft Research on Channel 9</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/techfest-with-microsoft-research-on-channel-9"/>
    <id>http://erikporter.com/Blog/techfest-with-microsoft-research-on-channel-9</id>
    <updated>2009-02-14T05:45:36.967</updated>
    <published>2007-03-06T20:44:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="RoryBlythe" />
    <category term="MSR" />
    <category term="Channel9" />
    <category term="TechFest" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Rory posted a &lt;a href=&quot;http://channel9.msdn.com/ShowPost.aspx?PostID=288554&quot;&gt;great first video&lt;/a&gt; taking a look at a couple new apps out of MSR.&lt;/p&gt;&lt;p&gt;There&amp;#39;s going to be lots more good stuff coming soon from &lt;a href=&quot;http://research.microsoft.com/aboutmsr/techfest/default.aspx&quot;&gt;TechFest&lt;/a&gt;.&amp;nbsp; To follow the happenings on Channel 9 in regards to TechFest, check out the &lt;a href=&quot;http://channel9.msdn.com/tags/TechFest&quot;&gt;TechFest tag&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Btw, this has to be the best preview image on any of our videos ever!&amp;nbsp; ;)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://channel9.msdn.com/ShowPost.aspx?PostID=288554&quot;&gt;&lt;img alt=&quot;Microsoft Research TechFest - Intro, DynaVis, and FastDash&quot; height=&quot;223&quot; src=&quot;http://channel9.msdn.com/Photos/288554.jpg&quot; style=&quot;width: 300px; height: 223px&quot; title=&quot;Microsoft Research TechFest - Intro, DynaVis, and FastDash&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Scott Guthrie on Red vs. Blue on Channel 9</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/scott-guthrie-on-red-vs-blue-on-channel-9"/>
    <id>http://erikporter.com/Blog/scott-guthrie-on-red-vs-blue-on-channel-9</id>
    <updated>2009-02-14T05:45:36.75</updated>
    <published>2007-03-06T19:03:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <category term="ScottGuthrie" />
    <category term="AdamKinney" />
    <category term="WPFE" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Pretty funny.&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;/scottgu/archive/2007/03/05/video-of-scott-guthrie-shooting-private-donut-and-some-good-asp-net-ajax-links.aspx&quot;&gt;http://weblogs.asp.net/scottgu/archive/2007/03/05/video-of-scott-guthrie-shooting-private-donut-and-some-good-asp-net-ajax-links.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;My boss, Adam Kinney &lt;a href=&quot;http://adamkinney.com/blog/204/default.aspx&quot;&gt;made the WPF/E skin for the video&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Direct link &lt;a href=&quot;http://channel9.msdn.com/playground/wpfe/rvbplayer/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Robert Fripp on Channel 9 Again</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/robert-fripp-on-channel-9-again"/>
    <id>http://erikporter.com/Blog/robert-fripp-on-channel-9-again</id>
    <updated>2009-02-14T05:45:36.42</updated>
    <published>2007-03-03T06:16:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <category term="WindowsVista" />
    <content type="html" xml:lang="en">
      &lt;p&gt;This is really great.&amp;nbsp; The way they went about making the sounds for Windows Vista is really cool.&amp;nbsp; There are some really great ideas in this video like having calm music (you have to listen to the video to hear them) in the background while installing Windows Vista.&amp;nbsp; It&amp;#39;s sad that&amp;nbsp;it didn&amp;#39;t make it into the final product.&amp;nbsp; Maybe they&amp;#39;ll come out with some music from this we can buy.&amp;nbsp; Check it out...&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://channel9.msdn.com/showpost.aspx?postid=287615&quot;&gt;Making Windows Vista Sing: Robert Fripp and the Vista Melody&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Re: ASP.NET Custom Authentication Problems</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/re-asp-net-custom-authentication-problems"/>
    <id>http://erikporter.com/Blog/re-asp-net-custom-authentication-problems</id>
    <updated>2009-02-14T05:45:35.97</updated>
    <published>2007-03-02T22:48:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="EvNetDev" />
    <category term="ASPNET" />
    <category term="Authentication" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I just got &lt;a href=&quot;/eporter/archive/2005/02/25/380453.aspx#1871725&quot;&gt;a comment&lt;/a&gt; from an old post from over 2 years ago&amp;nbsp;about some custom auth problems I had.&amp;nbsp; It&amp;#39;s funny looking back that far to see how you were.&amp;nbsp; As with all typical developers, I look back and laugh at myself.&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;The question posted was if I could share my custom authentication code.&amp;nbsp; The fact of the matter is, the way I was doing authentication at the time was kind of silly and I thought I&amp;#39;d post how we do it now.&amp;nbsp; It&amp;#39;s much simpler and uses everything that&amp;#39;s already built into ASP.NET 2.0 already.&amp;nbsp; When a user logs into your site (using whatever type of authentication you want), the Context.User (same User object that shows up on the Page class, etc)&amp;nbsp;is set to an IPrincipal.&amp;nbsp; Depending on what &amp;quot;username&amp;quot; you passed in for it to tack on to the cookie, you&amp;#39;ll be ablel to access a key for looking up more detailsl about the user.&amp;nbsp; Then the same applies from the rest of my 2 year old post.&amp;nbsp; Create a BasePage class that inherits from Page and shadow the User property with your own.&amp;nbsp; Here&amp;#39;s the code from our platform in the BasePage class.&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; IsAuthenticated&lt;br /&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; Request.IsAuthenticated; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; username;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; Username&lt;br /&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (username == &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (IsAuthenticated)&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;username = &lt;span style=&quot;color: #0000ff&quot;&gt;base&lt;/span&gt;.User.Identity.Name;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;username = &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; username;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; isUserSet;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;EvNetUser&lt;/span&gt; user;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;EvNetUser&lt;/span&gt; User&lt;br /&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!isUserSet)&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;{&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (IsAuthenticated)&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;user = &lt;span style=&quot;color: #2b91af&quot;&gt;Users&lt;/span&gt;.Retrieve(Username);&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;isUserSet = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; user;&lt;br /&gt;&lt;div class=&quot;tab&quot;&gt;&lt;/div&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Now anywhere in our site we can say Page.User and get back an object filled with everything we need to know about the current user.&amp;nbsp; If the request is anonymous, Page.User will return null.&amp;nbsp; Hope this helps &lt;a id=&quot;ctl00___ctl00___ctl01___Comments___Comments_ctl00_NameLink&quot; title=&quot;Mohammed&quot;&gt;Mohammed&lt;/a&gt;!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">JavaScript Intellisense in Visual Studio Orcas</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/javascript-intellisense-in-visual-studio-orcas"/>
    <id>http://erikporter.com/Blog/javascript-intellisense-in-visual-studio-orcas</id>
    <updated>2009-02-14T05:45:35.767</updated>
    <published>2007-03-02T22:09:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="ASPNETAJAX" />
    <category term="Orcas" />
    <category term="JavaScript" />
    <category term="VisualStudio" />
    <content type="html" xml:lang="en">
      &lt;p&gt;This is really great to see!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/webdevtools/archive/2007/03/02/jscript-intellisense-in-orcas.aspx&quot;&gt;http://blogs.msdn.com/webdevtools/archive/2007/03/02/jscript-intellisense-in-orcas.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I&amp;#39;ve been developing a lot of client controls in ASP.NET AJAX lately and this would be so helpful.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">How to Use Embedded JavaScript Files in ASP.NET AJAX</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/how-to-use-embedded-javascript-files-in-asp-net-ajax"/>
    <id>http://erikporter.com/Blog/how-to-use-embedded-javascript-files-in-asp-net-ajax</id>
    <updated>2009-02-14T05:45:35.097</updated>
    <published>2007-03-01T10:54:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="AJAX" />
    <category term="EvNetDev" />
    <category term="ASPNETAJAX" />
    <category term="Atlas" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I&amp;#39;m writing up a post about creating custom client controls at the moment (well, as of a few minutes ago anyway).&amp;nbsp; It is getting pretty long and it&amp;#39;s way past my bedtime.&amp;nbsp; So I thought in the meantime I&amp;#39;d post a quick little blurb about how you can use JavaScript from an assembly for your ASP.NET AJAX code and why you would want to.&lt;/p&gt;&lt;p&gt;It&amp;#39;s pretty easy to setup a .js file in your web project with some code in it.&amp;nbsp; Sometimes though the code in said file is associated with say a custom client control (something that inherits from &lt;a href=&quot;http://ajax.asp.net/docs/ClientReference/Sys.UI/ControlClass/default.aspx&quot;&gt;Sys.UI.Control&lt;/a&gt;) that is in its own assembly (not your web project).&amp;nbsp; This is how our controls are setup for our platform.&amp;nbsp; This is so we can use the same controls across &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt;, &lt;a href=&quot;http://on10.net&quot;&gt;Channel 10&lt;/a&gt;, etc.&amp;nbsp; The problem is now that we have code in js files, they have to be replicated across all our web projects and that&amp;#39;s just no fun.&amp;nbsp; So instead we moved to having the js files embedded in our main class library.&amp;nbsp; The server controls register these files and they are then pulled out of the assembly and sent down to the client and cached.&amp;nbsp; Here&amp;#39;s how to set this up yourself...&lt;/p&gt;&lt;p&gt;Add the following line as the last line in your js file:&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (Sys != undefined) Sys.Application.notifyScriptLoaded();&lt;/div&gt;&lt;p&gt;This tells ASP.NET AJAX that the file is done loading.&amp;nbsp; This is needed because all embedded js files stream down in the same &amp;quot;file&amp;quot; so the end of the file isn&amp;#39;t necessarily the end of what&amp;#39;s streamed down to the client.&amp;nbsp; Unlike when you just like to a js file regularly.&lt;/p&gt;&lt;p&gt;Now, in Visual Studio go to the properties window while your js file is selected.&amp;nbsp;&amp;nbsp;Change the &lt;strong&gt;Build Action&lt;/strong&gt; to &lt;em&gt;Embedded Resource&lt;/em&gt;.&amp;nbsp; This will compile the file into the assembly as a resource.&amp;nbsp; If you open up reflector and venture through, you&amp;#39;ll find the js file.&amp;nbsp; Now in your server control, add this line so ASP.NET knows about the resource (and what mime type to send it down as): &lt;/p&gt;&lt;div class=&quot;code&quot;&gt;[assembly: &lt;span style=&quot;color: #2b91af&quot;&gt;WebResource&lt;/span&gt;(&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;EvNet.Web.Templates.Scripts.Toolbar.js&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;)]&lt;/div&gt;&lt;p&gt;Now anytime you add a &lt;em&gt;ScriptReference&lt;/em&gt; to a &lt;strong&gt;ScriptManager&lt;/strong&gt;, your file will be streamed down to the client.&amp;nbsp; Just specify the resource name (This is the&amp;nbsp;physical file path down to the file starting at the root of your class library with slashes replaced by periods [see below])&amp;nbsp;and the assembly the resource is in and you&amp;#39;re done.&amp;nbsp; No need to worry about where the file is anymore.&amp;nbsp; :)&amp;nbsp; This of course works when implementing IScriptControl.GetScriptReferences in your server control too:&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;ScriptReference&lt;/span&gt;&amp;gt; GetScriptReferences()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;ScriptReference&lt;/span&gt;[] { &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;ScriptReference&lt;/span&gt;(&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;EvNet.Web.Templates.Scripts.Toolbar.js&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;EvNet&amp;quot;&lt;/span&gt;) };&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;Enjoy!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Intro to ASP.NET AJAX Custom Client Controls</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/intro-to-asp-net-ajax-custom-client-controls"/>
    <id>http://erikporter.com/Blog/intro-to-asp-net-ajax-custom-client-controls</id>
    <updated>2009-02-14T05:45:34.8</updated>
    <published>2007-03-01T08:09:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="AJAX" />
    <category term="EvNetDev" />
    <category term="ASPNETAJAX" />
    <content type="html" xml:lang="en">
      &lt;p&gt;So in &lt;a href=&quot;/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx&quot;&gt;my journey&lt;/a&gt; to explore our platform that runs &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt; and &lt;a href=&quot;http://on10.net&quot;&gt;Channel 10&lt;/a&gt; and soon a few more sites continues with a&amp;nbsp;walkthrough of&amp;nbsp;some basics on creating custom controls in ASP.NET AJAX.&amp;nbsp; More than likely if you&amp;#39;re reading this it&amp;#39;s because you already know about ASP.NET AJAX 1.0 or have at least heard about it.&amp;nbsp; You found this post through a search on your favorite search engine, saw it on the weblogs.asp.net home page, subscribe to my feed&amp;nbsp;or someone linked to it (here&amp;#39;s hoping).&amp;nbsp; If you have no idea what it is, well...go check out the &lt;a href=&quot;http://ajax.asp.net&quot;&gt;site&lt;/a&gt; and come back.&amp;nbsp; :)&amp;nbsp; That&amp;#39;s probably the easiest way to explain it.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;ASP.NET AJAX 1.0 Basics&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;ASP.NET AJAX has basically built on top of JavaScript to make it cross-browser compatible as a framework on top.&amp;nbsp; This makes developing things like custom client controls very similar to building classes in .NET.&amp;nbsp; There are namespaces, classes, enums, methods, fields, properties, inheritance, etc.&amp;nbsp; There is also a server control architecture to allow you to build server controls to configure and instantiate custom client controls.&amp;nbsp; I&amp;#39;ll talk about this later.&amp;nbsp; The best way to think of ASP.NET AJAX is to think of it as a client technology.&amp;nbsp; Yes there are server aspects, but the server just acts as the middle man.&amp;nbsp; It gets requests for pages and servers and returns the appropriate data.&amp;nbsp; This is how it is today except now we can push more logic down to the client so the server doesn&amp;#39;t have to render UI logic as much.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;UpdatePanel&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;While this post isn&amp;#39;t going to focus on the &lt;a href=&quot;http://ajax.asp.net/docs/tutorials/IntroductionUpdatePanel.aspx&quot;&gt;UpdatePanel&lt;/a&gt;, it&amp;#39;s good to know about it and how it compares to custom controls.&amp;nbsp; The UpdatePanel is gold.&amp;nbsp; Plain and simple.&amp;nbsp; Build some code on your ASP.NET page, say a GridView with some data bound to it.&amp;nbsp; It works great and just does the usual postbacks.&amp;nbsp; Page through some data, yippee.&amp;nbsp; Now surround it with an UpdatePanel and watch the &amp;quot;magic&amp;quot;.&amp;nbsp; Paging now without postbacks?&amp;nbsp; Glorious!&amp;nbsp; Like all great things that make our lives easier,&amp;nbsp; you can definitely overuse it.&amp;nbsp; Working with ViewState just like a normal postback would, sending it back and forth between requests, is its greatest strength and weakness.&amp;nbsp; You can still have the same problems of bloated ViewState that can make those monthly bandwidth bills for your site go up and up.&amp;nbsp; The UpdatePanel is great for quick and dirty AJAX.&amp;nbsp; If you have a simple form you want to make fancy, it is the right tool.&amp;nbsp; A good example where the UpdatePanel probably isn&amp;#39;t the best answer to solve your problem is showing and hiding lots of divs.&amp;nbsp; Things that can easily be done through javascript should.&amp;nbsp; This saves lots of server request and makes it so you don&amp;#39;t really need any ViewState because the work will be done on the client.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Sys.UI.Control&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.asp.net/docs/ClientReference/Sys.UI/ControlClass/default.aspx&quot;&gt;Sys.UI.Control&lt;/a&gt; inherits from &lt;a href=&quot;http://ajax.asp.net/docs/ClientReference/Sys/ComponentClass/default.aspx&quot;&gt;Sys.UI.Component&lt;/a&gt;.&amp;nbsp; Just like any Windows application, a component in ASP.NET AJAX is a client side control that has no UI (like a timer) and a control has UI.&amp;nbsp; As I mentioned above, ASP.NET AJAX helps us push UI logic off of the server and onto the client.&amp;nbsp; Sys.UI.Control is a base type you can inherit from to build your control on.&amp;nbsp; It takes care of all the basics like with DOM element it&amp;#39;s associated with for its UI and has methods like initialize and dispose.&amp;nbsp; Let&amp;#39;s build a quick calculator control.&amp;nbsp; Hey, it wouldn&amp;#39;t be a typical example if it were anything else but a calculator.&amp;nbsp; ;)&lt;/p&gt;&lt;p&gt;Have ASP.NET AJAX 1.0 installed and create a new website using the ASP.NET AJAX-Enabled Web Site template and call it Calculator.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Visual Representation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;All we should need for this is two textboxes, a dropdownlist, a button and a label to display the answer in.&amp;nbsp; Create a new Web User Control called Calculator.ascx.&lt;/p&gt;&lt;font size=&quot;2&quot;&gt;&lt;p&gt;&amp;lt;%&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;@&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Control&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Language&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;C#&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;AutoEventWireup&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;CodeFile&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Calculator.ascx.cs&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Inherits&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Calculator&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;EnableViewState&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;false&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; %&amp;gt;&lt;br /&gt;Number 1: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Number1TextBox&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;br&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;Type: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;DropDownList&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;TypeDropDownList&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;DropDownList&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;br&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;Number 2: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Number2TextBox&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;br&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Button&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;CalculateButton&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Text&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Calculate&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;Total: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Label&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;TotalLabel&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Font-Bold&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Label&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;@&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Control&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Language&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;C#&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;AutoEventWireup&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;CodeFile&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Calculator.ascx.cs&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Inherits&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Calculator&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;EnableViewState&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;false&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; %&amp;gt;&lt;br /&gt;Number 1: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Number1TextBox&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;br&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;Type: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;DropDownList&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;TypeDropDownList&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;DropDownList&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;br&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;Number 2: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Number2TextBox&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;TextBox&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;br&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Button&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;CalculateButton&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Text&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;Calculate&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;Total: &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Label&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;ID&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;TotalLabel&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;runat&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;Font-Bold&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;asp&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;Label&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;&amp;gt;&lt;/font&gt; &lt;p&gt;Definitely no prettying up there. Just the basics.&amp;nbsp; The calculator example may not be the best use of a custom control, but it keeps it simple so you learn what should be learned.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Client Code&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;First things first, we should register a namespace for our class that&amp;#39;s going to represent the definition of our client representation of the calculator.&amp;nbsp; Create a new .js file called Calculator and add the following to it.&lt;/p&gt;&lt;font size=&quot;2&quot;&gt;&lt;p&gt;Type.registerNamespace(&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;&amp;quot;Porter.Erik&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;);&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;font color=&quot;#a31515&quot; size=&quot;2&quot;&gt;&amp;quot;Porter.Erik&amp;quot;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;);&lt;/font&gt; &lt;p&gt;Then we need to create and register the class itself.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;blah&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Web Service&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;blah&lt;/p&gt;&lt;p&gt;It&amp;#39;s been a really interesting journey watching ASP.NET AJAX grow up.&amp;nbsp; I got to see very early builds of it (this was a few weeks before the first CTP)&amp;nbsp;before I joined Microsoft when I was an ASP Insider and while the potential was there, it was still in its infancy and had a long way to go.&amp;nbsp; This was in October 2005.&amp;nbsp; Now it&amp;#39;s all grown up and turned into a comprehensive client library, awesome integration with ASP.NET server controls and a Control Toolkit.&amp;nbsp; Things are only going to get better with full integration into Orcas.&amp;nbsp; Good times!&lt;/p&gt;&lt;p&gt;So far we&amp;#39;re just using custom controls in basic places on Channel 9&amp;nbsp;like the wiki edit control, reply editor and a couple others.&amp;nbsp; We&amp;#39;re currently using the UpdatePanel for our EntryList control because it was simple to get going.&amp;nbsp; Between the beta of Channel 9 and RTW, I will probably switch it over to being a custom control.&amp;nbsp; This will more than likely be a blog post on its own and will demonstrate some advanced techniques.&lt;/p&gt;&lt;p&gt;There&amp;#39;s more code from our platform in the pipeline.&amp;nbsp; I&amp;#39;m not sure what to talk about next, but it may be our Virtual Path Provider setup or Templating scheme.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Windows Vista Install Demo</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/windows-vista-install-demo"/>
    <id>http://erikporter.com/Blog/windows-vista-install-demo</id>
    <updated>2009-02-14T05:45:33.83</updated>
    <published>2007-02-26T21:37:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="WindowsVista" />
    <content type="html" xml:lang="en">
      &lt;p&gt;This is more for the &lt;a href=&quot;http://on10.net&quot;&gt;technology enthusiast&lt;/a&gt; crowd than the &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;developer crowd&lt;/a&gt;, but...&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://on10.net&quot;&gt;Channel 10&lt;/a&gt; has a video up today to start off Windows Vista Week (even a pretty new banner just for the occassion&amp;nbsp; ;)) about &lt;a href=&quot;http://on10.net/Blogs/tina/installing-windows-vista/&quot;&gt;installing Windows Vista&lt;/a&gt;.&amp;nbsp; I&amp;#39;ve installed Windows Vista 18 hundred million billion times since I&amp;#39;ve been running it for a long, long time, but I think this video is interesting in showing that it&amp;#39;s &lt;a href=&quot;http://movies.apple.com/movies/us/apple/getamac/apple-getamac-surgery_480x376.mov&quot;&gt;easy to install&lt;/a&gt;&amp;nbsp;(sorry for linking directly to the mov file, but Apple&amp;#39;s site doesn&amp;#39;t have permalinks for their videos).&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ASP.NET FindControl Recursive with Generics</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/asp-net-findcontrol-recursive-with-generics"/>
    <id>http://erikporter.com/Blog/asp-net-findcontrol-recursive-with-generics</id>
    <updated>2009-02-14T05:45:32.007</updated>
    <published>2007-02-25T05:09:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="EvNetDev" />
    <category term="ASPNET" />
    <category term="NET" />
    <content type="html" xml:lang="en">
      &lt;p&gt;While working on the new version of &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt;, part of my job this time around was to &amp;quot;templatize&amp;quot; our entire community platform.&amp;nbsp; The way everything is set up now, aspx files are read in through the Virtual Path Provider (VPP), additional settings in the Page directive are set based off of database settings and the page is rendered.&amp;nbsp; All our controls are now ascx files with the CodeFileBaseClass set to a class that implements all the code.&amp;nbsp; This allows us to easily setup new controls and templates for our different sites if new ones are needed.&amp;nbsp; Right now, &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt; and &lt;a href=&quot;http://on10.net&quot;&gt;Channel 10&lt;/a&gt; are the only two sites that will be running this code.&amp;nbsp; In the halfway near future, &lt;a href=&quot;http://visitmix.com&quot;&gt;VisitMIX&lt;/a&gt; and a yet to be named Student focused site will run this code as well, so templating was very important.&amp;nbsp; My other job for this sprint was to add &lt;a href=&quot;http://ajax.asp.net&quot;&gt;ASP.NET AJAX&lt;/a&gt; functionality to the site.&amp;nbsp; As we get closer to launching the beta you&amp;#39;ll see more posts from me sampling some of our code and techniques especially around &lt;a href=&quot;http://ajax.asp.net&quot;&gt;ASP.NET AJAX&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The new EntryList control that I created takes a List&amp;lt;Entry&amp;gt;.&amp;nbsp; The control has a setting to let us set which ascx file we want to use to represent each Entry in the list.&amp;nbsp; These are loaded using Page.LoadControl.&amp;nbsp; The same thing goes for the Pager and Filters&amp;nbsp;control in the header and footer of the EntryList.&amp;nbsp; All of these controls implement different interfaces so we can throw in different ones and look them up generically.&amp;nbsp; I don&amp;#39;t necessarily know the names of these controls and needed a way to look them up by the interfaces they implement.&amp;nbsp; So I thought, &amp;quot;hey, I&amp;#39;ll bet generics could help me out here.&amp;quot;&amp;nbsp; I got the below code written, but unfortunately couldn&amp;#39;t figure out how to properly cast the control by the type passed in.&amp;nbsp; My next door neighbor, our resident &lt;a href=&quot;http://channel9.msdn.com/Niners/Sampy&quot;&gt;Sampy&lt;/a&gt;, helped me figure out that I needed to force the&amp;nbsp;type coming in to be a reference (hence the &amp;quot;where T :&amp;nbsp;class&amp;quot; part).&amp;nbsp; Here&amp;#39;s the resulting code...&lt;/p&gt;&lt;font size=&quot;2&quot;&gt;&lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;public&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;static&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; T FindControl&amp;lt;T&amp;gt;(System.Web.UI.&lt;/font&gt;&lt;font color=&quot;#2b91af&quot; size=&quot;2&quot;&gt;ControlCollection&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; Controls) &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;where&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; T : &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;class&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T found = &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;default&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;(T);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;if&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; (Controls != &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;null&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; &amp;amp;&amp;amp; Controls.Count &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;for&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; (&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;int&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; i = 0; i &amp;lt; Controls.Count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;if&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; (Controls[i] &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;is&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; T)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; found = Controls[i] &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;as&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; T;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;break&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size=&quot;2&quot;&gt;found = FindControl&amp;lt;T&amp;gt;(Controls[i].Controls);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;return&lt;/font&gt;&lt;font size=&quot;2&quot;&gt; found;&lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;p&gt;Unlike a recursive method that&amp;#39;s not generic, you would have to pass in the type as a parameter to the method, which would get passed down through every method call, and you&amp;#39;d have to cast the found control on every call you made to FindControl.&amp;nbsp; That wouldn&amp;#39;t be a huge deal, but there is something nice about simplicity.&amp;nbsp; :)&lt;/p&gt;&lt;font size=&quot;2&quot;&gt;&lt;p&gt;&lt;font color=&quot;#2b91af&quot;&gt;IMyInterface&lt;/font&gt;&amp;nbsp;myControl = FindControl&amp;lt;&lt;font color=&quot;#2b91af&quot; size=&quot;2&quot;&gt;IMyInterface&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;&amp;gt;(&lt;/font&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot;&gt;this&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;.Controls);&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;p&gt;Note: This only returns the first instance of a control.&amp;nbsp; You could easily pass in a references List&amp;lt;IMyInterface&amp;gt; and add to it as you find them.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This isn&amp;#39;t break through code or anything, but it&amp;#39;s fun for us, the&amp;nbsp;dev geeks.&amp;nbsp; Expect to see more posts soon about coding techniques in our platform.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ASP.NET AJAX 1.0 Released</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/asp-net-ajax-1-0-released"/>
    <id>http://erikporter.com/Blog/asp-net-ajax-1-0-released</id>
    <updated>2009-02-14T05:45:31.803</updated>
    <published>2007-01-23T18:45:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="ASPNETAJAX" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I have to jump in with everyone else.&amp;nbsp; Me too, me too!&amp;nbsp; :D&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.asp.net/&quot;&gt;http://ajax.asp.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In the coming months you will see our platform pushed to Channel 9 and 10 and we use ASP.NET AJAX heavily.&amp;nbsp; Hopefully I&amp;#39;ll have time to work up some samples from our code to share.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">CES Content on Channel 10</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/ces-content-on-channel-10"/>
    <id>http://erikporter.com/Blog/ces-content-on-channel-10</id>
    <updated>2009-02-14T05:45:31.523</updated>
    <published>2007-01-08T03:22:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="CES" />
    <category term="10" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;&lt;a href=&quot;http://on10.net/tags/CES&quot;&gt;http://on10.net/tags/CES&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Keep checking back for more.&amp;nbsp; We&amp;#39;ve got a lot of great stuff lined up!&amp;nbsp; :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">XNA Game Studio 1.0 Released</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/xna-game-studio-1-0-released"/>
    <id>http://erikporter.com/Blog/xna-game-studio-1-0-released</id>
    <updated>2009-02-14T05:45:31.32</updated>
    <published>2006-12-11T18:34:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="XNA" />
    <category term="NET" />
    <category term="XBox" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I&amp;#39;ve been playing around with XNA a little bit in my free time.&amp;nbsp; It&amp;#39;s pretty darn easy to build a simple game with.&amp;nbsp; You can debug it from your Windows machine while running on your Xbox 360, all good stuff!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://learnxna.com/archive/2006/12/11/Its-official.aspx&quot;&gt;http://learnxna.com/archive/2006/12/11/Its-official.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Be sure to check out the &lt;a href=&quot;http://channel9.msdn.com/tags/xna&quot;&gt;XNA content on Channel 9&lt;/a&gt; too.&lt;/p&gt;&lt;p&gt;P.S. Don&amp;#39;t mind the typo on Learn XNA.&amp;nbsp; &amp;quot;not&amp;quot; should be &amp;quot;now&amp;quot;.&amp;nbsp; ;)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">WPF/E December CTP on Channel 9</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/wpf-e-december-ctp-on-channel-9"/>
    <id>http://erikporter.com/Blog/wpf-e-december-ctp-on-channel-9</id>
    <updated>2009-02-14T05:45:30.557</updated>
    <published>2006-12-04T20:51:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <category term="CommunityNews" />
    <category term="WPFE" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Awesome stuff.&amp;nbsp; Check it out!&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://channel9.msdn.com/playground/wpfe/&quot;&gt;http://channel9.msdn.com/playground/wpfe/&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Video Marketplace Launches on Xbox 360</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/video-marketplace-launches-on-xbox-360"/>
    <id>http://erikporter.com/Blog/video-marketplace-launches-on-xbox-360</id>
    <updated>2009-02-14T05:45:28.247</updated>
    <published>2006-11-22T19:48:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="XBox" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Major Nelson talks about it here: &lt;a href=&quot;http://www.majornelson.com/archive/2006/11/22/video-marketplace-now-live.aspx&quot;&gt;http://www.majornelson.com/archive/2006/11/22/video-marketplace-now-live.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I turned on my 360 today to find all kinds of cool new ways for me to spend some points.&amp;nbsp; ;)&amp;nbsp; It&amp;#39;s pretty fabulous.&amp;nbsp; They&amp;#39;ve got shows for bunches of major networks, movies (old &amp;amp; new), etc.&lt;/p&gt;&lt;p&gt;I&amp;#39;m downloading THX 1138 (still haven&amp;#39;t seen it and I feel ashamed as a George Lucas fan).&amp;nbsp; I love that they have entire seasons of shows.&amp;nbsp; What I&amp;#39;m disappointed in though is the fact that the only TV shows they have in HD are all the CBS shows.&amp;nbsp; So if you wanted to watch the latest Studio 60 episode in HD you&amp;#39;re out of luck.&amp;nbsp; Hopefully this will change in the future.&amp;nbsp; Overall I&amp;#39;m loving this though!&amp;nbsp; I&amp;#39;m going to need a bigger hard drive soon.&amp;nbsp; ;)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Win Visual Studio 2005 (Team System Suite) and MSDN license</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Win-Visual-Studio-2005-_2800_Team-System-Suite_2900_-and-MSDN-license"/>
    <id>http://erikporter.com/Blog/Win-Visual-Studio-2005-_2800_Team-System-Suite_2900_-and-MSDN-license</id>
    <updated>2009-02-14T05:45:27.857</updated>
    <published>2006-11-13T23:31:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="VisualStudio" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;&lt;a href=&quot;http://addressof.com/blog/archive/2006/11/09/What-would-you-do-for-a-Visual-Studio-2005-_2800_Team-System_2900_-and-MSDN-license_3F00_.aspx&quot;&gt;http://addressof.com/blog/archive/2006/11/09/What-would-you-do-for-a-Visual-Studio-2005-_2800_Team-System_2900_-and-MSDN-license_3F00_.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Be creative!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">How to Keep Developers at Your Company</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/How-to-Keep-Developers-at-Your-Company"/>
    <id>http://erikporter.com/Blog/How-to-Keep-Developers-at-Your-Company</id>
    <updated>2009-02-14T05:45:27.637</updated>
    <published>2006-11-13T19:51:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="GeneralSoftwareDevelopment" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I think every&amp;nbsp;company (software or not and even the good companies) should read this article.&amp;nbsp; I&amp;#39;m definitely not in code for the money (although it&amp;#39;s icing on the cake).&amp;nbsp; Great article.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.softwarebyrob.com/articles/Nine_Things_Developers_Want_More_Than_Money.aspx&quot;&gt;http://www.softwarebyrob.com/articles/Nine_Things_Developers_Want_More_Than_Money.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;(found this from the &lt;a href=&quot;http://jobsyntax.com/blogs/jobgals/archive/2006/11/13/developers_want_more_than_just_money.aspx&quot; target=&quot;_blank&quot;&gt;JobSyntax blog&lt;/a&gt;)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Windows Forms to Windows Service Process to Process Communication Using WCF</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Windows-Forms-to-Windows-Service-Process-to-Process-Communication-Using-WCF"/>
    <id>http://erikporter.com/Blog/Windows-Forms-to-Windows-Service-Process-to-Process-Communication-Using-WCF</id>
    <updated>2009-02-14T05:45:27.42</updated>
    <published>2006-10-23T06:57:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Orcas" />
    <category term="NET" />
    <category term="WCF" />
    <category term="Vista" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I&amp;#39;ve been working on a side project for an application that will run on Windows Vista.&amp;nbsp; It involves a Windows Service that does P2P and WCF Endpoint code to do some communication.&amp;nbsp; I wanted to setup a WinForms app that could talk to it.&amp;nbsp; I could just set up another http endpoint, but that would be slower and open up my security surface area.&amp;nbsp; Instead I wanted my application to talk to the Windows Service in memory.&amp;nbsp; The way to do this is through named pipes in WCF.&amp;nbsp; It was fairly easy to figure out how to do, but currently WCF is a bit picky on the details so it took a while to get it going.&amp;nbsp; I thought I&amp;#39;d share how to setup this up with some sample code.&amp;nbsp; Note: I didn&amp;#39;t use WPF for the UI because I don&amp;#39;t know it well enough yet and know Windowns Forms pretty well.&amp;nbsp; I imagine a WPF app would connect about the same.&lt;/p&gt;&lt;p&gt;Setting up the WCF Service and Contract&lt;/p&gt;&lt;p&gt;Setting up the Named Pipe&lt;/p&gt;&lt;p&gt;Setting up the Metadata Service&lt;/p&gt;&lt;p&gt;Connecting to the Service&lt;/p&gt;&lt;p&gt;&amp;nbsp;Enjoy!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ROW_NUMBER() OVER Not Fast Enough With Large Result Set</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/ROW_5F00_NUMBER_28002900_-OVER-Not-Fast-Enough-With-Large-Result-Set"/>
    <id>http://erikporter.com/Blog/ROW_5F00_NUMBER_28002900_-OVER-Not-Fast-Enough-With-Large-Result-Set</id>
    <updated>2009-02-14T05:45:24.19</updated>
    <published>2006-10-18T06:48:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="SQLServer" />
    <category term="Channel9" />
    <category term="10" />
    <content type="html" xml:lang="en">
      &lt;p&gt;So I&amp;#39;m working on improving the performance of the next version of &lt;a href=&quot;http://channel9.msdn.com&quot; title=&quot;Channel 9&quot;&gt;Channel 9&lt;/a&gt;.&amp;nbsp;&amp;nbsp;For those of you not familiar, our team created a new platform for our department to build community sites (blogs, forums, videos, tagging, etc).&amp;nbsp; You can see an example of the platform running &lt;a href=&quot;http://on10.net&quot; title=&quot;Microsoft 10&quot;&gt;on 10&lt;/a&gt;.&amp;nbsp; Currently, there&amp;#39;s not a whole lot of data in the 10 database so we&amp;#39;ve been able to get away with murder from a performance standpoint.&amp;nbsp; Now that I&amp;#39;ve imported all the data from Community Server (Channel 9) to 10 (EvNet Platform), we&amp;#39;ve been finding that 250,000 rows doesn&amp;#39;t perform very well with our current code.&lt;/p&gt;&lt;p&gt;The architecture of our platform is pretty simple.&amp;nbsp; There&amp;#39;s an Entry table that houses Entries, Threads &amp;amp; Comments and the relationships between them.&amp;nbsp; When you&amp;#39;re viewing a blog, you&amp;#39;re looking at this table.&amp;nbsp; When you&amp;#39;re looking at a forum, you&amp;#39;re looking at this table.&amp;nbsp; We differentiate everything in our system by tags.&amp;nbsp; There&amp;#39;s one for each forum, each blog, and content tags to describe what&amp;#39;s in each entry.&lt;/p&gt;&lt;p&gt;Currently, to do paging we&amp;#39;ve been using the ROW_NUMBER OVER function.&amp;nbsp; It&amp;#39;s a new feature of SQL Server 2005 and is very simple and easy to use.&amp;nbsp; Unfortunately, it doesn&amp;#39;t work very well with a lot of rows (250,000 for example).&amp;nbsp; I did some searching and came across &lt;a href=&quot;http://www.4guysfromrolla.com/webtech/042606-1.shtml&quot; title=&quot;A More Efficient Method for Paging Through Large Result Sets&quot;&gt;this gem of an article&lt;/a&gt;.&amp;nbsp; It uses an interesting trick to use SET ROWCOUNT to get the first record to start with in a paged result set, then you just run the query again and set the row count again to the number you want where the values are greater than the first row from the starting point of the paged result set and man is it snappy.&amp;nbsp; Do check it out if you&amp;#39;re having troubles with performance of ROW_NUMBER() OVER.&lt;/p&gt;&lt;p&gt;Oh yah, I forgot to mention how much of an improvement this change made.&amp;nbsp; Before the change queries were taking about 8 seconds on average.&amp;nbsp; After the change, the queries now take less than 1 second.&amp;nbsp; Depending on if SQL has decided to cache the results or not, it&amp;#39;s pretty much instantaneous.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Soapbox Video and Invites on 10</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Soapbox-Video-and-Invites-on-10"/>
    <id>http://erikporter.com/Blog/Soapbox-Video-and-Invites-on-10</id>
    <updated>2009-02-14T05:45:23.567</updated>
    <published>2006-10-13T17:15:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="10" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Laura posted a video all about &lt;a href=&quot;http://on10.net/Blogs/laura/soapbox/&quot; title=&quot;Soapbox&quot;&gt;Soapbox&lt;/a&gt; on 10.&amp;nbsp; If you&amp;#39;re not familiar Soapbox...think...YouTube.&amp;nbsp; ;)&amp;nbsp; Want to know how it&amp;#39;s different than YouTube?&amp;nbsp; &lt;a href=&quot;http://on10.net/Blogs/laura/soapbox/&quot; title=&quot;Soapbox on 10&quot;&gt;Watch the video&lt;/a&gt;, then get an invite (which have been hard to come by as of late), courtesy of 10!&amp;nbsp; :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">See the Zune in Action!</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/See-the-Zune-in-Action_2100_"/>
    <id>http://erikporter.com/Blog/See-the-Zune-in-Action_2100_</id>
    <updated>2009-02-14T05:45:23.317</updated>
    <published>2006-09-29T21:02:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;No words necessary...enjoy!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://on10.net/Blogs/duncan/sharing-songs-and-pictures-with-the-zune/&quot;&gt;http://on10.net/Blogs/duncan/sharing-songs-and-pictures-with-the-zune/&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Our Team on Channel 9 Again</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Our-Team-on-Channel-9-Again"/>
    <id>http://erikporter.com/Blog/Our-Team-on-Channel-9-Again</id>
    <updated>2009-02-14T05:45:23.113</updated>
    <published>2006-09-27T22:47:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="GeneralSoftwareDevelopment" />
    <category term="Channel9" />
    <category term="10" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;We recently launched a new version of &lt;a href=&quot;http://on10.net&quot; target=&quot;_blank&quot;&gt;10&lt;/a&gt;.&amp;nbsp; There were a few cosmetic changes, lots of bug fixes and a HUGE update to the guts of it.&amp;nbsp; It is now much more generic on the inside.&amp;nbsp; At its simplest, our platform is now just a bunch of Entries and Tags and associations between the two.&amp;nbsp; When viewing a forum, you&amp;#39;re just looking at tagged entries.&amp;nbsp; When viewing someone&amp;#39;s blog, you&amp;#39;re just looking at tagged entries.&amp;nbsp; The list continues...&lt;/p&gt;&lt;p&gt;This major re-organization/generalization of our platform lines us up to update &lt;a href=&quot;http://channel9.msdn.com&quot;&gt;Channel 9&lt;/a&gt; soon to this new platform, enabling us to make very quick updates to all of our sites.&amp;nbsp; There will be some new sites over the next year.&lt;/p&gt;&lt;p&gt;Anyway, we put up a video of us launching the new site on Channel 9. Check it out.&amp;nbsp; It&amp;#39;s good for a laugh and a little insight into our crazy team.&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://channel9.msdn.com/Showpost.aspx?postid=238667&quot;&gt;http://channel9.msdn.com/Showpost.aspx?postid=238667&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Also, expect to see these videos turn into a regular thing (but in much shorter and more frequent chunks).&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Web Application Project (Visual Studio 2005) on Windows Vista RC1</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Web-Application-Project-_2800_Visual-Studio-2005_2900_-on-Windows-Vista-RC1"/>
    <id>http://erikporter.com/Blog/Web-Application-Project-_2800_Visual-Studio-2005_2900_-on-Windows-Vista-RC1</id>
    <updated>2009-02-14T05:45:22.613</updated>
    <published>2006-09-27T17:22:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="ASPNET" />
    <category term="VisualStudio" />
    <category term="WindowsVista" />
    <content type="html" xml:lang="en">
      &lt;p&gt;If you&amp;#39;ve tried &lt;a href=&quot;http://webproject.scottgu.com/&quot;&gt;installing it&lt;/a&gt; already, you know it doesn&amp;#39;t work.&amp;nbsp; Rich Mercer posted the answer, which is to run the msi as an administrator.&amp;nbsp; Unfortunately, you can&amp;#39;t just right mouse click and run as Administrator.&amp;nbsp; For details on the work around (a bat file) check out &lt;a href=&quot;http://richmercer.com/archive/2006/09/01/Installing-Web-Application-Project-in-Vista.aspx&quot; target=&quot;_blank&quot;&gt;Rich&amp;#39;s blog post about it&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: The issue with this has been fixed in Windows Vista RC2 (5744) and you do not need the workaround anymore to get it installed.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Channel 9 and Microsoft 10 are Hiring</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Channel-9-and-Microsoft-10-are-Hiring"/>
    <id>http://erikporter.com/Blog/Channel-9-and-Microsoft-10-are-Hiring</id>
    <updated>2009-02-14T05:45:22.46</updated>
    <published>2006-09-13T17:20:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <category term="10" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Jeff spills the details...&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.jeffsandquist.com/WereHiringComeJoinTheChannel9And10Team.aspx&quot;&gt;http://www.jeffsandquist.com/WereHiringComeJoinTheChannel9And10Team.aspx&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Windows Live Spaces Goes LIVE!</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Windows-Live-Spaces-Goes-LIVE_2100_"/>
    <id>http://erikporter.com/Blog/Windows-Live-Spaces-Goes-LIVE_2100_</id>
    <updated>2009-02-14T05:45:22.27</updated>
    <published>2006-08-02T03:29:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="10" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      The new &lt;a href=&quot;http://spaces.live.com&quot; title=&quot;Windows Live Spaces&quot;&gt;Windows Live Spaces&lt;/a&gt; (formerly MSN Spaces) has just gone live.&amp;nbsp; They have some really neat new features.&amp;nbsp; Of course we have a &lt;a href=&quot;http://on10.net/Blogs/TheShow/4319/&quot; title=&quot;Windows Live Spaces video on 10&quot;&gt;video on 10&lt;/a&gt; about the new release.&amp;nbsp; :)
    </content>
  </entry>
  <entry>
    <title type="html">Microsoft Photosynth from Live Labs</title>
    <link rel="alternate" type="text/html" href="http://erikporter.com/Blog/Microsoft-Photosynth-from-Live-Labs"/>
    <id>http://erikporter.com/Blog/Microsoft-Photosynth-from-Live-Labs</id>
    <updated>2009-02-14T05:45:21.647</updated>
    <published>2006-07-28T18:08:00</published>
    <author>
      <name>Erik</name>
    </author>
    <category term="Channel9" />
    <category term="10" />
    <category term="CommunityNews" />
    <content type="html" xml:lang="en">
      &lt;p&gt;This thing is unbelieveable!&amp;nbsp; It meshes still images together in 3D space and lets you fly around through them.&lt;/p&gt;&lt;p&gt;Check it out on &lt;a href=&quot;http://on10.net/Blogs/TheShow/4187/&quot;&gt;10&lt;/a&gt; AND &lt;a href=&quot;http://channel9.msdn.com/showpost.aspx?postid=220870&quot;&gt;Channel 9&lt;/a&gt; for different perspectives on the product.&lt;/p&gt;&lt;p&gt;Now what I really want to see is navigating images using &lt;a href=&quot;http://on10.net/Blogs/TheShow/3903/&quot;&gt;Play Anywhere&lt;/a&gt;.&amp;nbsp; ;)&lt;/p&gt;
    </content>
  </entry>
</feed>

