﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>AspNetResources.com articles, news and updates</title>
    <description>Stay tuned for AspNetResources.com updates</description>
    <link>http://aspnetresources.com</link>
    <item>
      <title>Upcoming Speaking Engagements</title>
      <link>http://aspnetresources.com/blog/2010_1_upcoming_speaking_engagements.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/2010_1_upcoming_speaking_engagements.aspx</guid>
      <pubDate>Fri, 05 Mar 2010 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;This is a short notice, but still&amp;#8230; I&amp;#39;m giving my
&lt;a href="http://www.aspnetresources.com/articles/real_world_ioc_and_di_with_webforms.aspx"&gt;
IoC and DI with WebForms&lt;/a&gt; presentation at the
&lt;a href="http://nyc.codecamp.us/"&gt;New York Code Camp&lt;/a&gt; tomorrow. Instead of walking away with a &amp;quot;this is only a demo; don&amp;#39;t try it at home&amp;quot; excuse, I actually have a read-world example to go through.&lt;/p&gt;

&lt;p class="note"&gt;There exists an entrenched belief that there&amp;#39;s only one way to develop with WebForms, i.e. rely on the crunch of view state, postbacks, session, etc. &lt;strong&gt;I beg to differ&lt;/strong&gt;. You can write cleaner, cohesive, more testable code, and I intend to prove it.&lt;/p&gt;

&lt;p&gt;At my session, we will&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;talk about what it takes to write highly cohesive, loosely coupled code&lt;/li&gt;
 &lt;li&gt;see what &lt;strong&gt;Inversion of Control (IoC)&lt;/strong&gt; and &lt;strong&gt;Dependency  Injection (DI)&lt;/strong&gt; are all about&lt;/li&gt;
 &lt;li&gt;look at appropriate ways of using an IoC container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If accepted, I also plan on giving this talk at the
&lt;a href="http://www.utahcodecamp.com/"&gt;Utah Code Camp&lt;/a&gt; on &lt;strong&gt;March 27&lt;/strong&gt;  and &lt;a href="http://richmondcodecamp.org"&gt;Richmond Code Camp&lt;/a&gt; on &lt;strong&gt;May 
22&lt;/strong&gt;. If you are &amp;quot;in the area,&amp;quot; please stop by. ;)&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/2010_1_upcoming_speaking_engagements.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?657</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/657.aspx</trackback:ping>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>How to Read Auto-Generated MachineKey</title>
      <link>http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey.aspx</guid>
      <pubDate>Thu, 18 Feb 2010 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Whether it&amp;#39;s tamper-proofing ViewState, form authentication tickets, or generating session IDs, the &lt;a href="http://msdn.microsoft.com/en-us/library/ms998288.aspx"&gt;&amp;lt;machineKey&amp;gt;&lt;/a&gt; section is behind it all. Even if you don&amp;#39;t generate it by hand, there&amp;#39;s one 
auto-generated for you.&lt;/p&gt;

&lt;p&gt;My rule of thumb is to almost always generate one (using
&lt;a href="http://aspnetresources.com/tools/keycreator.aspx"&gt;my own tool&lt;/a&gt;) because:&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;I like to control the length of keys and the choice of algorithms.&lt;/li&gt;
 &lt;li&gt;I often piggy-back off this section to use it as a Key/Initialization 
 Vector pair for various cryptographic scenarios. You can see this approach in my open source project &lt;a href="http://shinkansen.codeplex.com/"&gt;Shinkansen&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I could never understand why Microsoft didn&amp;#39;t provide an easy way to read the auto-generated keys. I fired up my trusty Reflector and followed their code as far as I could, until I hit calls to The Unmanaged Side.&lt;/p&gt;

&lt;p&gt;As you can tell from the screenshot below, both the &lt;code&gt;DecryptionKey&lt;/code&gt; and &lt;code&gt;
ValidationKey&lt;/code&gt; are set to &lt;code&gt;AutoGenerate,IsolateApps&lt;/code&gt; while &lt;code&gt;DecryptionKeyInternal&lt;/code&gt; and &lt;code&gt;ValidationKeyInternal&lt;/code&gt; contain perfectly valid, auto-generated keys. Except that they are marked &lt;code&gt;internal&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://aspnetresources.com/images/auto-machine-key.png" alt="Visual Studio Auto window with auto-generated machineKey section" class="framed" /&gt;&lt;/p&gt;

&lt;p&gt;With a little bit of reflection magic dust, it&amp;#39;s easy enough to get to them:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;&lt;span class='kwd'&gt;protected void&lt;/span&gt; Page_Load (&lt;span class='kwd'&gt;object&lt;/span&gt; sender, EventArgs e)
{
  MachineKeySection section = (MachineKeySection) 
      ConfigurationManager.GetSection (&lt;span class='st'&gt;"system.web/machineKey"&lt;/span&gt;);

  BindingFlags flags = 
      BindingFlags.Instance | 
      BindingFlags.NonPublic | 
      BindingFlags.GetProperty;

  Func&lt;&lt;span class='kwd'&gt;string&lt;/span&gt;, &lt;span class='kwd'&gt;byte&lt;/span&gt;[]&gt; propertyReader = name =&gt; (&lt;span class='kwd'&gt;byte&lt;/span&gt;[]) section
      .GetType ()
      .GetProperty (name, flags)
      .GetValue (section, &lt;span class='kwd'&gt;null&lt;/span&gt;);

  &lt;span class='kwd'&gt;string&lt;/span&gt; key = ConvertToHex (
    propertyReader (&lt;span class='st'&gt;"DecryptionKeyInternal"&lt;/span&gt;));
    
  &lt;span class='kwd'&gt;string&lt;/span&gt; iv = ConvertToHex (
    propertyReader (&lt;span class='st'&gt;"ValidationKeyInternal"&lt;/span&gt;));
}

&lt;span class='kwd'&gt;private string&lt;/span&gt; ConvertToHex (&lt;span class='kwd'&gt;byte&lt;/span&gt;[] binary)
{
  &lt;span class='kwd'&gt;return&lt;/span&gt; binary.Aggregate (
      &lt;span class='kwd'&gt;new&lt;/span&gt; StringBuilder (), 
      (acc, c) =&gt; acc.AppendFormat (&lt;span class='st'&gt;"{0:x2}"&lt;/span&gt;, c), 
      acc =&gt; acc.ToString());
}
&lt;/pre&gt;

&lt;p&gt;Note: this code won&amp;#39;t work in &lt;a href="http://msdn.microsoft.com/en-us/library/ms998341.aspx"&gt;partial trust&lt;/a&gt; because of reflection. Still, I plan on using this technique to abstract away the difference between auto- and manually-generated keys.&lt;/p&gt;

&lt;p&gt;I just wish they made this ordeal less complicated.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?656</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/656.aspx</trackback:ping>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Transparent Database Encryption With SQL Server 2008</title>
      <link>http://aspnetresources.com/blog/transparent_data_encryption_sql_server_2008.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/transparent_data_encryption_sql_server_2008.aspx</guid>
      <pubDate>Wed, 27 Jan 2010 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;As I was beating my head against the wall with SQL Server encryption, I was envisioning horror scenarios of converting my columns to &lt;code&gt;varbinary&lt;/code&gt;, calling &lt;code&gt;ENCRYPTBYKEY&lt;/code&gt; all over the place and doing other unspeakable atrocities to my database, I was happy to learn about &lt;strong&gt;Transparent Data Encryption (TDE)&lt;/strong&gt; introduced in SQL Server 2008.&lt;/p&gt;

