<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>dnknormark.net</title>
    <description>A developers third place...</description>
    <link>http://dnknormark.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.1.24</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://dnknormark.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Martin H. Normark</dc:creator>
    <dc:title>dnknormark.net</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/dnknormarknet" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>ASP.NET MVC View Page Editor in Visual Studio 2010 Beta 2 won’t recognize HTML tags</title>
      <description>&lt;p&gt;I love the new IntelliSense dialog in Visual Studio 2010 Beta 2, that &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/22/vs-2010-code-intellisense-improvements-vs-2010-and-net-4-0-series.aspx"&gt;ScottGu has blogged about&lt;/a&gt;. But when editing an ASP.NET MVC View Page in Visual Studio 2010 Beta 2, you end up fighting the IntelliSense. That is because IntelliSense and the HTML Editor doesn’t recognize *any* HTML tags.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dnknormark.net/image.axd?picture=image_1.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dnknormark.net/image.axd?picture=image_thumb_1.png" width="655" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Trying to add a simple paragraph tag in HTML suggests a panel (code snippet). When you finish the P tag, by typing &amp;gt;, the result is this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dnknormark.net/image.axd?picture=image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dnknormark.net/image.axd?picture=image_thumb_2.png" width="306" height="188" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Pretty annoying to fight with IntelliSense when you want to code! I thought you might be able to fix this, by deleting all the new ASP.NET specific code snippets in the “C:\Program Files\Microsoft Visual Studio 10.0\Web\Snippets\HTML\1033\ASP.NET” folder.&lt;/p&gt;  &lt;p&gt;This actually works. Now you can actually see the ASP.NET MVC code snippets, that was hidden in the masses of the ASP.NET ones.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dnknormark.net/image.axd?picture=image_3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dnknormark.net/image.axd?picture=image_thumb_3.png" width="642" height="359" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;But it still has all the ASP.NET Server Controls listed. I thought I could get rid of these by removing a namespace reference to System.Web in the Pages section of Web.config. But that is not present. So I don’t know how to fix that.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zSyb_roZuqFUXxFvqrFZRQKzAoA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zSyb_roZuqFUXxFvqrFZRQKzAoA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zSyb_roZuqFUXxFvqrFZRQKzAoA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zSyb_roZuqFUXxFvqrFZRQKzAoA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/e2E6qg93m8o" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/e2E6qg93m8o/post.aspx</link>
      <author>MartinHN</author>
      <comments>http://dnknormark.net/post/ASPNET-MVC-View-Page-Editor-in-Visual-Studio-2010-Beta-2-wone28099t-recognize-HTML-tags.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=dd61a05f-ab60-4f25-ad6b-5bb39eab155a</guid>
      <pubDate>Wed, 21 Oct 2009 13:24:00 +0100</pubDate>
      <category>ASP.NET MVC</category>
      <dc:publisher>MartinHN</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=dd61a05f-ab60-4f25-ad6b-5bb39eab155a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=dd61a05f-ab60-4f25-ad6b-5bb39eab155a</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/ASPNET-MVC-View-Page-Editor-in-Visual-Studio-2010-Beta-2-wone28099t-recognize-HTML-tags.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=dd61a05f-ab60-4f25-ad6b-5bb39eab155a</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=dd61a05f-ab60-4f25-ad6b-5bb39eab155a</feedburner:origLink></item>
    <item>
      <title>Search Twitter from C# using LINQ to XML</title>
      <description>&lt;p&gt;In some applications, it could be cool to have a feature that enabled the user to quickly get a glimpse of what people are saying on &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; about the user or their product, service, company etc.&lt;/p&gt;  &lt;p&gt;For instance, a service like &lt;a href="http://getsatisfaction.com"&gt;GetSatisfaction.com&lt;/a&gt; has a feature just like that. They call it &lt;a href="http://getsatisfaction.com/dell/overheard"&gt;Overheard&lt;/a&gt;, and this is what it looks like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dnknormark.net/image.axd?picture=overheard.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="overheard" border="0" alt="overheard" src="http://www.dnknormark.net/image.axd?picture=overheard_thumb.jpg" width="621" height="513" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There’s nothing like Twitter to give you feedback. I think &lt;a href="http://mediatemple.net/"&gt;MediaTemple&lt;/a&gt; felt the &lt;a href="http://search.twitter.com/search?q=+mediatemple+since%3A2009-02-26+until%3A2009-02-28"&gt;effect of unhappy customers on Twitter&lt;/a&gt; when their servers broke down, and stayed there for more than two days!&lt;/p&gt;  &lt;p&gt;Anyway. I wanted to search from C#, and get back a DataTable. Here’s how it’s done:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Searches Twitter for the specified query.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;query&amp;quot;&amp;gt;The query.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Returns the search results as a DataTable&amp;lt;/returns&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; DataTable Search(&lt;span class="kwrd"&gt;string&lt;/span&gt; query)
    {
      DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;);
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;html&amp;quot;&lt;/span&gt;);
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;pubdate&amp;quot;&lt;/span&gt;);
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;);
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;link&amp;quot;&lt;/span&gt;);
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;authorname&amp;quot;&lt;/span&gt;);
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;authorlink&amp;quot;&lt;/span&gt;);

      XDocument tweetResults = XDocument.Load(String.Format(&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;      &lt;span class="str"&gt;&amp;quot;http://search.twitter.com/search.atom?q={0}&amp;quot;&lt;/span&gt;, HttpUtility.UrlEncode(query)));&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;
      XNamespace atomNS = &lt;span class="str"&gt;&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;/span&gt;;
      var q = from tweet &lt;span class="kwrd"&gt;in&lt;/span&gt; tweetResults.Descendants(atomNS + &lt;span class="str"&gt;&amp;quot;entry&amp;quot;&lt;/span&gt;)
              select &lt;span class="kwrd"&gt;new&lt;/span&gt;
              {
                Text = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)tweet.Element(atomNS + &lt;span class="str"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;),
                Html = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)tweet.Element(atomNS + &lt;span class="str"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;),
                DatePublished = DateTime.Parse((&lt;span class="kwrd"&gt;string&lt;/span&gt;)tweet.Element(atomNS + &lt;span class="str"&gt;&amp;quot;published&amp;quot;&lt;/span&gt;)),
                Id = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)tweet.Element(atomNS + &lt;span class="str"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;),
                Link = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)tweet.Elements(atomNS + &lt;span class="str"&gt;&amp;quot;link&amp;quot;&lt;/span&gt;)
                .Where(link =&amp;gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)link.Attribute(&lt;span class="str"&gt;&amp;quot;rel&amp;quot;&lt;/span&gt;) == &lt;span class="str"&gt;&amp;quot;alternate&amp;quot;&lt;/span&gt;)
                .Select(link =&amp;gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)link.Attribute(&lt;span class="str"&gt;&amp;quot;href&amp;quot;&lt;/span&gt;))
                .First(),
                Author = (from author &lt;span class="kwrd"&gt;in&lt;/span&gt; tweet.Descendants(atomNS + &lt;span class="str"&gt;&amp;quot;author&amp;quot;&lt;/span&gt;)
                          select &lt;span class="kwrd"&gt;new&lt;/span&gt;
                          {
                            Name = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)author.Element(atomNS + &lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;),
                            Uri = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)author.Element(atomNS + &lt;span class="str"&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;),
                          }).First()
              };
      
      &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; q)
      {
        dt.Rows.Add(item.Text, item.Html, item.DatePublished, item.Id, item.Link, &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                    item.Author.Name, item.Author.Uri);
      }

      &lt;span class="kwrd"&gt;return&lt;/span&gt; dt;
    }&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dUN4iBe1Qcciwbi4HzmdQjqCUa4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dUN4iBe1Qcciwbi4HzmdQjqCUa4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dUN4iBe1Qcciwbi4HzmdQjqCUa4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dUN4iBe1Qcciwbi4HzmdQjqCUa4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/spLVXg_EN0w" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/spLVXg_EN0w/post.aspx</link>
      <author>MartinHN</author>
      <comments>http://dnknormark.net/post/Search-Twitter-from-C-using-LINQ-to-XML.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=a419e2bb-2124-4d7d-a966-1afd9efd2161</guid>
      <pubDate>Mon, 16 Mar 2009 21:28:08 +0100</pubDate>
      <category>C#</category>
      <dc:publisher>MartinHN</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=a419e2bb-2124-4d7d-a966-1afd9efd2161</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=a419e2bb-2124-4d7d-a966-1afd9efd2161</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/Search-Twitter-from-C-using-LINQ-to-XML.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=a419e2bb-2124-4d7d-a966-1afd9efd2161</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=a419e2bb-2124-4d7d-a966-1afd9efd2161</feedburner:origLink></item>
    <item>
      <title>Migrate web.config to support the IIS 7 Integrated Pipeline</title>
      <description>&lt;p&gt;Whenever you deploy a website to &lt;strong&gt;IIS 7&lt;/strong&gt; that is not compliant with the IIS 7 integrated pipeline, you will get an error like this one:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dnknormark.net/image.axd?picture=iis7integratedpipelineerror.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="iis7-integrated-pipeline-error" border="0" alt="iis7-integrated-pipeline-error" src="http://www.dnknormark.net/image.axd?picture=iis7integratedpipelineerror_thumb.png" width="644" height="458" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Not the great error message you get. It actually gives you the solution right away: &lt;strong&gt;Migrate Web.config to support the integrated pipeline. &lt;/strong&gt;To do that, start a command prompt, and execute: &lt;/p&gt;  &lt;p&gt;&lt;b&gt;%SystemRoot%\system32\inetsrv\appcmd migrate config &amp;quot;test/&amp;quot;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;After doing this, our Web.config is changed to support the IIS 7 integrated pipeline and we can see the website.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jAVbPz3pAEF-YpG0VRj-yEPjJ0U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jAVbPz3pAEF-YpG0VRj-yEPjJ0U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jAVbPz3pAEF-YpG0VRj-yEPjJ0U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jAVbPz3pAEF-YpG0VRj-yEPjJ0U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/dWdZ2seL7jw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/dWdZ2seL7jw/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/Migrate-webconfig-to-support-the-IIS-7-Integrated-Pipeline.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=f20dd65b-bff9-4446-a1b6-d02c228d2032</guid>
      <pubDate>Sun, 15 Mar 2009 22:13:47 +0100</pubDate>
      <category>IIS7</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=f20dd65b-bff9-4446-a1b6-d02c228d2032</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=f20dd65b-bff9-4446-a1b6-d02c228d2032</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/Migrate-webconfig-to-support-the-IIS-7-Integrated-Pipeline.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=f20dd65b-bff9-4446-a1b6-d02c228d2032</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=f20dd65b-bff9-4446-a1b6-d02c228d2032</feedburner:origLink></item>
    <item>
      <title>Automatically translate Global and Local Resource (resx) files</title>
      <description>&lt;p&gt;Yesterday, I blogged about how you can &lt;a href="http://dnknormark.net/post/Translate-text-in-C-using-Google-Translate.aspx"&gt;use Google Translate to translate a string in C#&lt;/a&gt;. To make it more useful than just a simple translator, and because I need to translate some Global Resource files for an E-commerce website that I’m working on, I wanted to create a small Windows Application in C# that could read a Global Resource file (.resx) and translate it into a selected language using the &lt;a href="http://dnknormark.net/post/Translate-text-in-C-using-Google-Translate.aspx"&gt;method for translating a word in C#&lt;/a&gt; that i blogged about yesterday.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dnknormark.net/image.axd?picture=image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.dnknormark.net/image.axd?picture=image_thumb.png" width="451" height="166" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is how it looks so far. You simply select the resource file you want to translate. Select the current language of the resource file in the middle box, and select the language you want to translate it to in the last box. Click &lt;strong&gt;Translate&lt;/strong&gt; at it should work. The new resource file will be saved in the same location as the application itself.&lt;/p&gt; &lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-146a3db7b364e824.skydrive.live.com/embedrowdetail.aspx/Public/ResxTranslator.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gjSizy3RVpNmfvJjdDwJoj6sXQo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gjSizy3RVpNmfvJjdDwJoj6sXQo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gjSizy3RVpNmfvJjdDwJoj6sXQo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gjSizy3RVpNmfvJjdDwJoj6sXQo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/ebu5d5Xtdc0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/ebu5d5Xtdc0/post.aspx</link>
      <author>MartinHN</author>
      <comments>http://dnknormark.net/post/Automatically-translate-Global-and-Local-Resource-(resx)-files.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=7b9c2f28-6797-49bb-8a90-908ae94b8351</guid>
      <pubDate>Fri, 13 Mar 2009 22:31:14 +0100</pubDate>
      <category>C#</category>
      <category>Internationalization</category>
      <dc:publisher>MartinHN</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=7b9c2f28-6797-49bb-8a90-908ae94b8351</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=7b9c2f28-6797-49bb-8a90-908ae94b8351</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/Automatically-translate-Global-and-Local-Resource-(resx)-files.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=7b9c2f28-6797-49bb-8a90-908ae94b8351</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=7b9c2f28-6797-49bb-8a90-908ae94b8351</feedburner:origLink></item>
    <item>
      <title>Translate text in C#, using Google Translate</title>
      <description>&lt;p&gt;Sometimes, it would be great to be able to translate a text from e.g. English to Danish directly from C#. This could be useful when you want to translate a &lt;a href="http://msdn.microsoft.com/en-us/library/ekyft91f(VS.80).aspx"&gt;Resource file&lt;/a&gt; into another language.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://translate.google.com/"&gt;Google Translate&lt;/a&gt; is awesome. There’s also &lt;a href="http://www.windowslivetranslator.com/"&gt;Windows Live Translator&lt;/a&gt;, but Microsoft are far behind Google (also) in this game.&lt;/p&gt;  &lt;p&gt;Code:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Net;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text.RegularExpressions;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Utilities
{
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Translator
  {
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Translates the text.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;input&amp;quot;&amp;gt;The input.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;languagePair&amp;quot;&amp;gt;The language pair.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TranslateText(&lt;span class="kwrd"&gt;string&lt;/span&gt; input, &lt;span class="kwrd"&gt;string&lt;/span&gt; languagePair)
    {
      &lt;span class="kwrd"&gt;return&lt;/span&gt; TranslateText(input, languagePair, System.Text.Encoding.UTF7);
    }

    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Translate Text using Google Translate&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;input&amp;quot;&amp;gt;The string you want translated&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;languagePair&amp;quot;&amp;gt;2 letter Language Pair, delimited by &amp;quot;|&amp;quot;. &lt;/span&gt;
    &lt;span class="rem"&gt;/// e.g. &amp;quot;en|da&amp;quot; language pair means to translate from English to Danish&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;encoding&amp;quot;&amp;gt;The encoding.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Translated to String&amp;lt;/returns&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TranslateText(&lt;span class="kwrd"&gt;string&lt;/span&gt; input, &lt;span class="kwrd"&gt;string&lt;/span&gt; languagePair, Encoding encoding)
    {
      &lt;span class="kwrd"&gt;string&lt;/span&gt; url = String.Format(&lt;span class="str"&gt;&amp;quot;http://www.google.com/translate_t?hl=en&amp;amp;ie=UTF8&amp;amp;text={0}&amp;amp;langpair={1}&amp;quot;&lt;/span&gt;, input, languagePair);

      &lt;span class="kwrd"&gt;string&lt;/span&gt; result = String.Empty;

      &lt;span class="kwrd"&gt;using&lt;/span&gt; (WebClient webClient = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient())
      {
        webClient.Encoding = encoding;
        result = webClient.DownloadString(url);
      }

      Match m = Regex.Match(result, &lt;span class="str"&gt;&amp;quot;(?&amp;lt;=&amp;lt;div id=result_box dir=\&amp;quot;ltr\&amp;quot;&amp;gt;)(.*?)(?=&amp;lt;/div&amp;gt;)&amp;quot;&lt;/span&gt;);

      &lt;span class="kwrd"&gt;if&lt;/span&gt; (m.Success)
        result = m.Value;

      &lt;span class="kwrd"&gt;return&lt;/span&gt; result;
    }
  }
}&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;The translated string is fetched by the RegEx close to the bottom. This could of course change, and you have to keep it up to date.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r0m3S4zVMUTILLaH7vUuT_UdqB4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r0m3S4zVMUTILLaH7vUuT_UdqB4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r0m3S4zVMUTILLaH7vUuT_UdqB4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r0m3S4zVMUTILLaH7vUuT_UdqB4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/-_wi5WTtHKM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/-_wi5WTtHKM/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/Translate-text-in-C-using-Google-Translate.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=a0f72805-3e12-4953-9f3f-c38d9efc3efb</guid>
      <pubDate>Thu, 12 Mar 2009 00:14:26 +0100</pubDate>
      <category>C#</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=a0f72805-3e12-4953-9f3f-c38d9efc3efb</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=a0f72805-3e12-4953-9f3f-c38d9efc3efb</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/Translate-text-in-C-using-Google-Translate.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=a0f72805-3e12-4953-9f3f-c38d9efc3efb</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=a0f72805-3e12-4953-9f3f-c38d9efc3efb</feedburner:origLink></item>
    <item>
      <title>ASP.NET Search Engine Optimization</title>
      <description>&lt;p&gt;I made a few E-commerce websites a few years back when I was self-employed. Ranking well in the search engines is very important for E-commerce websites in order to get relevant visitors, and if your site is designed well for converting, visitors into sales, you will make money. That’s the way it goes.&lt;/p&gt;  &lt;p&gt;A lot of naive CEO’s and alike, think that you absolutely have to hire expensive SEO consultants in order to rank well. That is *not* true. Instead, why don’t you just spent your time and money on making original, relevant and great content? That’s a true winner. &lt;/p&gt;  &lt;p&gt;Though, there’s still a few technical details you have to get right. &lt;/p&gt;  &lt;p&gt;Make sure to set a unique page title on all your pages. Use the same text as a &amp;lt;h1&amp;gt; tag on the page.&lt;/p&gt;  &lt;p&gt;Don’t screw up your URLs. You will get punished having the same content on those URLs: &lt;a href="http://www.example.com/producs/computers?sortorder=price&amp;amp;page=2"&gt;www.example.com/producs/computers?sortorder=price&amp;amp;page=2&lt;/a&gt; and &lt;a href="http://www.example.com/producs/computers?page=2&amp;amp;sortorder=price"&gt;www.example.com/producs/computers?page=2&amp;amp;sortorder=price&lt;/a&gt;. This is called duplicate content, and search engines doesn’t like that. You can use the new &lt;a href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html"&gt;canonical tag&lt;/a&gt; for telling search engines which one is original.&lt;/p&gt;  &lt;p&gt;Make internal links absolute. Yes. You shouldn’t do this: &amp;lt;a href=”/page1.htm”&amp;gt;Page 1&amp;lt;/a&amp;gt;. Do this instead: &amp;lt;a href=”http://www.example.com/page1.htm”&amp;gt;Page 1&amp;lt;/a&amp;gt;. &lt;/p&gt;  &lt;p&gt;301 permanent redirect example.com to &lt;a href="http://www.example.com"&gt;www.example.com&lt;/a&gt; or vice versa. Allowing visitors to access your page on both URLs, will also be treated as duplicate content.&lt;/p&gt;  &lt;p&gt;If you’re moving your website to a new platform, server, technology and your URLs will change. Make sure not to return 404 on the old URLs. You have to 301 permanent redirect the old URLs to the new ones. Otherwise you will lose all your current search engine carma.&lt;/p&gt;  &lt;p&gt;I use those two methods to set page information, and 301 redirect:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMetaInformation()
  {
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Title = PageTitle;

    HtmlMeta metaKeywords = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlMeta();
    metaKeywords.Name = &lt;span class="str"&gt;&amp;quot;keywords&amp;quot;&lt;/span&gt;;
    metaKeywords.Content = &lt;span class="kwrd"&gt;this&lt;/span&gt;.MetaKeywords;
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Header.Controls.Add(metaKeywords);

    HtmlMeta metaDescription = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlMeta();
    metaDescription.Name = &lt;span class="str"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;;
    metaDescription.Content = &lt;span class="kwrd"&gt;this&lt;/span&gt;.MetaDescription;
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Header.Controls.Add(metaDescription);

    HtmlMeta metaRobots = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlMeta();
    metaRobots.Name = &lt;span class="str"&gt;&amp;quot;robots&amp;quot;&lt;/span&gt;;
    metaRobots.Content = &lt;span class="kwrd"&gt;this&lt;/span&gt;.MetaRobots;
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Header.Controls.Add(metaRobots);
  }

  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PermanentRedirect(&lt;span class="kwrd"&gt;string&lt;/span&gt; newUrl)
  {
    Response.Status = &lt;span class="str"&gt;&amp;quot;301 Moved Permanently&amp;quot;&lt;/span&gt;;
    Response.StatusCode = 301;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;    Response.AddHeader(&lt;span class="str"&gt;&amp;quot;Location&amp;quot;&lt;/span&gt;, newUrl);
  }&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;You also want to take a look at the &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=40318&amp;amp;hl=en"&gt;Google SiteMap&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Create a generic handler in ASP.NET and call it sitemap.ashx. Generate and XML string like this:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UTF-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;urlset&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.sitemaps.org/schemas/sitemap/0.9&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;url&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;loc&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.example.com/&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;loc&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;lastmod&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2005-01-01&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;lastmod&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;changefreq&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;monthly&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;changefreq&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;priority&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;0.8&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;priority&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;url&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;urlset&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Take a further look at &lt;a href="http://www.codinghorror.com/blog/archives/001174.html"&gt;the importance of sitemaps&lt;/a&gt;, if you want to know why you should use one. &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2IuCm45r6xlAjTZy4bPvZht9Pp8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2IuCm45r6xlAjTZy4bPvZht9Pp8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2IuCm45r6xlAjTZy4bPvZht9Pp8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2IuCm45r6xlAjTZy4bPvZht9Pp8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/iCvDOx3IuYc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/iCvDOx3IuYc/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/ASPNET-Search-Engine-Optimization.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=dbcc22e6-b5ae-4f5e-add9-265d740d666d</guid>
      <pubDate>Wed, 11 Mar 2009 17:46:04 +0100</pubDate>
      <category>ASP.NET</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=dbcc22e6-b5ae-4f5e-add9-265d740d666d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=dbcc22e6-b5ae-4f5e-add9-265d740d666d</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/ASPNET-Search-Engine-Optimization.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=dbcc22e6-b5ae-4f5e-add9-265d740d666d</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=dbcc22e6-b5ae-4f5e-add9-265d740d666d</feedburner:origLink></item>
    <item>
      <title>C# TwitPic API client</title>
      <description>&lt;p&gt;I’ve spent some time lately, playing around with the &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt; &lt;a href="http://apiwiki.twitter.com/"&gt;API&lt;/a&gt;. And along with that belongs the &lt;a href="http://twitpic.com/"&gt;TwitPic&lt;/a&gt;’s &lt;a href="http://twitpic.com/api.do"&gt;API&lt;/a&gt;. I’m using Twitter a lot, to stay in touch with tech news, other developers and just for fun. But it’s getting more and more used for a lot of different things, and I needed it to integrate with an E-commerce platform I’m developing.&lt;/p&gt;  &lt;p&gt;The code for post a picture to TwitPic looks like this:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// URL for the TwitPic API's upload method&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TWITPIC_UPLADO_API_URL = &lt;span class="str"&gt;&amp;quot;http://twitpic.com/api/upload&amp;quot;&lt;/span&gt;;

    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// URL for the TwitPic API's upload and post method&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TWITPIC_UPLOAD_AND_POST_API_URL = &lt;span class="str"&gt;&amp;quot;http://twitpic.com/api/uploadAndPost&amp;quot;&lt;/span&gt;;

    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Uploads the photo and sends a new Tweet&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;binaryImageData&amp;quot;&amp;gt;The binary image data.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;tweetMessage&amp;quot;&amp;gt;The tweet message.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;filename&amp;quot;&amp;gt;The filename.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Return true, if the operation was succeded.&amp;lt;/returns&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; UploadPhoto(&lt;span class="kwrd"&gt;byte&lt;/span&gt;[] binaryImageData, &lt;span class="kwrd"&gt;string&lt;/span&gt; tweetMessage, &lt;span class="kwrd"&gt;string&lt;/span&gt; filename)
    {
      &lt;span class="rem"&gt;// Documentation: http://www.twitpic.com/api.do&lt;/span&gt;
      &lt;span class="kwrd"&gt;string&lt;/span&gt; boundary = Guid.NewGuid().ToString();
      &lt;span class="kwrd"&gt;string&lt;/span&gt; requestUrl = String.IsNullOrEmpty(tweetMessage) ? TWITPIC_UPLADO_API_URL : TWITPIC_UPLOAD_AND_POST_API_URL;
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
      &lt;span class="kwrd"&gt;string&lt;/span&gt; encoding = &lt;span class="str"&gt;&amp;quot;iso-8859-1&amp;quot;&lt;/span&gt;;

      request.PreAuthenticate = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
      request.AllowWriteStreamBuffering = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
      request.ContentType = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;multipart/form-data; boundary={0}&amp;quot;&lt;/span&gt;, boundary);
      request.Method = &lt;span class="str"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;;

      &lt;span class="kwrd"&gt;string&lt;/span&gt; header = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;--{0}&amp;quot;&lt;/span&gt;, boundary);
      &lt;span class="kwrd"&gt;string&lt;/span&gt; footer = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;--{0}--&amp;quot;&lt;/span&gt;, boundary);

      StringBuilder contents = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
      contents.AppendLine(header);

      &lt;span class="kwrd"&gt;string&lt;/span&gt; fileContentType = GetImageContentType(filename);
      &lt;span class="kwrd"&gt;string&lt;/span&gt; fileHeader = String.Format(&lt;span class="str"&gt;&amp;quot;Content-Disposition: file; name=\&amp;quot;{0}\&amp;quot;; filename=\&amp;quot;{1}\&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;media&amp;quot;&lt;/span&gt;, filename);
      &lt;span class="kwrd"&gt;string&lt;/span&gt; fileData = Encoding.GetEncoding(encoding).GetString(binaryImageData);

      contents.AppendLine(fileHeader);
      contents.AppendLine(String.Format(&lt;span class="str"&gt;&amp;quot;Content-Type: {0}&amp;quot;&lt;/span&gt;, fileContentType));
      contents.AppendLine();
      contents.AppendLine(fileData);

      contents.AppendLine(header);
      contents.AppendLine(String.Format(&lt;span class="str"&gt;&amp;quot;Content-Disposition: form-data; name=\&amp;quot;{0}\&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;username&amp;quot;&lt;/span&gt;));
      contents.AppendLine();
      contents.AppendLine(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Username);

      contents.AppendLine(header);
      contents.AppendLine(String.Format(&lt;span class="str"&gt;&amp;quot;Content-Disposition: form-data; name=\&amp;quot;{0}\&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;));
      contents.AppendLine();
      contents.AppendLine(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Password.ToInsecureString());

      &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(tweetMessage))
      {
        contents.AppendLine(header);
        contents.AppendLine(String.Format(&lt;span class="str"&gt;&amp;quot;Content-Disposition: form-data; name=\&amp;quot;{0}\&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;message&amp;quot;&lt;/span&gt;));
        contents.AppendLine();
        contents.AppendLine(tweetMessage);
      }

      contents.AppendLine(footer);

      &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] bytes = Encoding.GetEncoding(encoding).GetBytes(contents.ToString());
      request.ContentLength = bytes.Length;

      &lt;span class="kwrd"&gt;using&lt;/span&gt; (Stream requestStream = request.GetRequestStream())
      {
        requestStream.Write(bytes, 0, bytes.Length);

        &lt;span class="kwrd"&gt;using&lt;/span&gt; (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
          &lt;span class="kwrd"&gt;using&lt;/span&gt; (StreamReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(response.GetResponseStream()))
          {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; result = reader.ReadToEnd();

            XDocument doc = XDocument.Parse(result);

            XElement rsp = doc.Element(&lt;span class="str"&gt;&amp;quot;rsp&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;string&lt;/span&gt; status = rsp.Attribute(XName.Get(&lt;span class="str"&gt;&amp;quot;status&amp;quot;&lt;/span&gt;)) != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? rsp.Attribute(XName.Get(&lt;span class="str"&gt;&amp;quot;status&amp;quot;&lt;/span&gt;)).Value : rsp.Attribute(XName.Get(&lt;span class="str"&gt;&amp;quot;stat&amp;quot;&lt;/span&gt;)).Value;

            &lt;span class="kwrd"&gt;return&lt;/span&gt; status.ToUpperInvariant().Equals(&lt;span class="str"&gt;&amp;quot;OK&amp;quot;&lt;/span&gt;);
          }
        }
      }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nNfAtwZ3uRX2eXfLLwMjZbbm-DI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nNfAtwZ3uRX2eXfLLwMjZbbm-DI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nNfAtwZ3uRX2eXfLLwMjZbbm-DI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nNfAtwZ3uRX2eXfLLwMjZbbm-DI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/KfFcaSLhwfs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/KfFcaSLhwfs/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/C-TwitPic-API-client.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=aabea254-926e-4b5e-ac93-8cca2139564a</guid>
      <pubDate>Tue, 10 Mar 2009 22:51:38 +0100</pubDate>
      <category>C#</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=aabea254-926e-4b5e-ac93-8cca2139564a</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=aabea254-926e-4b5e-ac93-8cca2139564a</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/C-TwitPic-API-client.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=aabea254-926e-4b5e-ac93-8cca2139564a</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=aabea254-926e-4b5e-ac93-8cca2139564a</feedburner:origLink></item>
    <item>
      <title>ASP.NET MVC and Classic ASP</title>
      <description>&lt;p&gt;As I pointed out in my &lt;a href="http://www.dnknormark.net/post/Is-the-use-of-AJAX-on-the-web-voting-for-a-change-to-ASPNET-MVC.aspx"&gt;blog post&lt;/a&gt; a few days ago, I see several reasons why you should make the switch to &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt;. On the other hand, you have to remember that &lt;a href="http://msdn.microsoft.com/en-us/library/ms973868.aspx"&gt;ASP.NET WebForms&lt;/a&gt; has been around for many years, and is a very mature technology. We all know that new technology has its initial flaws.&lt;/p&gt;  &lt;p&gt;I was fooling a little around with the technology, specifically some databinding where I had a &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx"&gt;DataTable&lt;/a&gt; and wanted to display a Table with the contents. My instant thought was: “This is like databinding back in the days of &lt;a href="http://en.wikipedia.org/wiki/Active_Server_Pages"&gt;Classic ASP&lt;/a&gt;”…&lt;/p&gt;  &lt;p&gt;Take a look at this:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Get data from database&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="str"&gt;' Data connection
Set Conn = Server.CreateObject(&amp;quot;ADODB.Connection&amp;quot;)
DSN = &amp;quot;DRIVER={Microsoft Access Driver (*.mdb)}; &amp;quot;
DSN = DSN &amp;amp; &amp;quot;DBQ=&amp;quot; &amp;amp; Server.MapPath(&amp;quot;/cgi-bin/database.mdb&amp;quot;)
Conn.Open DSN

'&lt;/span&gt; SQL statement
strSQL = &lt;span class="str"&gt;&amp;quot;Select * from Employees&amp;quot;&lt;/span&gt;
Set rs = Conn.Execute(strSQL)

Do

   Response.Write rs(&lt;span class="str"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;) &amp;amp; &lt;span class="str"&gt;&amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;/span&gt;

   rs.MoveNext

Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;Good old Classic ASP that is. You’ve got to admit that you had seamless control of the HTML that was being rendered!&lt;/p&gt;

&lt;p&gt;Which is also the case with ASP.NET MVC. MVC offers you control and simplicity, as opposed to WebForms where you place a server control on the form, and sometimes you ended up with your HTML a complete mess…&lt;/p&gt;

&lt;p&gt;Of course, MVC is a lot more maintainable and structured, than Classic ASP was. You instantly get a separation of concerns with the &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;Model, View and Controller design pattern&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So we can fetch data in our Controller:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Index()
    {
      DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();
      dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Column1&amp;quot;&lt;/span&gt;);

      dt.Rows.Add(&lt;span class="str"&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;);
      dt.Rows.Add(&lt;span class="str"&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;);
      dt.Rows.Add(&lt;span class="str"&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;);
      dt.Rows.Add(&lt;span class="str"&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;);
      dt.Rows.Add(&lt;span class="str"&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;);
      dt.Rows.Add(&lt;span class="str"&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;);

      ViewData.Model = dt;
      
      &lt;span class="kwrd"&gt;return&lt;/span&gt; View();
    }&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;And display it, somewhat like we did back in the days of Classic ASP:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (System.Data.DataRow item &lt;span class="kwrd"&gt;in&lt;/span&gt; ((System.Data.DataTable)ViewData.Model).Rows) 
   { &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= Html.Encode(item[0].ToString()) &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt; } &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;To be honest, I actually likes going back to basics and getting full control of my HTML. Working in WebForms, you sometimes search for control settings to enable or disable the rendering of a certain piece of HTML. I think it is a lot easier to just give you full control.&lt;/p&gt;

