<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns: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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Rydal's .Net Clr </title>
        <link>http://blog.dotnetclr.com/Default.aspx</link>
        <description>Reality is just a shared illusion.</description>
        <language>en-US</language>
        <copyright>Rydal Williams</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>Rydal's .Net Clr </title>
            <url>http://blog.dotnetclr.com/images/RSS2Image.gif</url>
            <link>http://blog.dotnetclr.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dotnetclr" /><feedburner:info uri="dotnetclr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>dotnetclr</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
            <title>A potentially dangerous Request.Form value was detected from the client&amp;hellip;</title>
            <category>ASP.NET MVC</category>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/AzZ2I7E61yE/544.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blog.dotnetclr.com/images/blog_dotnetclr_com/Windows-Live-Writer/A-p.Form-value-was-detected-from-the-cli_13C7B/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.dotnetclr.com/images/blog_dotnetclr_com/Windows-Live-Writer/A-p.Form-value-was-detected-from-the-cli_13C7B/image_thumb.png" width="640" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;To fix use the follow attributes on your Actions for ASP.NET MVC or &amp;lt;httpRuntime requestValidationMode="2.0" /&amp;gt; in your config.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;pre class="csharpcode"&gt;        [HttpPost, ValidateInput(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult NewJavaScript(FormCollection fc)
        {

            &lt;span class="kwrd"&gt;return&lt;/span&gt; RedirectToAction(&lt;span class="str"&gt;"JavaScripts"&lt;/span&gt;);
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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; }]]&gt;&lt;/style&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/544.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/AzZ2I7E61yE" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/03/03/544.aspx</guid>
            <pubDate>Sun, 04 Mar 2012 03:34:06 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/544.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/03/03/544.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/544.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/544.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/03/03/544.aspx</feedburner:origLink></item>
        <item>
            <title>TypedJS: Annotate your functions with type signatures</title>
            <category>Javascript</category>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/IOjBPhUwzoM/543.aspx</link>
            <description>&lt;p&gt;Now this is a better way of testing, I’m loving it. I’ve always been looking for a flexible way to test y JS libraries but haven’t found any because they are way too complicated to setup, however, &lt;a href="http://typedjs.com/"&gt;typedjs&lt;/a&gt; by &lt;a href="http://ethanfast.com/"&gt;Ethan Fast&lt;/a&gt; is looking very promising. I’m starting a new project next week, I’m going to try it out. The only concern at this moment is how flexible is it or will it be as some of my JS functions get pretty complex.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://typedjs.com/"&gt;TYPEDJS&lt;/a&gt; uses a function's type signature to generate input parameters, and evaluates the function upon these inputs to form a test case. This test case fails if an exception occurs, or the output violates function constraints. While type signatures provide a limited form of program specification, TYPEDJS adds a quick and rigorous sanity check to your deployment pipeline. &lt;a href="http://github.com/Proxino/TypedJS"&gt;The code lives on github&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//+ my_prop :: {name:String, valid:Boolean} -&amp;gt; Boolean&lt;/span&gt;
&lt;span class="kwrd"&gt;function&lt;/span&gt; my_prop(obj){
  &lt;span class="kwrd"&gt;if&lt;/span&gt;(obj.valid === &lt;span class="kwrd"&gt;true&lt;/span&gt;){
    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"true"&lt;/span&gt;; &lt;span class="rem"&gt;// Error, we are &lt;/span&gt;
  }                &lt;span class="rem"&gt;// returning a string here&lt;/span&gt;
  &lt;span class="kwrd"&gt;else&lt;/span&gt;{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; obj.valid;
  }
};&lt;/pre&gt;