&lt;p&gt;TDE makes database encryption transparent, so you don&amp;#8217;t have to change the schema. It also addresses the issue of protecting data &amp;#8220;at rest&amp;#8221; which is critically important to some companies.&lt;/p&gt;

&lt;p&gt;I found two good MSDN resources on the subject:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc278098.aspx"&gt;Database Encryption in SQL Server 2008 Enterprise Edition&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb934049.aspx"&gt;Understanding Transparent Data Encryption (TDE)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope this helps! (Seriously, ScottGu needs to copyright this line).&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/transparent_data_encryption_sql_server_2008.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?655</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/655.aspx</trackback:ping>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Is Nook Cannibalizing Store Sales?</title>
      <link>http://aspnetresources.com/blog/is_nook_cannibalizing_store_sales.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/is_nook_cannibalizing_store_sales.aspx</guid>
      <pubDate>Wed, 27 Jan 2010 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;As a newly&amp;#8211;minted owner of a Barnes &amp; Noble&amp;#8217;s &lt;a href="http://nook.com/"&gt;Nook&lt;/a&gt;, I experienced a weird feeling as I walked into a local brick and mortar B&amp;N store the other day. I saw a particular book I wanted to buy, but just couldn&amp;#8217;t get myself to take it to the checkout.&lt;/p&gt;