&lt;p&gt;But on the other hand, I could easily see a lot of the Classic ASP ‘bad habits’ return. Classic ASP can be *ugly* as hell, which means the maintainability is very poor. The same could happen with MVC if you aren’t disciplined enough. WebForms sort of put you in a box, but you could still make it look pretty ugly as well…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ASP.NET MVC Release Candidate links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx"&gt;ScottGu’s release candidate blog post&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stephenwalther.com/blog/archive/2009/01/27/a-guide-to-learning-asp.net-mvc-release-candidate-1.aspx"&gt;Stephen Walther’s guide to learning ASP.NET MVC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-WlRwd35JlM-4okU1hz8bNAwrsM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-WlRwd35JlM-4okU1hz8bNAwrsM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-WlRwd35JlM-4okU1hz8bNAwrsM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-WlRwd35JlM-4okU1hz8bNAwrsM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/BnBk6Lxk93I" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/BnBk6Lxk93I/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/ASPNET-MVC-and-Classic-ASP.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=15c348a3-3c93-4bdf-98c4-8017d5202714</guid>
      <pubDate>Mon, 02 Feb 2009 00:09:12 +0100</pubDate>
      <category>ASP.NET</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=15c348a3-3c93-4bdf-98c4-8017d5202714</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=15c348a3-3c93-4bdf-98c4-8017d5202714</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/ASPNET-MVC-and-Classic-ASP.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=15c348a3-3c93-4bdf-98c4-8017d5202714</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=15c348a3-3c93-4bdf-98c4-8017d5202714</feedburner:origLink></item>
    <item>
      <title>Is the use of AJAX on the web voting for a change to ASP.NET MVC?</title>
      <description>&lt;p&gt;With &lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt; in Release Candidate now, the technology is getting a lot of attention these days. I personally haven’t given it any greater thought until just recently, but I have to admit that I’m tempted towards a change. I like &lt;a href="http://msdn.microsoft.com/en-us/library/ms973868.aspx"&gt;ASP.NET WebForms&lt;/a&gt;. I think the WebForm approach provides us with great manageability and gives us a very rich set of controls.&lt;/p&gt;  &lt;p&gt;But one thing that I don’t like about WebForms is, that it abstracts the anatomy of the web and how the web works. This was probably done to lure WinForms developers towards web development and making the change as easy as possible. But I think developers learning ASP.NET WebForms is missing out on the core web technology that is request, responses and headers etc. If you don’t know the core elements of what you’re working with, you can easily make some terrible mistakes. &lt;/p&gt;  &lt;p&gt;As user experience is getting much more focus today, especially in the business of SaaS products, you have to deliver a great deal of responsiveness through the use of AJAX. In ASP.NET WebForms I see myself ending up rendering the page once, and doing AJAX callback through the core &lt;a href="http://www.w3.org/TR/XMLHttpRequest/"&gt;XmlHttpRequest&lt;/a&gt; in JavaScript when the user makes a change to some data. That’s to avoid postbacks. By doing this, I’m missing out on &lt;a href="http://msdn.microsoft.com/en-us/library/ms972976.aspx"&gt;ViewState&lt;/a&gt; as well and what is left of ASP.NET WebForms now? &lt;/p&gt;  &lt;p&gt;I think the high demand of quality (Testability) and user experience (Responsiveness = AJAX) is making ASP.NET WebForms obsolete.&lt;/p&gt;  &lt;p&gt;I see several good reasons to dump WebForms for MVC:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt; - AJAX is used all over, so what good is postback, ViewState and the Page life cycle? &lt;/li&gt;    &lt;li&gt; - WebForms is making your HTML look very ugly, especially because of the ViewState hidden field. &lt;/li&gt;    &lt;li&gt; - ViewState can get very large, and slow down your pages.&lt;/li&gt;    &lt;li&gt; - Performance is better on MVC –&amp;gt; You can handle more requests per second.&lt;/li&gt;    &lt;li&gt; - The ability to test your code is better on MVC.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Initially, it looks like MVC is missing out on the rich set of controls that ASP.NET WebForms have. But I think this need will be driven by the awesome community that .NET have.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;/li&gt; &lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8qemsXIOJkELk-STK4yKFpZtiAo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8qemsXIOJkELk-STK4yKFpZtiAo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8qemsXIOJkELk-STK4yKFpZtiAo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8qemsXIOJkELk-STK4yKFpZtiAo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/g7h1PVx8W4U" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/g7h1PVx8W4U/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/Is-the-use-of-AJAX-on-the-web-voting-for-a-change-to-ASPNET-MVC.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=cc96a23a-e040-422f-83cf-e92548972a5a</guid>
      <pubDate>Fri, 30 Jan 2009 00:13:32 +0100</pubDate>
      <category>ASP.NET</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=cc96a23a-e040-422f-83cf-e92548972a5a</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=cc96a23a-e040-422f-83cf-e92548972a5a</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/Is-the-use-of-AJAX-on-the-web-voting-for-a-change-to-ASPNET-MVC.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=cc96a23a-e040-422f-83cf-e92548972a5a</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=cc96a23a-e040-422f-83cf-e92548972a5a</feedburner:origLink></item>
    <item>
      <title>Early thoughts on Windows Azure</title>
      <description>&lt;p&gt;&lt;a title="Windows Azure, Windows en la nube" href="http://www.flickr.com/photos/64542070@N00/2978778160/"&gt;&lt;img style="margin: 0px 0px 0px 15px" border="0" alt="Windows Azure, Windows en la nube" align="right" src="http://static.flickr.com/3193/2978778160_da4e239e00.jpg" /&gt;&lt;/a&gt;So I just got home from work, and fired up my browser to check out the latest news from this year’s &lt;a href="http://www.microsoftpdc.com/"&gt;Microsoft PDC&lt;/a&gt;, by live streaming, and following the &lt;a href="http://www.istartedsomething.com/20081028/live-from-pdc08-keynote-ray-ozzie-amitabh-srivastava-bob-muglia-and-david-thompson/"&gt;live blogging session&lt;/a&gt;. And as always, something big is underway. Windows Azure, is Microsoft’s answer to &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt;. It is a cloud computing platform on Microsoft technology. &lt;/p&gt;  &lt;p&gt;I’m truly thrilled by the thought. This gives me great possibilities. As an entrepreneur, I get loads of ideas. My biggest pain is always how to deploy this. Funding is a big issue, and this leads to compromises in server infrastructure and stuff. As a developer, I’m not that much focused on servers and thing alike, so to have a big platform is an advantage. &lt;/p&gt;  &lt;p&gt;At &lt;a href="http://www.microsoftpdc.com"&gt;PDC2008&lt;/a&gt;, they showcased a mobile app called &lt;a href="http://www.bluehoo.com"&gt;Bluehoo&lt;/a&gt;. On stage, by editing an XML file online he scaled his platform from 1 to 20 nodes to be capable of the upcoming load due to the the announcement made at PDC.&lt;/p&gt;  &lt;p&gt;My thoughts on pros:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Great scalability &lt;/li&gt;    &lt;li&gt;Large content network = low latency around the world &lt;/li&gt;    &lt;li&gt;Consolidation &lt;/li&gt;    &lt;li&gt;Pay as you go premise – compared to buying hardware upfront &lt;/li&gt;    &lt;li&gt;Easy application maturing – developing locally, deploying to a staging environment before deploying to production &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The inevitable: “What will they do with my data?” &lt;/li&gt;    &lt;li&gt;Dependency on Microsoft &lt;/li&gt;    &lt;li&gt;Unawareness – like deploying your app to ‘a black box’ &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;On the &lt;a href="http://www.microsoft.com/azure"&gt;Windows Azure&lt;/a&gt; site, the links to &lt;a href="http://www.microsoft.com/azure/register.mspx"&gt;SDK’s and VS2008 tools&lt;/a&gt; are broken. They should be good shortly!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;For &lt;a href="http://on10.net/blogs/sarahintampa/Microsofts-Cloud-Part-2-Windows-Azure/"&gt;more information on Windows Azure&lt;/a&gt;, check out &lt;a href="http://on10.net/blogs/sarahintampa/Microsofts-Cloud-Part-2-Windows-Azure/"&gt;this blog post&lt;/a&gt; at &lt;a href="http://on10.net"&gt;Channel 10&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Or this: &lt;a title="http://blogs.zdnet.com/microsoft/?p=1671" href="http://blogs.zdnet.com/microsoft/?p=1671"&gt;http://blogs.zdnet.com/microsoft/?p=1671&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1901ac62-8706-476a-bc7e-fe5f344d2db9" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Software+%2b+Services" rel="tag"&gt;Software + Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Live" rel="tag"&gt;Windows Live&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Azure" rel="tag"&gt;Windows Azure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud+computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PDC2008" rel="tag"&gt;PDC2008&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/04eRhofhfNrPYl0Jv225AEDuuPU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/04eRhofhfNrPYl0Jv225AEDuuPU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/04eRhofhfNrPYl0Jv225AEDuuPU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/04eRhofhfNrPYl0Jv225AEDuuPU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dnknormarknet/~4/WyXVypoTfec" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/dnknormarknet/~3/WyXVypoTfec/post.aspx</link>
      <author>martinhn</author>
      <comments>http://dnknormark.net/post/Early-thoughts-on-Windows-Azure.aspx#comment</comments>
      <guid isPermaLink="false">http://dnknormark.net/post.aspx?id=84be3728-7c54-4a15-83a3-98d346ddc47c</guid>
      <pubDate>Mon, 27 Oct 2008 17:53:11 +0100</pubDate>
      <category>C#</category>
      <category>Windows Azure</category>
      <dc:publisher>martinhn</dc:publisher>
      <pingback:server>http://dnknormark.net/pingback.axd</pingback:server>
      <pingback:target>http://dnknormark.net/post.aspx?id=84be3728-7c54-4a15-83a3-98d346ddc47c</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://dnknormark.net/trackback.axd?id=84be3728-7c54-4a15-83a3-98d346ddc47c</trackback:ping>
      <wfw:comment>http://dnknormark.net/post/Early-thoughts-on-Windows-Azure.aspx#comment</wfw:comment>
      <wfw:commentRss>http://dnknormark.net/syndication.axd?post=84be3728-7c54-4a15-83a3-98d346ddc47c</wfw:commentRss>
    <feedburner:origLink>http://dnknormark.net/post.aspx?id=84be3728-7c54-4a15-83a3-98d346ddc47c</feedburner:origLink></item>
  </channel>
</rss>