&lt;p /&gt;&lt;style type="text/css"&gt;&lt;![CDATA[

.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;&lt;img src="http://typedjs.com/resources/ex_out.png" width="587" height="190" /&gt;&lt;/p&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/543.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/IOjBPhUwzoM" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/02/23/543.aspx</guid>
            <pubDate>Thu, 23 Feb 2012 15:56:37 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/543.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/02/23/543.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/543.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/543.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/02/23/543.aspx</feedburner:origLink></item>
        <item>
            <title>The Twitter team has done it again&amp;ndash;Hogan.js</title>
            <category>General</category>
            <category>Javascript</category>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/Iu3ESM7xQBw/542.aspx</link>
            <description>&lt;p&gt;As I have &lt;a href="http://blog.dotnetclr.com/archive/2012/02/08/541.aspx"&gt;mentioned&lt;/a&gt; before, I’m a fan of the Twitter development team and they have done it again. They recently launched a &lt;a href="http://twitter.github.com/hogan.js/"&gt;JavaScript templating engine&lt;/a&gt; called &lt;a href="http://twitter.github.com/hogan.js/"&gt;Hogan.js&lt;/a&gt; and its awesome. Obviously, there are a lot of templating engines out there but there are a few that actually works efficiently and simply.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Hogan.js is a 2.5k JS templating engine developed at Twitter. Use it as a part of your asset packager to compile templates ahead of time or include it in your browser to handle dynamic templates.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&amp;lt;!-- include hogan --&amp;gt;
&amp;lt;script src=&lt;span class="str"&gt;"/js/hogan.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;!-- include your server-side compiled templates --&amp;gt;
&amp;lt;script src=&lt;span class="str"&gt;"/js/my-templates.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;!-- render your templates --&amp;gt;
&amp;lt;script&amp;gt;
  &lt;span class="kwrd"&gt;var&lt;/span&gt; context = { variable: &lt;span class="str"&gt;'myVariable'&lt;/span&gt; };
  &lt;span class="kwrd"&gt;var&lt;/span&gt; partial = { partial: myPartial };
  &lt;span class="kwrd"&gt;var&lt;/span&gt; template = myTemplate.render(context, partial);
  document.body.innerHTML = template;
&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.dotnetclr.com/images/blog_dotnetclr_com/Windows-Live-Writer/The-Twitter-team-has-done-it-againHog.js_8F1A/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.dotnetclr.com/images/blog_dotnetclr_com/Windows-Live-Writer/The-Twitter-team-has-done-it-againHog.js_8F1A/image_thumb.png" width="574" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/542.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/Iu3ESM7xQBw" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/02/08/542.aspx</guid>
            <pubDate>Wed, 08 Feb 2012 15:18:40 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/542.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/02/08/542.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/542.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/542.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/02/08/542.aspx</feedburner:origLink></item>
        <item>
            <title>Bootstrap, from Twitter</title>
            <category>General</category>
            <category>Javascript</category>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/CjxWfqatqDI/541.aspx</link>
            <description>&lt;p&gt;I’m loving the twitter development team as I’ve always been a fan of their designs, simple and elegant. I’ve been playing with their web framework recently (html, CSS &amp;amp; JavaScript) and its awesome, simple and powerful. love it! Thanks Twitter team.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Simple and flexible HTML, CSS, and Javascript for popular user interface components and interactions.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.github.com/bootstrap/index.html"&gt;Design for everyone, everywhere.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Built for and by nerds&lt;/li&gt;    &lt;li&gt;12-column grid&lt;/li&gt;    &lt;li&gt;Growing library&lt;/li&gt;    &lt;li&gt;HTML5&lt;/li&gt;    &lt;li&gt;For all skills&lt;/li&gt;    &lt;li&gt;Responsive design&lt;/li&gt;    &lt;li&gt;Custom JQuery plugins&lt;/li&gt;    &lt;li&gt;Cross-everything&lt;/li&gt;    &lt;li&gt;Styleguide docs&lt;/li&gt;    &lt;li&gt;Built on LESS&lt;/li&gt;    &lt;li&gt;CSS3&lt;/li&gt;    &lt;li&gt;Open-source&lt;/li&gt;    &lt;li /&gt; &lt;/ul&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/541.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/CjxWfqatqDI" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/02/08/541.aspx</guid>
            <pubDate>Wed, 08 Feb 2012 15:10:33 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/541.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/02/08/541.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/541.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/541.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/02/08/541.aspx</feedburner:origLink></item>
        <item>
            <title>DateTime.Now vs DateTime.UtcNow</title>
            <category>.Net</category>
            <category>General</category>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/l_KZbN_K6JA/540.aspx</link>
            <description>&lt;p&gt;Try to use .UtcNow() as much as you can over .Now() as it is inherently faster than the later. The problem seems to stem from the fact that &lt;strong&gt;DateTime.Now&lt;/strong&gt; performs a &lt;strong&gt;DateTime.UtcNow&lt;/strong&gt; first and then performs a very expensive called to figure out daylight savings time and time zone information. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; DateTime Now
{
    get
    {
        DateTime utcNow = DateTime.UtcNow;
        &lt;span class="kwrd"&gt;bool&lt;/span&gt; isAmbiguousDst = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
        &lt;span class="kwrd"&gt;long&lt;/span&gt; ticks = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utcNow, &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;out&lt;/span&gt; isAmbiguousDst).Ticks;
        &lt;span class="kwrd"&gt;long&lt;/span&gt; num = utcNow.Ticks + ticks;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (num &amp;gt; 3155378975999999999L)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(3155378975999999999L, DateTimeKind.Local);
        }
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (num &amp;lt; 0L)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(0L, DateTimeKind.Local);
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(num, DateTimeKind.Local, isAmbiguousDst);
    }
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt; &lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[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; }
]]&gt;&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; DateTime UtcNow
{
    [TargetedPatchingOptOut(&lt;span class="str"&gt;"Performance critical to &lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;inline across NGen image boundaries"&lt;/span&gt;), SecuritySafeCritical]
    get
    {
        &lt;span class="kwrd"&gt;long&lt;/span&gt; systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime((&lt;span class="kwrd"&gt;ulong&lt;/span&gt;)(systemTimeAsFileTime + &lt;/pre&gt;&lt;pre class="csharpcode"&gt;504911232000000000L | 4611686018427387904L));
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[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; }
]]&gt;&lt;/style&gt;