&lt;p&gt;See, in my mind, having paid $280 for a single-purpose device (which I&amp;#8217;m fairly unhappy with), I couldn&amp;#8217;t justify an in-store purchase. It&amp;#8217;s like buying a hybrid. Even if you&amp;#8217;re not a tree hugger, you gotta &lt;strong&gt;live&lt;/strong&gt; in that car to break even with the high markup for the new technology. This is why I don&amp;#8217;t find hybrids appealing yet. Same with the Nook.&lt;/p&gt;

&lt;p&gt;Turns out that relatively new book (&lt;a href="http://search.barnesandnoble.com/Moral-Minority/Brooke-Allen/e/9781435121225/?itm=1&amp;USRI=moral+minority"&gt;Moral Minority&lt;/a&gt;, if you&amp;#8217;re curious) wasn&amp;#8217;t available in digital format. That&amp;#8217;s a sale lost on two accounts.&lt;/p&gt;

&lt;p&gt;I would imagine all this is different with Amazon. They don&amp;#8217;t have &amp;#8220;brick &amp; mortar&amp;#8221; stores, so I never had &lt;a href="http://en.wikipedia.org/wiki/Buyer%27s_remorse"&gt;buyer&amp;#8217;s remorse&lt;/a&gt;. You buy online from them, digital or not. Besides, they have lots more books digitized.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m curious to see how Nook affects B&amp;N&amp;#8217;s in-store sales. But one thing is clear to me: B&amp;N should work harder to justify Nook&amp;#8217;s price tag.&lt;/p&gt;

&lt;p class="note"&gt;Note: I&amp;#8217;ve expressed my frustration with Nook on Twitter and do plan to write an in-depth review of its UX. One of these days&amp;#8230;&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/is_nook_cannibalizing_store_sales.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?654</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/654.aspx</trackback:ping>
      <slash:comments>1</slash:comments>
    </item>
    <item>
      <title>Shinkansen, My New Project, Is Up On CodePlex</title>
      <link>http://aspnetresources.com/blog/shinkansen_launched.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/shinkansen_launched.aspx</guid>
      <pubDate>Mon, 25 Jan 2010 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;A couple of days ago I launched my latest project, &lt;strong&gt;Shinkansen&lt;/strong&gt;, on CodePlex (&lt;a href="http://shinkansen.codeplex.com/"&gt;overview&lt;/a&gt; and 	&lt;a href="http://shinkansen.codeplex.com/documentation"&gt;documentation&lt;/a&gt;).
&lt;/p&gt;

&lt;h2&gt;Overview&lt;/h2&gt;

&lt;p&gt;In a nutshell, &lt;strong&gt;Shinkansen&lt;/strong&gt; is a sever control + HTTP handler combo which allows you declare your JavaScript and CSS includes like you normally would, and have them:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;HTTP compressed&lt;/li&gt;
	&lt;li&gt;Crunched (minified and so on)&lt;/li&gt;
	&lt;li&gt;Combined into a single download&lt;/li&gt;
	&lt;li&gt;Cached on the client&lt;/li&gt;	
&lt;/ul&gt;

&lt;p&gt;Most of these tasks you can perform on your own.&lt;/p&gt;

&lt;p&gt;For example, you can configure HTTP compression in IIS. However, it&amp;#39;s possible only if you have physical access to a web server and &lt;strong&gt;are allowed&lt;/strong&gt; to edit the metabase (IIS6) or tweak IIS settings (IIS7) by hand.&lt;/p&gt;

&lt;p&gt;You can minify JavaScript as a step of a build process, but how do you combine scripts, and how do you set cache expiration headers?&lt;/p&gt;

&lt;p&gt;Having dealt with these disparate tasks before, I wanted to build a component to streamline it all.&lt;/p&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;p&gt;As I mention in &lt;a href="http://shinkansen.codeplex.com/"&gt;Resources&lt;/a&gt;, two books in particular were of great inspiration: &lt;a href="http://www.amazon.com/gp/product/0596529309"&gt;High Performance Web Sites&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/product/0596522304"&gt;Even Faster Web Sites&lt;/a&gt;. Much of the ideas from these books have been incorporated into the project.&lt;/p&gt;

&lt;p&gt;Also, two Firefox add-ons were of great help: Google&amp;#39;s&amp;nbsp;
&lt;a href="http://code.google.com/speed/page-speed/"&gt;Page Speed&lt;/a&gt; and Yahoo&amp;#39;s &lt;a href="%3Ca%20href=%22https:/addons.mozilla.org/en-US/firefox/addon/5369%22%3EYSlow%3C/a%3E"&gt;YSlow&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Feedback&lt;/h2&gt;

&lt;p&gt;Feel free to download &lt;a href="http://shinkansen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=39193"&gt;binaries&lt;/a&gt; or 
&lt;a href="http://shinkansen.codeplex.com/SourceControl/list/changesets"&gt;source code&lt;/a&gt; and play. I will definitely appreciate suggestions and bug reports.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/shinkansen_launched.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?653</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/653.aspx</trackback:ping>
      <slash:comments>6</slash:comments>
    </item>
    <item>
      <title>Help Improve the Markdown Port</title>
      <link>http://aspnetresources.com/blog/help_improve_the_markdown_port.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/help_improve_the_markdown_port.aspx</guid>
      <pubDate>Mon, 28 Dec 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Almost an eternity ago, I ported John Gruber&amp;#39;s &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; to C#.  The Markdown syntax is known quite well outside of the .NET community, so I wanted to bring it to this camp. Even though I&amp;#39;ve seen the port used here and there, I&amp;#39;ve never got to run it as a community project.&lt;/p&gt;

&lt;p&gt;Well, it seems Jeff Atwood and Co at &lt;a href="http://stackoverflow.com"&gt;Stack Overflow&lt;/a&gt; picked it up to run as &lt;a href="http://blog.stackoverflow.com/2009/12/introducing-markdownsharp/"&gt;an open source project&lt;/a&gt;. The code from 2004 was based off a Perl source with lots and lots of regular 
expressions. If I were to write a port all over again, I&amp;#39;d refactor it heavily.&lt;/p&gt;

&lt;p&gt;If you feel like contributing, please head to a &lt;a href="http://blog.stackoverflow.com/2009/12/introducing-markdownsharp/"&gt;the announcement post&lt;/a&gt; and go 
from there.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/help_improve_the_markdown_port.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?652</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/652.aspx</trackback:ping>
      <slash:comments>1</slash:comments>
    </item>
    <item>
      <title>Don't Blabber About Your Employer During Interviews</title>
      <link>http://aspnetresources.com/blog/dont_blabber_about_your_employer_during_interviews.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/dont_blabber_about_your_employer_during_interviews.aspx</guid>
      <pubDate>Thu, 19 Nov 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;As I do phone screens and in-person interviews with candidates, it&amp;#8217;s funny and ironic to me how much sensitive information they disclose about their employer just for the asking. The kind of inside knowledge most employers would hate to see disclosed about their operations, which is why they put draconian clauses about it in employment contracts. And yet, that knowledge walks out the door that easily.&lt;/p&gt;

&lt;p&gt;When I ask someone to explain how he went about scaling a web app, I&amp;#8217;m not asking how the manufacturing floor is set up or what goes on there. I&amp;#8217;m talking shop. I&amp;#8217;m judging the thought process and technical prowess.&lt;/p&gt;

&lt;p&gt;Please be courteous to your still-current employer and don&amp;#8217;t leak sensitive information.&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="/images/dont_blabber.jpg" alt="Loose lips sink ships" class="framed" /&gt;
&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/dont_blabber_about_your_employer_during_interviews.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?651</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/651.aspx</trackback:ping>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Book Review: In Pursuit of Elegance</title>
      <link>http://aspnetresources.com/blog/in_pursuit_of_elegance_book_review.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/in_pursuit_of_elegance_book_review.aspx</guid>
      <pubDate>Wed, 18 Nov 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;While reading a fascinating discussion of inefficiency of traffic control systems&amp;#8212;road signs, traffic lights, etc&amp;#8212;in Matthew May&amp;#8217;s &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0385526490/aspnetresourc-20"&gt;In Pursuit of Elegance&lt;/a&gt;, I came across this interesting thought:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;When you are fully involved in a process governed by very simple relationship rules, a natural inclination takes over, and a self-organized pattern emerges that is more orderly than anything legislation could produce. Under those circumstances, you&amp;#8217;re connected and interacting with what&amp;#8217;s around you. Lose that connection, and a mess ensues.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Immediately, one of the tenets of the &lt;a href="http://agilemanifesto.org/principles.html"&gt;Agile Manifesto&lt;/a&gt; sprang to mind:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;The best architectures, requirements, and designs emerge from self-organizing teams.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Self-organization is better than prescriptive governance. Lucky are the companies that understand this.&lt;/p&gt;


&lt;h2&gt;We don&amp;#8217;t need most of the things that surround us&lt;/h2&gt;


&lt;p&gt;&lt;a href="http://www.hamilton-baillie.co.uk/"&gt;Ben Hamilton-Baillie&lt;/a&gt;, a British urban designer, is quoted saying this about inefficiencies of traffic controls:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What&amp;#8217;s wrong with how we engineer things is that most of what we accept as proper order of things is based on assumptions, not observations. If we observed first, designed second, we wouldn&amp;#8217;t need most of the things we build.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I&amp;#8217;ll go so far as to say &lt;strong&gt;we don&amp;#8217;t need most of the software in existence&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To his point, in spite of the billions spent each year around the world on installing and maintaining traffic controls, there&amp;#8217;s absolutely no comprehensive research anywhere to demonstrate the benefits of traffic signals&amp;#8212;in either the context of traffic flow or safety&amp;#8212;but there are a number of studies showing their detrimental effect.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sounds familiar? All those CRM, ERP, CIM, etc, systems&amp;#8212;just about everything with the word &amp;#8220;Enterprise&amp;#8221; in its name&amp;#8212;aren&amp;#8217;t worth the time, money, or headache.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because the vast majority of software lacks elegance. The kind of elegance that actually solves problems.&lt;/p&gt;

&lt;p&gt;We come to the table with assumptions, not observations. This, to a great extent, is why the &amp;#8220;Big 3&amp;#8221; American car manufacturers are in the red. This is why the Toyotas and Hondas of the world leapfrogged them. It&amp;#8217;s a cultural issue, rooted on the power of observing and subtracting clutter.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[The core philosophy of engineers and executives of Toyota]: they both believe that the job, any job, simply cannot be done in an office, from behind the desk, drawing conclusions and making decisions solely on the basis of reading reports.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That&amp;#8217;s what &lt;a href="http://en.wikipedia.org/wiki/William_J._Bratton"&gt;Police Chief William Bratton&lt;/a&gt; did in NYC: he focused on the statistically measly 3% of crimes perpetrated on the subway. It&amp;#8217;s the &lt;a href="http://www.aspnetresources.com/blog/broken_windows_of_blogs.aspx"&gt;Broken Windows Paradox&lt;/a&gt; at work. The only way to see it was to put cops on the streets and subways, observe what happened, and act on it (incidentally, good software helped centralize the knowledge base).&lt;/p&gt;

&lt;h2&gt;Stop trying to regulate risk&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The more we try to control and regulate our risk, the more exposed and at risk we are, because the more protected from hazards we think we are, the less conscious of potentials dangers we become.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even thought it has been said in the context of, again, traffic control systems, this quote reminds of the &lt;a href="http://www.youtube.com/watch?v=uuiKJ0rRTAo"&gt;Chemical Burn scene&lt;/a&gt; from &lt;a href="http://www.imdb.com/title/tt0137523/"&gt;Fight Club&lt;/a&gt;.

&lt;h2&gt;Get the book!&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;In Pursuit of Elegance&lt;/strong&gt; is an excellent book (and a &lt;a href="http://www.inpursuitofelegance.com/"&gt;blog&lt;/a&gt;). Its theme is finding that &amp;#8220;elusive element behind many innovative breakthroughs in the fields of ranging from physics and marketing to design and popular culture.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Who knew Jackson Pollock&amp;#8217;s paintings were of highly fractal nature… even before the word &amp;#8220;fractal&amp;#8221; was invented?&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/in_pursuit_of_elegance_book_review.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?650</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/650.aspx</trackback:ping>
      <slash:comments>3</slash:comments>
    </item>
    <item>
      <title>Comparing Strings Like It's 1995</title>
      <link>http://aspnetresources.com/blog/compare_strings_like_its_1995.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/compare_strings_like_its_1995.aspx</guid>
      <pubDate>Fri, 13 Nov 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;While going through &lt;a href="http://www.amazon.com/Art-Unit-Testing-Examples-NET/dp/1933988274/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1258120846&amp;sr=8-1"&gt;The Art of Unit Testing: with Examples in .NET&lt;/a&gt; this morning, I came across a string comparison notation, which always makes me cringe:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;&lt;span class='kwd'&gt;if&lt;/span&gt; (!fileName.ToLower().EndsWith (&lt;span class='st'&gt;".slv"&lt;/span&gt;))
{
}&lt;/pre&gt;

&lt;p&gt;I&amp;#8217;ve also lost count of seeing its closest cousin:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;&lt;span class='kwd'&gt;if&lt;/span&gt; (someText.ToLower() === &lt;span class='st'&gt;"some test value"&lt;/span&gt;)
{
}&lt;/pre&gt;

&lt;p&gt;This is how we used to roll in C++. I&amp;#8217;m surprised anybody still does this.&lt;/p&gt;

&lt;p&gt;For one, &lt;code&gt;ToLower()&lt;/code&gt; doesn&amp;#8217;t produce consistent results for several languages, e.g. Turkish (see &lt;a href="http://msdn.microsoft.com/en-us/library/ms973919.aspx#stringsinnet20_topic5"&gt;The Motivation: The Turkish-I Problem&lt;/a&gt;). 
&lt;/p&gt;

&lt;/p&gt;The other problem is possibly calling &lt;code&gt;ToLower()&lt;/code&gt; on a &lt;code&gt;null&lt;/code&gt;, so you have to run null checks all over the place. Why not use &lt;code&gt;string.Equals&lt;/code&gt; instead? It&amp;#8217;s null-friendly.&lt;/p&gt; 

&lt;p&gt;In .NET, you should do &lt;em&gt;culture-aware&lt;/em&gt; comparisons. With FxCop, every time you do otherwise, it will apply its &lt;strong&gt;Specify CultureInfo&lt;/strong&gt; rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Because the behavior of &amp;#8217;string.ToLower()&amp;#8217; could 
vary based on the current user&amp;#8217;s locale settings, replace 
this call in &amp;#8217;Foo()&amp;#8217; with a call to &amp;#8217;string.ToLower(CultureInfo)&amp;#8217;. If 
the result of &amp;#8217;string.ToLower(CultureInfo)&amp;#8217; will be 
displayed to the user, specify &amp;#8217;CultureInfo.CurrentCulture&amp;#8217; 
as the &amp;#8217;CultureInfo&amp;#8217; parameter. Otherwise, if the result 
will be stored and accessed by software, such as when 
it is persisted to disk or to a database, specify &amp;#8217;CultureInfo.InvariantCulture&amp;#8217;.&amp;#8221;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Microsoft has an excellent whitepaper on MSDN, &lt;a href="http://msdn.microsoft.com/en-us/library/ms973919.aspx"&gt;New Recommendations for Using Strings in Microsoft .NET 2.0&lt;/a&gt;. Read it and memorize it.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/compare_strings_like_its_1995.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?649</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/649.aspx</trackback:ping>
      <slash:comments>9</slash:comments>
    </item>
    <item>
      <title>How to Make crossdomain.xml Work with SharePoint</title>
      <link>http://aspnetresources.com/blog/getting_crossdomain_xml_to_work_with_sharepoint.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/getting_crossdomain_xml_to_work_with_sharepoint.aspx</guid>
      <pubDate>Tue, 03 Nov 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Not long ago I worked on a web site which had all its content and media stored in SharePoint. At an early point in the project, Flash developers started to complain that none of their media played when served from SharePoint. The problem seemed obvious: the cross-domain policy file, &lt;strong&gt;crossdomain.xml&lt;/strong&gt;, was missing. Here&amp;#8217;s what it&amp;#8217;s for (&lt;a href="http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html"&gt;via Adobe&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;em&gt;cross-domain policy file&lt;/em&gt; is an XML document that grants a web client&amp;mdash;such as Adobe Flash Player (though not necessarily limited to it)&amp;mdash;permission to handle data across multiple domains. When a client hosts content from a particular source domain and that content makes requests directed towards a domain other than its own, the remote domain would need to
host a cross-domain policy file that grants access to the source domain, allowing the client to continue with the transaction. Policy files grant read access to data as well as permit a client to include custom headers in cross-domain requests.&lt;/p&gt;

&lt;p&gt;The most common location for a policy file on a server is in the root directory of a domain with the filename crossdomain.xml (e.g.
http://example.com/crossdomain.xml)&amp;mdash;the default location that clients check when a policy file is required.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are two things to note here.&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&amp;#8220;though not necessarily limited to [Adobe Flash]&amp;#8221;. Silverlight, being a Flash knock-off, works the same way. See &lt;a
    href="http://msdn.microsoft.com/en-us/library/cc838250(VS.95).aspx#crossdomain_communication"&gt;HTTP
    Communication and Security with Silverlight&lt;/a&gt;. In other words, this
    discussion applies to Silverlight just as much.&lt;/li&gt;
  &lt;li&gt;A cross-domain policy file must be placed in the &lt;em&gt;root&lt;/em&gt; of your
    web site.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The challenge became how to put crossdomain.xml in web root. SharePoint isn&amp;#8217;t your typical web site; you don&amp;#8217;t just hit pages&amp;#8212;there&amp;#8217;s a level of indirection for all resources.&lt;/p&gt;

&lt;p&gt;Just about every blog post on the web recommended using the now free &lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/FX100487631033.aspx"&gt;SharePoint Designer&lt;/a&gt; to upload the policy file. Others were suggesting to &amp;#8220;drop&amp;#8221; it in the physical root (normally
C:\inetpub\wwwroot\wss\VirtualDirectories\80).&lt;/p&gt;

&lt;p&gt;We followed just about every bit of advice. Nothing worked. Hitting crossdomain.xml would always yield a 404.&lt;/p&gt;

&lt;p&gt;Several days into this nightmare, my stalwart co-worker Eric stumbled upon a solution:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy crossdomain.xml to SharePoint&amp;#8217;s physical root. &lt;/li&gt;
  &lt;li&gt;Open web.config from the same folder and disable custom error pages: &lt;pre class='coloredcode'&gt;&amp;lt;&lt;span class='tag'&gt;customErrors&lt;/span&gt;&lt;span class='attr'&gt; mode=&lt;/span&gt;&lt;span class='attrv'&gt;"Off"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;
&lt;/ol&gt;

&lt;p&gt;Amazingly, that worked! Like all things SharePoint, it made &lt;em&gt;no sense at all&lt;/em&gt;, but it worked.&lt;/p&gt;

&lt;p&gt;I hope I can save someone several days of frustrating troubleshooting.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/getting_crossdomain_xml_to_work_with_sharepoint.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?648</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/648.aspx</trackback:ping>
      <slash:comments>8</slash:comments>
    </item>
    <item>
      <title>Slides from the Boston Code Camp 12</title>
      <link>http://aspnetresources.com/blog/boston_code_camp_12_slides_and_code.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/boston_code_camp_12_slides_and_code.aspx</guid>
      <pubDate>Mon, 19 Oct 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;A big thank you to everyone who attended my two talks at the Boston Code Camp! Below are links to slides and sample code.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://aspnetresources.com/downloads/Professional_MS_AJAX_and_jQuery.zip"&gt;Professional Client-Side Development with Microsoft AJAX Library and jQuery&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://aspnetresources.com/downloads/Health_Monitoring.zip"&gt;Health Monitoring&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/boston_code_camp_12_slides_and_code.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?647</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/647.aspx</trackback:ping>
      <slash:comments>3</slash:comments>
    </item>
    <item>
      <title>Observations From The Field</title>
      <link>http://aspnetresources.com/blog/observations_from_the_field.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/observations_from_the_field.aspx</guid>
      <pubDate>Mon, 14 Sep 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;&lt;strong&gt;Cashiers&lt;/strong&gt; at a certain brand new cafeteria have touch-screen displays littered with buttons upon buttons. Which button is pressed the most? &amp;quot;Credit,&amp;quot; of course. The button is so small that a cashier pokes it with the eraser end of a pencil. And she has to aim every single time. Multiply this by a couple of &lt;em&gt;hundred&lt;/em&gt; clicks per day, and her day must be pretty exhausting.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;EMT worker&lt;/strong&gt; answers a 9-1-1 call. To my excited comment about his rugged&amp;#8211;looking tablet, he says, &lt;em&gt;These things are a pain in the butt&lt;/em&gt;, all the while poking the screen with a stylus. To his credit, he didn&amp;#8217;t want to use stronger language in front of my wife and daughter. &lt;/p&gt;

&lt;p&gt;Seriously, you don&amp;#8217;t want to make it difficult for an EMT worker. He/she has higher priorities that fighting the UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two elderly ladies&lt;/strong&gt; at a local gift shop, walk each other through screens of a &amp;quot;new system&amp;quot; to complete a simple credit card transaction, apologetically saying, &lt;em&gt;We&amp;#8217;re still learning this system&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In cases like these I keep my mouth shut about being a software developer because, clearly, the technology failed these people.&lt;/p&gt;
&lt;p&gt;Part of the problem is that the interfaces are usually developed by twenty&amp;#8211;something folks who are shielded from that filthy medium called &lt;em&gt;the real world&lt;/em&gt; and who haven&amp;#8217;t been tainted by experiences with this &lt;em&gt;real world&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;None of this is about technology. It&amp;#8217;s all about &lt;strong&gt;how people function&lt;/strong&gt;. It&amp;#8217;s about their height, weight (heavier people have thicker fingers), strength (try holding one of those rugged tables with one hand), motor skills, degradation of eye sight with age, level of education (pay attention, copywriters!) and on and on.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s so simple to avoid these mistakes: you just have to &lt;strong&gt;observe&lt;/strong&gt; real people using the technology and correct the design. That&amp;#8217;s all there&amp;#8217;s to it. Consider yourself lucky if all this is done under supervision of an information architect and/or a usability expert.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/observations_from_the_field.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?645</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/645.aspx</trackback:ping>
      <slash:comments>1</slash:comments>
    </item>
    <item>
      <title>Paco Underhill and His Silver Bullet Technology</title>
      <link>http://aspnetresources.com/blog/paco_underhill_slver_bullet.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/paco_underhill_slver_bullet.aspx</guid>
      <pubDate>Fri, 11 Sep 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Having recently read Paco Underhill&amp;#8217;s fascinating book, &lt;a href="http://tinyurl.com/lsmov9"&gt;Why We Buy&lt;/a&gt;, I&amp;#8217;d like to share a story he cites about &amp;quot;computer programmers&amp;quot;. To me, the story is quite educational and funny.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Over the years, we&amp;#8217;ve spent tens of thousands of dollars and countless frustrating hours with computer programmers, trying to come up with a database that could handle the kind of work we do. The big problem is that while we crunch the same numbers in the same ways from job to job, each project usually requires us to do something a little differently&amp;#8212;to collect different kinds of data or to devise new comparisons of facts we just uncovered.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve hired fancy consultants who spend six months at a crack with us, trying to build a computer system. They ask us to list everything we want our program to do, but every week we add six new things to the list that negate all their work from the previous month. And, of course, our turnaround time has to be swift, so there&amp;#8217;s no time to change the system completely for each job&amp;#8212;we may need to do one new comparison for a project today and then not have to perform that function again for seven months.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So what was the ultimate solution, the killer app that solved their business problem? Wait for it. Wait&amp;#8230;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the early 90&amp;#8217;s, Microsoft Excel came along. Where had it been all my life? It was designed as a spreadsheet program, intended for accountants to do the relatively simple calculations they require. [&amp;#8230;] Today, while we still use Excel, we&amp;#8217;ve moved on to other programs like Access and SPSS&amp;#8212;but for years, Excel made out work possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; I&amp;#8217;m sure, the said &lt;em&gt;programmers&lt;/em&gt; and &lt;em&gt;consultants&lt;/em&gt; pitched the latest, shiniest  toys. I&amp;#8217;ve seen a similar drama unfold far too many times to think otherwise.&lt;/p&gt;

&lt;p&gt;But it all came down to Excel. Ironic, isn&amp;#8217;t it?&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/paco_underhill_slver_bullet.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?644</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/644.aspx</trackback:ping>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>My Herding Code Podcast Is Now Available</title>
      <link>http://aspnetresources.com/blog/herding_code_podcast.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/herding_code_podcast.aspx</guid>
      <pubDate>Wed, 09 Sep 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;I&amp;#8217;d like to thank the &lt;strong&gt;Herding Code&lt;/strong&gt; folks for inviting me on the show. &lt;a href="http://herdingcode.com/?p=215"&gt;Episode #59&lt;/a&gt; is up. Here&amp;#8217;s a rundown of the topics we discuss there:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Developing ASP.NET apps with web standards.&lt;/li&gt;
  &lt;li&gt;The merits of Silverlight.&lt;/li&gt;
  &lt;li&gt;Coping with the avalanche of new stuff coming out of Redmond.&lt;/li&gt;
  &lt;li&gt;Are wholesale conference of any value?&lt;/li&gt;
  &lt;li&gt;The role of Microsoft &amp;quot;evangelists.&amp;quot;&lt;/li&gt;
  &lt;li&gt;Standing up to intimidation about the state of economy (hint: the economy &lt;em&gt;functions as designed&lt;/em&gt;).&lt;/li&gt;
  &lt;li&gt;When will Microsoft&amp;#8217;s Patterns and Practices group get their act together?&lt;/li&gt;
  &lt;li&gt;Has the MVP program lost its relevance?&lt;/li&gt;
  &lt;li&gt;The role of ALT.NET in developer education.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/herding_code_podcast.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?646</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/646.aspx</trackback:ping>
      <slash:comments>1</slash:comments>
    </item>
    <item>
      <title>Zeldman Speaketh. Take Heed.</title>
      <link>http://aspnetresources.com/blog/zeldman_speaketh_take_heed.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/zeldman_speaketh_take_heed.aspx</guid>
      <pubDate>Sun, 06 Sep 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;I&amp;#8217;ve stumbled upon an interesting interview (&lt;a
href="http://www.netmag.co.uk/zine/discover-interview/jeffrey-zeldman"&gt;HTML&lt;/a&gt;, &lt;a href="http://www.zeldman.com/u/NET190.interview.pdf"&gt;PDF&lt;/a&gt;) with &lt;a href="http://www.zeldman.com"&gt;Jeffrey Zeldman&lt;/a&gt;, published in the &lt;a
href="http://www.netmag.co.uk/"&gt;.NET Magazine&lt;/a&gt; (hey, what&amp;#8217;s with the name, really?)&lt;/p&gt;

&lt;p&gt;The interview is a great complement to Zeldman&amp;#8217;s &lt;a
href="http://www.zeldman.com/2009/03/30/freelance-to-agency-podcast/"&gt;Freelance to Agency&lt;/a&gt; podcast, a live recording of a SxSW panel.&lt;/p&gt;

&lt;p&gt;Money quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8220;Just because the economy is bad, it doesn&amp;rsquo;t mean you have to be unhappy.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I highly recommend both resources if you&amp;#8217;re starting or running your own business, or if you&amp;#8217;re still scared about the economy.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/zeldman_speaketh_take_heed.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?642</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/642.aspx</trackback:ping>
      <slash:comments>1</slash:comments>
    </item>
    <item>
      <title>The Best Time Is Now and Never</title>
      <link>http://aspnetresources.com/blog/the_best_time_is_now_and_never.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/the_best_time_is_now_and_never.aspx</guid>
      <pubDate>Sun, 06 Sep 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Something I learned a long time ago as a parent is that there&amp;#8217;s no perfect time for kids. The same is true for marriage, vacations, starting a new business&amp;#8230; You get the idea.&lt;/p&gt;

&lt;p&gt;Among the gaudy parade of the latest &lt;a
href="http://www.inc.com/magazine/20090901/"&gt;Inc 500&lt;/a&gt; &amp;#8212;the business equivalent of a high school prom&amp;#8212;is a short article by Meg Cadoux Hirshberg who is married to Gary Hirshberg, president and CEO of Stonyfield Farm. The title of the missive is &lt;a
href="http://www.inc.com/magazine/20090901/balancing-acts-if-not-now-when.html"&gt;Balancing Acts: If Not Now, When?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Money quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The reality is that when you are entangled in an entrepreneurial life, there&amp;#8217;s never a right time &amp;#8211; for anything. There&amp;#8217;s no right time, because there&amp;#8217;s no time (and usually no money, either). For having kids, for buying a house, for getting a dog, for taking a vacation, for going out to dinner. Planning becomes difficult when income (if it exists at all) is insecure and savings are usually (to put it gently) unsubstantial. No matter how loudly private life calls out for investment &amp;#8211; of time and of money &amp;#8211; the business screams even louder in its demands for both. An entrepreneurial life becomes all about postponing &amp;#8211; &amp;#8220;When we break even&amp;hellip;,&amp;#8221; &amp;#8220;When we get that contract&amp;hellip;,&amp;#8221; &amp;#8220;When we hire that salesperson&amp;hellip;&amp;#8221; &amp;#8211; ah, yes, that&amp;#8217;s when our lives can move ahead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the hyperactive (yet unproductive) and overcommunicated society, it&amp;#8217;s refreshing to come across such uncommon common sense about entrepreneurship.&lt;/p&gt;

&lt;p&gt;Enjoy the read! &lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/the_best_time_is_now_and_never.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?641</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/641.aspx</trackback:ping>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Recipe: An ASP.NET Roast</title>
      <link>http://aspnetresources.com/blog/aspnet_roast_recipe.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/aspnet_roast_recipe.aspx</guid>
      <pubDate>Thu, 23 Jul 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Next time you invite your buddies to a cookout, how about making something special? May I suggest a roast recipe?&lt;/p&gt;

&lt;h2&gt;Ingredients&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1 cup sliced CSS&lt;/li&gt;
&lt;li&gt;1 teaspoon JavaScript&lt;/li&gt;
&lt;li&gt;1/2 cup XHTML powder&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Instructions&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Grind tables.&lt;/li&gt;
&lt;li&gt;Place ASP.NET in a roaster, stab with knife to allow view state to escape.&lt;/li&gt;
&lt;li&gt;Fill layout with semantic markup.&lt;/li&gt;
&lt;li&gt;Blend CSS with well-beaten JavaScript and pour over the top.&lt;/li&gt;
&lt;li&gt;Continue making layers until all the ingredients are used.&lt;/li&gt;
&lt;li&gt;Serve with modern browsers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/aspnet_roast_recipe.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?639</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/639.aspx</trackback:ping>
      <slash:comments>3</slash:comments>
    </item>
    <item>
      <title>Hire me!</title>
      <link>http://aspnetresources.com/blog/going_solo_consulting.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/going_solo_consulting.aspx</guid>
      <pubDate>Thu, 16 Jul 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;After years of being a business (co)owner and a &amp;#8220;W2 consultant,&amp;#8221; I&amp;#8217;ve decided to put all my expertise to good use and go the route of independent consulting. It has taken months and months of research: reading, talking to fellow-consultants, reflecting, visiting an accountant, etc&amp;#8212;to finally incorporate and get going. Hence the somewhat slow blogging.&lt;/p&gt;

&lt;p&gt;You&amp;#8217;ve seen an occasional post or two on this subject, and I intend to blog more about it. If you&amp;#8217;re contemplating to strike out on your own, I do have something you say that will interest you. Please stay tuned.&lt;/p&gt;

&lt;p class="note"&gt;If you visit my site in a browser, you will now see &amp;#8220;Hire me!&amp;#8221; in the menu. If you pull my RSS feed, you will see a &amp;#8220;signature&amp;#8221; which says the same. Both will lead you to my &lt;a href="http://aspnetresources.com/consulting.aspx"&gt;&amp;#8220;Rules of Engagement&amp;#8221;&lt;/a&gt;. The rules are simple but necessary.&lt;/p&gt;

&lt;p&gt;If you have a project I can help you with, please email me, and we&amp;#8217;ll take it from there.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/going_solo_consulting.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?637</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/637.aspx</trackback:ping>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Wean Yourselves off View State From the Start</title>
      <link>http://aspnetresources.com/blog/wean_yourselves_off_view_state.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/wean_yourselves_off_view_state.aspx</guid>
      <pubDate>Fri, 10 Jul 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;Whenever I start a new project these days, I head straight to web.config and do this:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;&amp;lt;&lt;span class='tag'&gt;pages&lt;/span&gt;
  &lt;span class='attr'&gt; enableViewState=&lt;/span&gt;&lt;span class='attrv'&gt;"false"&lt;/span&gt;
  &lt;span class='attr'&gt; enableSessionState=&lt;/span&gt;&lt;span class='attrv'&gt;"false"&lt;/span&gt;
  &lt;span class='attr'&gt; autoEventWireup=&lt;/span&gt;&lt;span class='attrv'&gt;"false"&lt;/span&gt;&amp;gt;&lt;/pre&gt;

&lt;p&gt;The key here is the first attribute. If you knock out view state right from the start, I can guarantee you will approach your site differently.&lt;/p&gt;

&lt;p&gt;You won&amp;#8217;t be tempted to drag and drop &lt;code&gt;DataGrid&lt;/code&gt;s, which are view state hogs because they depend on it for paging and sorting. To me, the &lt;code&gt;DataGrid&lt;/code&gt; control is the ultimate insult to aesthetics.&lt;/p&gt;

&lt;p&gt;You won&amp;#8217;t be tempted to stuff junk if view state simply because it&amp;#8217;s &lt;a href="http://www.aspnetresources.com/articles/ViewState.aspx"&gt;a seemingly convenient practice&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You won&amp;#8217;t be tempted to use autopostback with dropdowns and such.&lt;/p&gt;

&lt;p&gt;You will do a lot of things differently without view state. Try it.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/wean_yourselves_off_view_state.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?636</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/636.aspx</trackback:ping>
      <slash:comments>14</slash:comments>
    </item>
    <item>
      <title>Weather.com Broke Something</title>
      <link>http://aspnetresources.com/blog/weather_com_broke_something.aspx</link>
      <guid isPermaLink="true">http://aspnetresources.com/blog/weather_com_broke_something.aspx</guid>
      <pubDate>Tue, 07 Jul 2009 00:00:00 GMT</pubDate>
      <description>&lt;p&gt;It seems weather.com has broken the cardinal rule of never, ever,
&lt;strong&gt;ever&lt;/strong&gt; changing an interface exposed to the public. &lt;/p&gt;

&lt;p&gt;Today, all of a sudden, the &lt;a href="http://www.aspnetresources.com/articles/weather_server_control.aspx"&gt;weather server control&lt;/a&gt; I wrote eons ago started throwing exceptions. &lt;a href="http://www.aspnetresources.com/articles/discuss/weather_server_control.aspx#cmt622"&gt;Charles was very quick&lt;/a&gt; to find and post a solution. I&amp;#8217;ve updated and recompiled the
control just enough to get it to work again.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m amazed that this control garnered such a following over time. A couple of times a week I get emails from folks asking for source code of the &lt;a href="http://www.aspnetresources.com/tools/locid.aspx"&gt;Location ID resolver&lt;/a&gt; (which I&amp;#8217;m happy to provide) or looking for the right location ID of their town. The latter happens because weather.com doesn&amp;#8217;t have all towns of the world in their database, so I always recommend finding a neighboring city
or landmark.&lt;/p&gt;

&lt;p&gt;Bear with me. I will completely rewrite the control. Some time soon.&lt;/p&gt;

&lt;p&gt;Charles, thank you again!&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/blog/weather_com_broke_something.aspx#comments</comments>
      <wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?635</wfw:commentRss>
      <trackback:ping>http://aspnetresources.com/blog/trackback/635.aspx</trackback:ping>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Real-World Inversion of Control and Dependency Injection with WebForms (This Is Not a Drill)</title>
      <link>http://aspnetresources.com/articles/real_world_ioc_and_di_with_webforms.aspx</link>
      <pubDate>Fri, 20 Nov 2009 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/real_world_ioc_and_di_with_webforms.aspx</guid>
      <description>An exercise in refactoring a real-world WebForm to a more maintainable and testable one.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/real_world_ioc_and_di_with_webforms.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?125</wfw:commentRss>
    </item>
    <item>
      <title>Inversion of Control and Dependency Injection with WebForms (In 2 Acts)</title>
      <link>http://aspnetresources.com/articles/ioc_and_di_with_web_forms.aspx</link>
      <pubDate>Sat, 14 Nov 2009 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/ioc_and_di_with_web_forms.aspx</guid>
      <description>&lt;p&gt;When just about everybody has written off WebForms as uncool and hailed MVC as the new Silver Bullet, I beg to differ.&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/ioc_and_di_with_web_forms.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?123</wfw:commentRss>
    </item>
    <item>
      <title>Why So Averse To Exceptions?</title>
      <link>http://aspnetresources.com/articles/why_so_averse_to_exceptions.aspx</link>
      <pubDate>Sun, 19 Jul 2009 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/why_so_averse_to_exceptions.aspx</guid>
      <description>Having done a number of code reviews with our team, I&amp;#8217;ve noticed one common theme through all projects: developers weren&amp;#8217;t sure what to do about unhandled exceptions.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/why_so_averse_to_exceptions.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?122</wfw:commentRss>
    </item>
    <item>
      <title>Keeping Pulse on Your Site With ASP.NET 2.0 Health Monitoring</title>
      <link>http://aspnetresources.com/articles/aspnet_2_0_health_monitoring.aspx</link>
      <pubDate>Fri, 23 Mar 2007 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/aspnet_2_0_health_monitoring.aspx</guid>
      <description>One of the best, yet often overlooked, features of ASP.NET 2.0 is &lt;a href="TemplatedMailWebEventProvider"&gt;health monitoring&lt;/a&gt;. I believe it is absolutely essential to be notified of any problems with your web application, and this is where health monitoring comes in handy. A few years ago I wrote an article about &lt;a
href="http://www.aspnetresources.com/articles/CustomErrorPages.aspx"&gt;custom error pages&lt;/a&gt; and demonstrated various ways to tap into error details. Health Monitoring is a natural progression of that approach.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/aspnet_2_0_health_monitoring.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?121</wfw:commentRss>
    </item>
    <item>
      <title>The Dark Side of File Uploads</title>
      <link>http://aspnetresources.com/articles/dark_side_of_file_uploads.aspx</link>
      <pubDate>Thu, 12 Jan 2006 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/dark_side_of_file_uploads.aspx</guid>
      <description>I saw a December MSDN article, entitled &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/UploadASP2.asp"&gt;Uploading Files in ASP.NET 2.0&lt;/a&gt;, and wanted to offer my comments on some gotchas with uploading files. I&amp;#8217;ve spent countless hours and tried numerous hacks to tame file uploading and have enough bruses from hitting my head against the wall (figuratively speaking).
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/dark_side_of_file_uploads.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?119</wfw:commentRss>
    </item>
    <item>
      <title>Session_Start or Session_OnStart?</title>
      <link>http://aspnetresources.com/articles/event_handlers_in_global_asax.aspx</link>
      <pubDate>Sun, 18 Dec 2005 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/event_handlers_in_global_asax.aspx</guid>
      <description>Ever since I started to develop with ASP.NET, I&amp;#8217;ve been wondering why &lt;strong&gt;global.asa&lt;/strong&gt; from the ASP days quietly moved over to ASP.NET as &lt;strong&gt;global.asax&lt;/strong&gt;. When you look at it, it just feels so outdated, so VBScript-ish, so loosely&amp;#8211;typed. And what is the right way to name event handlers?
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/event_handlers_in_global_asax.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?117</wfw:commentRss>
    </item>
    <item>
      <title>Crafting Lightweight Page Templates with CSS</title>
      <link>http://aspnetresources.com/articles/css_templates.aspx</link>
      <pubDate>Sun, 19 Sep 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/css_templates.aspx</guid>
      <description>Giving your web application a consistent look and feel is a task of paramount importance. Yet, templating in ASP.NET has been complicated, to say the least. Learn how you can craft lightweight, efficient page templates with CSS.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/css_templates.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?116</wfw:commentRss>
    </item>
    <item>
      <title>Weather Custom Server Control</title>
      <link>http://aspnetresources.com/articles/weather_server_control.aspx</link>
      <pubDate>Sat, 11 Sep 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/weather_server_control.aspx</guid>
      <description>Need a quick and easy way to display weather on your site? Templated custom server controls to the rescue!
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/weather_server_control.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?115</wfw:commentRss>
    </item>
    <item>
      <title>Adding Variables To Style Sheets</title>
      <link>http://aspnetresources.com/articles/variables_in_css.aspx</link>
      <pubDate>Thu, 08 Jul 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/variables_in_css.aspx</guid>
      <description>Even though the spec defines CSS as a style sheet language, this language is missing one of the essential features: variables. Every time I've seen people in newsgroups ask how to implement variables in CSS a typical advice was to build the style sheet on the server. Luckily, it is easy to do in ASP.NET with the help of HTTP Handlers.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/variables_in_css.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?113</wfw:commentRss>
    </item>
    <item>
      <title>Building Dazzling Charts With Office Web Components</title>
      <link>http://aspnetresources.com/articles/office_web_components.aspx</link>
      <pubDate>Tue, 08 Jun 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/office_web_components.aspx</guid>
      <description>Need to create eye-popping charts in real time and do it at no cost at all? Give Microsoft Office Web Components a try.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/office_web_components.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?112</wfw:commentRss>
    </item>
    <item>
      <title>Make Every Web Page Printer-Friendly</title>
      <link>http://aspnetresources.com/articles/printer_friendly.aspx</link>
      <pubDate>Wed, 02 Jun 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/printer_friendly.aspx</guid>
      <description>You found an article online and want to print it to nicely punch thee holes on the side and store it with other useful stuff. Almost every site nowadays provides a printer-friendly page of this and that, but some sites don't and you're still stuck with staring at their printed navigation bar, footer, ads, etc, for ever and ever. All this online decor means nothing on paper. How do you strip page parts that are irrelevant for print?
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/printer_friendly.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?111</wfw:commentRss>
    </item>
    <item>
      <title>Beware Of Deploying Debug Code In Production</title>
      <link>http://aspnetresources.com/articles/debug_code_in_production.aspx</link>
      <pubDate>Wed, 05 May 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/debug_code_in_production.aspx</guid>
      <description>You have spent several months developing a killer web application (a web site, perhaps) and the long anticipated release day has come. You deploy the application and take it for a test drive. As you navigate from page to page you notice that each page “thinks” before rendering. What’s going on? Didn’t Microsoft folks promise code compilation and ultra fast execution? Isn’t it why we beat ASP, Java and PHP by such a wide margin?
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/debug_code_in_production.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?109</wfw:commentRss>
    </item>
    <item>
      <title>Bringing CSS2 to Visual Studio.NET</title>
      <link>http://aspnetresources.com/articles/css2_in_vsnet.aspx</link>
      <pubDate>Tue, 27 Apr 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/css2_in_vsnet.aspx</guid>
      <description>Even though the CSS2 Specification has been around since 1998 its support in the Visual Studio line of products has been rather weak. In this article you’ll learn how to enhance IntelliSense in Visual Studio.NET to display CSS2 properties.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/css2_in_vsnet.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?108</wfw:commentRss>
    </item>
    <item>
      <title>Remastering Web Form Templates</title>
      <link>http://aspnetresources.com/articles/remastering_web_templates.aspx</link>
      <pubDate>Sun, 18 Apr 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/remastering_web_templates.aspx</guid>
      <description>Visual Studio.NET comes with a number of templates for all kinds of coding occasions. The one I'm going to talk about in this article is the one you probably use most often (provided you are an ASP.NET developer): the Web Form template. Default templates suffer from being stuffed with needless markup. In this article we'll analyze what is supposed to be there and learn how to clean them up.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/remastering_web_templates.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?107</wfw:commentRss>
    </item>
    <item>
      <title>What&amp;#39;s In Your DOCTYPE?</title>
      <link>http://aspnetresources.com/articles/doctype.aspx</link>
      <pubDate>Tue, 13 Apr 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/doctype.aspx</guid>
      <description>&lt;p&gt;When you create a web form in Visual Studio.NET using the canned "Web Form" template you might ask yourself, "What is this DOCTYPE declaration about?"&lt;/p&gt;

&lt;pre&gt;
&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" &amp;gt;
&lt;/pre&gt;

&lt;p&gt;What is this strange-looking beast?&lt;/p&gt;
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/doctype.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?106</wfw:commentRss>
    </item>
    <item>
      <title>ASP.NET State Management: View State</title>
      <link>http://aspnetresources.com/articles/ViewState.aspx</link>
      <pubDate>Sun, 14 Mar 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/ViewState.aspx</guid>
      <description>ASP.NET view state is a great feature and an essential tool for web development of today. It maintains the state of a page as it travels back and forth. There is no more need to worry about restoring values of page controls between postbacks. In this article you will get an in-depth perspective on view state. We will talk about ways of reducing unnecessary payload and protecting view state from prying eyes.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/ViewState.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?105</wfw:commentRss>
    </item>
    <item>
      <title>Skinning Web Applications with CSS</title>
      <link>http://aspnetresources.com/articles/SkinningWithCSS.aspx</link>
      <pubDate>Sun, 22 Feb 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/SkinningWithCSS.aspx</guid>
      <description>The common approach to skinning web applications lies in reshuffling controls on a page. Traditionally developers define templates with different color schemes and/or control positioning, tables and inline font tags. While this used to be a perfectly viable solution the overhead of run-time application of these skins is staggering. A much better way is to separate skin structure from presentation and let CSS take care of the layout and typography.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/SkinningWithCSS.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?104</wfw:commentRss>
    </item>
    <item>
      <title>Producing XHTML-Compliant Pages With Response Filters</title>
      <link>http://aspnetresources.com/articles/HttpFilters.aspx</link>
      <pubDate>Fri, 13 Feb 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/HttpFilters.aspx</guid>
      <description>Programming with web standards in mind, although vastly ignored, is becoming more and more important. It almost seems it took too long to promote ASP.NET. Now that we're over the hill and "this stuff works" it is about time to start paying attention to web standards. In this article you will learn how to implement a response filter and plug it into the ASP.NET pipeline. The filter will transform outgoing HTML into XHTML 1.0-compliant markup.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/HttpFilters.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?101</wfw:commentRss>
    </item>
    <item>
      <title>ASP.NET Custom Error Pages</title>
      <link>http://aspnetresources.com/articles/CustomErrorPages.aspx</link>
      <pubDate>Sun, 01 Feb 2004 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">http://aspnetresources.com/articles/CustomErrorPages.aspx</guid>
      <description>ASP.NET provides a simple yet powerful way to deal with errors that occur in your web applications. We will look at several ways to trap errors and display friendly meaningful messages to users. We will then take the discussion a step further and learn how to be instantly notified about problems so you can cope with them right away. As a geek touch we will also track the path 404's travel.
     
    &lt;hr /&gt;
    &lt;span style="color: #333;"&gt;ASP.NET consulting with imagination and passion. 
    &lt;a href="http://aspnetresources.com/consulting.aspx" target="_blank"&gt;Hire me!&lt;/a&gt;&lt;/span&gt;
    
</description>
      <comments>http://aspnetresources.com/articles/discuss/CustomErrorPages.aspx</comments>
      <wfw:commentRss>http://aspnetresources.com/articles/artcomments.aspx?100</wfw:commentRss>
    </item>
  </channel>
</rss>