&lt;p&gt;Thanks to &lt;a href="http://www.keyvan.ms"&gt;Keyvan Nayyeri&lt;/a&gt; who did a detail analysis of DateTime.Now, DateTime.UtcNow and Stopwatch class at his blog post called &lt;a href="http://www.keyvan.ms/the-darkness-behind-datetime-now"&gt;The Darkness Behind DateTime.Now&lt;/a&gt;. Very good read for detail explanation.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" alt="Quantitative comparison between DateTime.Now, DateTime.UtcNow, and StopWatch in .NET" src="http://storage.keyvan.ms/the-darkness-behind-datetimenow121a4/picture2_6.png" /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Note that &lt;strong&gt;Environment.TickCount&lt;/strong&gt; is also faster than &lt;strong&gt;DateTime.UtcNow.Ticks&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/540.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/l_KZbN_K6JA" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/01/10/540.aspx</guid>
            <pubDate>Tue, 10 Jan 2012 19:50:06 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/540.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/01/10/540.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/540.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/540.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/01/10/540.aspx</feedburner:origLink></item>
        <item>
            <title>Framework layers on layers</title>
            <category>General</category>
            <category>.Net</category>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/LVNcLRrf4PE/539.aspx</link>
            <description>&lt;p&gt;As an architect, I stress to my team, colleagues or anyone that wants to talk IT that a solid developer needs to understand the fundamentals of how things work – especially when dealing with such a large framework such as the &lt;a title=".Net Framework" href="http://msdn2.microsoft.com/en-us/netframework/default.aspx"&gt;.Net Framework&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’m usually very slow when it comes to adopting new versions of the framework, as of now I still write code in 2.0/3.5 while 4.5 is about to start collecting dust. It has become clear to me in the past years that sometimes frameworks simply get bloated. I wrote comfortable powerful and sophisticated applications with .NET 2.0 but when 4.0 came out everyone claimed it and jumped, yeah - I started writing code in assembly, therefore, I believe in less layers which is what newer framework versions are usually made up of.&lt;/p&gt;  &lt;p&gt;If a framework does not provide with critical patches and newer features, then there is no need for me to upgrade. simply converting 6 lines of code to 2 lines by wrapping it is just not enough.&lt;/p&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/539.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/LVNcLRrf4PE" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/01/10/539.aspx</guid>
            <pubDate>Tue, 10 Jan 2012 19:38:40 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/539.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/01/10/539.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/539.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/539.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/01/10/539.aspx</feedburner:origLink></item>
        <item>
            <title>HandleError &amp;ndash; ASP.NET Mvc Attribute</title>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/is6Zeykiszo/538.aspx</link>
            <description>&lt;p&gt;I’m not a fan of hiding error messages, as it could bite you real hard. However, there are existing functionalities that just need to be discussed such as the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute(v=VS.90).aspx"&gt;HandleError&lt;/a&gt;&lt;strong /&gt; attribute of the ASP.NET MVC application. If you are not a fan of displaying the very common &lt;a href="http://en.wikipedia.org/wiki/Screen_of_Death#ASP.NET"&gt;Yellow Screen of Death&lt;/a&gt;, then &lt;strong&gt;HandleError&lt;/strong&gt; should be your new friend.&lt;/p&gt;  &lt;p&gt;By default, I take certain steps when I’m setting up a new MVC app to prevent my users from ever seeing a single error page by implementing &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CDcQFjAA&amp;amp;url=http%3A%2F%2Fnlog-project.org%2F&amp;amp;ei=p1gLT5WUFsqWtwfZoICYDw&amp;amp;usg=AFQjCNFFFNdj1vDQrQYPlAJjYoqJ8zuxeg"&gt;NLog&lt;/a&gt;, creating custom error pages and so on and so forth.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HandleError&lt;/strong&gt; is an action filter and MVC has several others such as &lt;strong&gt;Authorize&lt;/strong&gt;, &lt;strong&gt;OutputCache&lt;/strong&gt;, &lt;strong&gt;RequireHttps&lt;/strong&gt;, etc.. It simply provides a way to map exceptions to a specific template, therefore, enabling you to display your custom error pages when an exception occurs or a simple generic error view.&lt;/p&gt;  &lt;p&gt;Once an error is detected the filter first checks the controller specific folder for an error file, i.e. if you are in Home, it will check &lt;strong&gt;Views/Home/Error.aspx&lt;/strong&gt; and if not found, it will default to the shared views folder at &lt;strong&gt;Views/Shared/Error.aspx&lt;/strong&gt; to locate the file.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;pre class="csharpcode"&gt;    [HandleError]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ListController : Controller
    {
        &lt;span class="rem"&gt;//&lt;/span&gt;
        &lt;span class="rem"&gt;// GET: /List/&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Index()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; View();
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;I usually extend the System.Web.Mvc.Controller class and override its OnException method, which provides me with a single entry point to capture and log all errors as I see fit.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnException(ExceptionContext filterContext)
        {
            &lt;span class="rem"&gt;// TODO: NLog exception here. base.OnException(filterContext);&lt;/span&gt;
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;Note that overriding OnException prevents HandleError from taking control, therefore, it becomes completely useless, its almost like you can’t use both, its either clean view or log error but I want and need both.&lt;/p&gt;

&lt;p&gt;Here is my final OnException override that gives me both clean messages to my users and also logs using NLog to disk and database for my review.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnException(ExceptionContext filterContext)
        {
            &lt;span class="rem"&gt;// TODO: NLog exception here.&lt;/span&gt;

            &lt;span class="rem"&gt;// Handle exception&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (filterContext.HttpContext.IsCustomErrorEnabled)
            {
                filterContext.ExceptionHandled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                Response.StatusCode = 500;
                Response.TrySkipIisCustomErrors = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.View(&lt;span class="str"&gt;"Error"&lt;/span&gt;).ExecuteResult(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ControllerContext);

                &lt;span class="rem"&gt;//&lt;/span&gt;
                &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnException(filterContext);
            }
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.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; }]]&gt;&lt;/style&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/538.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/is6Zeykiszo" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2012/01/09/538.aspx</guid>
            <pubDate>Mon, 09 Jan 2012 21:47:54 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/538.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2012/01/09/538.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/538.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/538.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2012/01/09/538.aspx</feedburner:origLink></item>
        <item>
            <title>Page size offender &amp;ndash; JavaScript</title>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/8CJW2arlJJU/537.aspx</link>
            <description>&lt;p&gt;We all love JavaScript and yes its my favorite language thingy! However, because it is loosely coupled, you can easily write very bad bloated code and there aren’t any sweet tools out there to help with this. It is only logical to determine why the existing JavaScript IDE’s are not getting powerful – because its not a language that compiles, therefore, it is very difficult to analyze compared to other languages such as C# &amp;amp; F#.&lt;/p&gt;  &lt;p&gt;Its imperative that you remove unused code, write efficient code – check out the work of &lt;a href="http://ejohn.org/"&gt;John Resig&lt;/a&gt;, he founder of the &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt; framework.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.pingdom.com/"&gt;Pingdom&lt;/a&gt; surveyed the top 1,000 sites and the results are astonishing, images have always been a problem, however, JavaScript is the new offender as of 2011. So no excuses clean up your code and compress them and better yet place them on a CDN for better delivery. Here are some nice charts.&lt;/p&gt;  &lt;p&gt;&lt;img alt="Web page size change in one year" src="http://royal.pingdom.com/wp-content/uploads/2011/11/111121-web-page-sizes.jpeg" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img alt="Web page content size change in percent" src="http://royal.pingdom.com/wp-content/uploads/2011/11/111121-website-change-percent.jpeg" /&gt;&lt;/p&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/537.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/8CJW2arlJJU" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2011/12/29/537.aspx</guid>
            <pubDate>Thu, 29 Dec 2011 15:09:26 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/537.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2011/12/29/537.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/537.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/537.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2011/12/29/537.aspx</feedburner:origLink></item>
        <item>
            <title>My top 10 favorite domain generators</title>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/o0Ni29kctZ0/536.aspx</link>
            <description>&lt;p&gt;We all know how painful it is when you conceive an idea and you want to start building the foundation for it and you get stuck hunting down a domain that makes sense for several hours. It has been said multiple times that the domain really doesn’t matter but I still think it does and the simpler and easier it is to remember the better it is. It is usually the most important or most complicated step to complete.&lt;/p&gt;  &lt;p&gt;Here are the domain generators that I’ll recommend, they will simplify your task of choosing a domain name or names. If GoDaddy had one built in – wouldn’t that make all our lives easier?&lt;/p&gt;  &lt;p&gt;There are a billion of these – I’m just listing a few to get you on your way.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://www.bustaname.com/"&gt;http://www.bustaname.com/&lt;/a&gt; – my personal favorite, they suggest, validate and check availability. The domain maker tool is pretty powerful.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://domai.nr/"&gt;http://domai.nr/&lt;/a&gt; – pretty sweet and clean interface and insanely fast, lacks any options or configuration&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.dotomator.com/"&gt;http://www.dotomator.com/&lt;/a&gt; – Availability is not on screen, the send you to a domain provide which sucks as I have to keep bouncing back and forth. Word combination and suggestion tool is pretty handy and they have an iPhone app.&lt;/li&gt;    &lt;li&gt;&lt;a href="https://domize.com/"&gt;https://domize.com/&lt;/a&gt; – another nice and clean home page, you can’t possibly get lost. Suggestions are not available it only checks different length of the same word.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.domainsbot.com/"&gt;http://www.domainsbot.com/&lt;/a&gt; – Super fast and provides lots of juicy data for premium domains and etc..&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.stuckdomains.com/"&gt;http://www.stuckdomains.com/&lt;/a&gt; – Helps you hunt down expired domains, you never know you might get lucky&lt;/li&gt;    &lt;li&gt;&lt;a href="http://ajaxwhois.com/"&gt;http://ajaxwhois.com/&lt;/a&gt; – Fast since its Ajax driving, however, its missing lost of features.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://namethingy.com/"&gt;http://namethingy.com/&lt;/a&gt; – does all the guess work for you, pretty intuitive, just relax and click words that interest you as you see them appear&lt;/li&gt;    &lt;li&gt;&lt;a href="http://impossibility.org/"&gt;http://impossibility.org/&lt;/a&gt; –use this very frequently as you can simply type in a word and it will suggest several availability readable domains&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blungr.com/"&gt;http://blungr.com/&lt;/a&gt; – new at this time but it works great and also suggest none .com domains if you are looking for something like list.co&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/536.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/o0Ni29kctZ0" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2011/12/29/536.aspx</guid>
            <pubDate>Thu, 29 Dec 2011 06:11:02 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/536.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2011/12/29/536.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/536.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/536.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2011/12/29/536.aspx</feedburner:origLink></item>
        <item>
            <title>Webcast: The basics of SQL server high availability and disaster recovery &amp;ndash; Clustering, Log Shipping, Replication and More</title>
            <link>http://feedproxy.google.com/~r/dotnetclr/~3/Kd__Nh8oZgA/535.aspx</link>
            <description>&lt;p&gt;You got to love &lt;a href="http://www.brentozar.com"&gt;Brent Ozar&lt;/a&gt;, his posts are usually if not always valuable and informative. He is a SQL Server performance tuning guru and I read his blog religiously as it has some juicy stuff.&lt;/p&gt;  &lt;p&gt;His most recent post talks about the pros and cons of several methods in which you can make SQL server more reliable which usually leads to happy days.&lt;/p&gt;  &lt;p&gt;Here is a  &lt;a href="http://www.brentozar.com/archive/2011/12/sql-server-high-availability-disaster-recovery-basics-webcast/"&gt;30 minutes video&lt;/a&gt; that is great for production DBAs how haven’t implemented clustering, replication or log shipping before and want to get started quickly.&lt;/p&gt;&lt;img src="http://blog.dotnetclr.com/aggbug/535.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/dotnetclr/~4/Kd__Nh8oZgA" height="1" width="1"/&gt;</description>
            <dc:creator>Rydal Williams</dc:creator>
            <guid isPermaLink="false">http://blog.dotnetclr.com/archive/2011/12/28/535.aspx</guid>
            <pubDate>Wed, 28 Dec 2011 15:43:17 GMT</pubDate>
            <wfw:comment>http://blog.dotnetclr.com/comments/535.aspx</wfw:comment>
            <comments>http://blog.dotnetclr.com/archive/2011/12/28/535.aspx#feedback</comments>
            <wfw:commentRss>http://blog.dotnetclr.com/comments/commentRss/535.aspx</wfw:commentRss>
            <trackback:ping>http://blog.dotnetclr.com/services/trackbacks/535.aspx</trackback:ping>
        <feedburner:origLink>http://blog.dotnetclr.com/archive/2011/12/28/535.aspx</feedburner:origLink></item>
    </channel>
</rss>
