<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Colin Cochrane | Web Development - SEO - ASP.NET</title>
    <description>Colin Cochrane is a Web Developer and SEO Analyst based in Victoria, BC.  This blog covers all aspects of web development, from SEO to web standards and accessibility.</description>
    <link>http://www.colincochrane.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.colincochrane.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.colincochrane.com/syndication.axd</blogChannel:blink>
    <dc:creator>Colin Cochrane</dc:creator>
    <dc:title>Colin Cochrane | Web Development - SEO - ASP.NET</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/colincochrane" type="application/rss+xml" /><feedburner:emailServiceId>colincochrane</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>The Problem With StackOverflow</title>
      <description>&lt;img src="http://www.colincochrane.com/image.axd?picture=2009%2f4%2fso.png" alt="The Problem With StackOverflow" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=UHPCMVJ7JSY:JWHnVgno82Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=UHPCMVJ7JSY:JWHnVgno82Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=UHPCMVJ7JSY:JWHnVgno82Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=UHPCMVJ7JSY:JWHnVgno82Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=UHPCMVJ7JSY:JWHnVgno82Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=UHPCMVJ7JSY:JWHnVgno82Q:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=UHPCMVJ7JSY:JWHnVgno82Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=UHPCMVJ7JSY:JWHnVgno82Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=UHPCMVJ7JSY:JWHnVgno82Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/UHPCMVJ7JSY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/UHPCMVJ7JSY/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2009/04/08/The-Problem-With-StackOverflow.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=b088b29a-5e36-41c9-8c39-300b4afeea6f</guid>
      <pubDate>Wed, 08 Apr 2009 16:52:00 -0800</pubDate>
      <category>Humour</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=b088b29a-5e36-41c9-8c39-300b4afeea6f</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=b088b29a-5e36-41c9-8c39-300b4afeea6f</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2009/04/08/The-Problem-With-StackOverflow.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=b088b29a-5e36-41c9-8c39-300b4afeea6f</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=b088b29a-5e36-41c9-8c39-300b4afeea6f</feedburner:origLink></item>
    <item>
      <title>Back in Business</title>
      <description>&lt;p&gt;
My apologies for the downtime for the past couple of weeks.&amp;nbsp; My server decided to kick the bucket, and I have been incredibly busy since then, so I didn&amp;#39;t get an opportunity to sort out new hosting until today.
&lt;/p&gt;
&lt;p&gt;
On the plus side I have a lot to write about as I have been juggling a new sharepoint application, SQL 2008, and deploying a brand-spankin&amp;#39; new Active Directory infrastructure, among other things, so stay tuned! 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=NgJKsugV9Wk:t0WdqwBY4WM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=NgJKsugV9Wk:t0WdqwBY4WM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=NgJKsugV9Wk:t0WdqwBY4WM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=NgJKsugV9Wk:t0WdqwBY4WM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=NgJKsugV9Wk:t0WdqwBY4WM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=NgJKsugV9Wk:t0WdqwBY4WM:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=NgJKsugV9Wk:t0WdqwBY4WM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=NgJKsugV9Wk:t0WdqwBY4WM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=NgJKsugV9Wk:t0WdqwBY4WM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/NgJKsugV9Wk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/NgJKsugV9Wk/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/08/12/back-in-business.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=09e9c635-d1ce-45df-82da-a8352c6de0f3</guid>
      <pubDate>Tue, 12 Aug 2008 18:38:00 -0800</pubDate>
      <category>Google</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=09e9c635-d1ce-45df-82da-a8352c6de0f3</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=09e9c635-d1ce-45df-82da-a8352c6de0f3</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/08/12/back-in-business.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=09e9c635-d1ce-45df-82da-a8352c6de0f3</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=09e9c635-d1ce-45df-82da-a8352c6de0f3</feedburner:origLink></item>
    <item>
      <title>Colin Cochrane Steals Google Algorithm From Matt Cutts</title>
      <description>&lt;p&gt;In a feat of incredible cunning, Colin Cochrane stole the Google Algorithm from &lt;a href="http://www.mattcutts.com/blog/"&gt;Matt Cutts&lt;/a&gt;, the popular Googler who recently was promoted to &lt;a href="http://alohadigitalmarketing.wordpress.com/2008/06/04/how-matt-cutts-responded-to-being-googles-moral-compass/"&gt;moral compass&lt;/a&gt; at the search giant.&amp;#160; The following pictures show the daring feat as it happened at the SEOmoz party following &lt;a href="http://searchmarketingexpo.com/advanced"&gt;SMX Advanced&lt;/a&gt; in Seattle this week.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/ColinCochraneStealsGoogleAlgorithmFromMa_C833/google-algorithm-stolen_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Colin Cochrane Steals Google Algorithm From Matt Cutts" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/ColinCochraneStealsGoogleAlgorithmFromMa_C833/google-algorithm-stolen_thumb.png" width="504" height="379" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/ColinCochraneStealsGoogleAlgorithmFromMa_C833/google-algorithm-stolen-in-sepia_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Colin Cochrane Steals Google Algorithm From Matt Cutts In A Sepia Tone" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/ColinCochraneStealsGoogleAlgorithmFromMa_C833/google-algorithm-stolen-in-sepia_thumb_1.png" width="504" height="379" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cochrane's plans for the stolen algorithm remain a mystery.&amp;#160; &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=XHnJsmo46DU:ckI6MzNrnAk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=XHnJsmo46DU:ckI6MzNrnAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=XHnJsmo46DU:ckI6MzNrnAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=XHnJsmo46DU:ckI6MzNrnAk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=XHnJsmo46DU:ckI6MzNrnAk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=XHnJsmo46DU:ckI6MzNrnAk:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=XHnJsmo46DU:ckI6MzNrnAk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=XHnJsmo46DU:ckI6MzNrnAk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=XHnJsmo46DU:ckI6MzNrnAk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/XHnJsmo46DU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/XHnJsmo46DU/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/06/06/colin-cochrane-steals-google-algorithm-from-matt-cutts.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=d8ee112a-f0af-4255-b393-9ddf424827b6</guid>
      <pubDate>Fri, 06 Jun 2008 14:14:18 -0800</pubDate>
      <category>Google</category>
      <category>Humour</category>
      <category>SMX</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=d8ee112a-f0af-4255-b393-9ddf424827b6</pingback:target>
      <slash:comments>16</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=d8ee112a-f0af-4255-b393-9ddf424827b6</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/06/06/colin-cochrane-steals-google-algorithm-from-matt-cutts.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=d8ee112a-f0af-4255-b393-9ddf424827b6</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=d8ee112a-f0af-4255-b393-9ddf424827b6</feedburner:origLink></item>
    <item>
      <title>Search Friendly Development On The Microsoft Stack Presentation</title>
      <description>&lt;p&gt;
As promised, I have made my presentation from SMX Advanced available for download for those who are interested. &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a rel="enclosure" href="http://www.colincochrane.com/file.axd?file=Search-Friendly-Development-On-The-Microsoft-Stack.ppt"&gt;
Search Friendly Development On The Microsoft Stack (599.00 kb).&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks again to all those who attended, and special thanks to the organizers of SMX Advanced who put on a fantastic conference, and to &lt;a href="http://www.vanessafoxnude.com"&gt;Vanessa Fox&lt;/a&gt; for inviting me to come and speak.&amp;nbsp; Developer Day was a great success, and I can&amp;#39;t wait to see what happens next year.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=7qCvFTXHxlc:Xw7BCXrugtI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=7qCvFTXHxlc:Xw7BCXrugtI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=7qCvFTXHxlc:Xw7BCXrugtI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=7qCvFTXHxlc:Xw7BCXrugtI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=7qCvFTXHxlc:Xw7BCXrugtI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=7qCvFTXHxlc:Xw7BCXrugtI:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=7qCvFTXHxlc:Xw7BCXrugtI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=7qCvFTXHxlc:Xw7BCXrugtI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=7qCvFTXHxlc:Xw7BCXrugtI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/7qCvFTXHxlc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/7qCvFTXHxlc/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/06/05/Search-Friendly-Development-On-The-Microsoft-Stack-Presentation.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=f932b836-d409-41c9-b8ce-10dd47bd54d0</guid>
      <pubDate>Thu, 05 Jun 2008 11:32:00 -0800</pubDate>
      <category>ASP.NET</category>
      <category>Microsoft</category>
      <category>SMX</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=f932b836-d409-41c9-b8ce-10dd47bd54d0</pingback:target>
      <slash:comments>11</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=f932b836-d409-41c9-b8ce-10dd47bd54d0</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/06/05/Search-Friendly-Development-On-The-Microsoft-Stack-Presentation.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=f932b836-d409-41c9-b8ce-10dd47bd54d0</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=f932b836-d409-41c9-b8ce-10dd47bd54d0</feedburner:origLink></item>
    <item>
      <title>Google's Oldest Backlink?</title>
      <description>&lt;p&gt;
I was doing a little competitive keyword analysis recently and one particular site that ranked pretty highly in the SERPs caught my eye. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;
&lt;img src="http://www.colincochrane.com/image.axd?picture=rfc-google-snippet.jpg" alt="RFC Google Snippet" /&gt;
&lt;/p&gt;
&lt;p&gt;
It was the snippet at first that piqued my interest, with the words &amp;quot;Connecting you through the millenium&amp;quot;. Wasn&amp;#39;t the millenium, like, almost a decade ago? Hmm, I may have to delve further.
&lt;/p&gt;
&lt;p&gt;
The site itself is an excercise in mid 90&amp;#39;s web development; very plain design, mandatory animated gif, text scroller (very Web 0.56a), web counter (graphical no less) and italisized footer copyright text. Not very much in the way of high quality keyword related textual content to get it to rank where it was found. 
&lt;/p&gt;
&lt;p&gt;
Checking the whois info it can be seen that the domain was registered in April of 1996. So this old guy is being given some authority for his long service, and may go some way to explain his position in the SERPs for this keyword.
&lt;/p&gt;
&lt;p&gt;
That&amp;#39;s enough of the &amp;#39;I know how Google works&amp;#39; babble, back to the pre-millenium website bashing. Hidden deep in the &lt;a href="http://www.therfc.com/links.htm"&gt;link page&lt;/a&gt; are the best gems that this site has to offer. I particularly enjoyed the JavaScript &amp;quot;Back&amp;quot; button, to help people who are browsing this new fangled internet thing with their beta version NCSA Mosaic software. (actually Mosaic did have a back button, but whether civilians knew what it was for, is another story)
&lt;/p&gt;
&lt;p&gt;
One of the links on this page may actually be Google&amp;#39;s oldest backlink, and I&amp;#39;m advised to try the &amp;quot;newest search engine&amp;quot; by the blurb with the link.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=rfc-google-backlink.jpg" alt="Google's Oldest Backlink?" /&gt;&lt;br /&gt;
&lt;br /&gt;
I may have to switch from Altavista and try out this Google. I&amp;#39;m not expecting much, and what the hell is a &amp;quot;Google&amp;quot; anyway?&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=az2RSVtD0Jc:cYEiQcpf79c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=az2RSVtD0Jc:cYEiQcpf79c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=az2RSVtD0Jc:cYEiQcpf79c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=az2RSVtD0Jc:cYEiQcpf79c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=az2RSVtD0Jc:cYEiQcpf79c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=az2RSVtD0Jc:cYEiQcpf79c:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=az2RSVtD0Jc:cYEiQcpf79c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=az2RSVtD0Jc:cYEiQcpf79c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=az2RSVtD0Jc:cYEiQcpf79c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/az2RSVtD0Jc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/az2RSVtD0Jc/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Alex Hlinski)</author>
      <comments>http://www.colincochrane.com/post/2008/05/28/Googles-Oldest-Backlink.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=2f4bfd87-7374-40d0-a384-bd5afa56267d</guid>
      <pubDate>Wed, 28 May 2008 20:17:00 -0800</pubDate>
      <category>Google</category>
      <dc:publisher>Alex Hlinski</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=2f4bfd87-7374-40d0-a384-bd5afa56267d</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=2f4bfd87-7374-40d0-a384-bd5afa56267d</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/05/28/Googles-Oldest-Backlink.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=2f4bfd87-7374-40d0-a384-bd5afa56267d</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=2f4bfd87-7374-40d0-a384-bd5afa56267d</feedburner:origLink></item>
    <item>
      <title>Urban Dictionary and Google Sitelinks</title>
      <description>A little while ago Google allowed some method of control over the sitelinks
that are associated with a sites&amp;#39; Google snippet listing. Through the Sitelinks
feature of Google Webmaster tools, webmasters are able to decide which
sitelinks appear with their listing. However, I don&amp;#39;t think this feature has
been picked up by the guys over at the Urban Dictionary, as the snippet below
shows:
&lt;p&gt;
&amp;nbsp;&lt;img src="http://www.colincochrane.com/image.axd?picture=urban-dictionary-google-sitelinks.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;I can only imagine that the Goog has decided that this &amp;quot;c word&amp;quot; page is
valuable to it&amp;#39;s searchers and have thoughtfully provided a link
directly
to it, or perhaps the UD have intentially provided a link to one of
their most important pages afterall.&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=rwjegH8ND5M:a6SrPQfAnuM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=rwjegH8ND5M:a6SrPQfAnuM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=rwjegH8ND5M:a6SrPQfAnuM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=rwjegH8ND5M:a6SrPQfAnuM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=rwjegH8ND5M:a6SrPQfAnuM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=rwjegH8ND5M:a6SrPQfAnuM:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=rwjegH8ND5M:a6SrPQfAnuM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=rwjegH8ND5M:a6SrPQfAnuM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=rwjegH8ND5M:a6SrPQfAnuM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/rwjegH8ND5M" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/rwjegH8ND5M/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Alex Hlinski)</author>
      <comments>http://www.colincochrane.com/post/2008/05/20/Urban-Dictionary-and-Google-Sitelinks.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=e3ca1b8e-f7bb-45cd-be18-f215cb16bd73</guid>
      <pubDate>Tue, 20 May 2008 13:03:00 -0800</pubDate>
      <category>Google</category>
      <category>SEO</category>
      <dc:publisher>Alex Hlinski</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=e3ca1b8e-f7bb-45cd-be18-f215cb16bd73</pingback:target>
      <slash:comments>11</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=e3ca1b8e-f7bb-45cd-be18-f215cb16bd73</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/05/20/Urban-Dictionary-and-Google-Sitelinks.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=e3ca1b8e-f7bb-45cd-be18-f215cb16bd73</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=e3ca1b8e-f7bb-45cd-be18-f215cb16bd73</feedburner:origLink></item>
    <item>
      <title>Google Supports Obama for US Presidancy - Anti Hillary Propoganda on Google Website</title>
      <description>&lt;p&gt;
It&amp;#39;s already widely known that &lt;a href="http://blog.wired.com/27bstroke6/2008/02/silicon-valley.html" title="Google Love Obama"&gt;Google employees support Barack Obama&lt;/a&gt; ahead of the clean cut Ms. Clinton for the Democratic party presidential nomination. Interestingly, the Yahoo brigade also favour Obama, whereas those at &lt;strike&gt;evil&lt;/strike&gt; lovely Microsoft prefer Hillary. I wonder if there&amp;#39;ll be some employee &amp;quot;re-education&amp;quot; at Yahoo when Microsoft eventually forces through the takeover. 
&lt;/p&gt;
&lt;p&gt;
Now I have discovered some &lt;strike&gt;tenuous&lt;/strike&gt; compelling evidence that there may be some sort of strong-arm tactics at Google to force the will of the company on its employees. Whilst enjoying an informative &lt;a href="http://services.google.com/adsense/breeze/optimization/?sourceid=asos&amp;amp;subid=ww-ww-et-demos_guides&amp;amp;medium=link" title="Anti Hillary C. Google Demo"&gt;Google Adsense Optimization Demo&lt;/a&gt; presentation, I found the following blatantly partisan anti Hillary subliminal messaging within a presentation slide. Click &amp;quot;Pick Colors that Complement Your Site&amp;quot; to skip straight to the offending slide.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="margin: 5px; float: left; clear: right"&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=google-supports-obama-small.jpg" alt="Google AdSense Presentation Supports Obama" title="Google AdSense Presentation Supports Obama" /&gt;
&lt;/div&gt;
&lt;p&gt;
Examining the highlighted Adsense examples on this slide we can see the rather obvious anti Hillary propoganda. &amp;quot;&lt;strong&gt;Hillary is a Liar&lt;/strong&gt;&amp;quot; barks the ad title of one, &amp;quot;&lt;strong&gt;anti-hillary&lt;/strong&gt;&amp;quot; ad text in another.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;br /&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=google-obama-adsense.jpg" alt="Anti-Hillary AsSense Ad Examples" title="Anti-Hillary AsSense Ad Examples" /&gt;&lt;br /&gt;
Associating poor old Hillary with the oft-disliked current Republican administration in this way is also highly amusing and obviously reflects the political opinions of the presentation author (and possibly Google?).  &lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=trCSKdXmhNU:t6pS_PZJyEw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=trCSKdXmhNU:t6pS_PZJyEw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=trCSKdXmhNU:t6pS_PZJyEw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=trCSKdXmhNU:t6pS_PZJyEw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=trCSKdXmhNU:t6pS_PZJyEw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=trCSKdXmhNU:t6pS_PZJyEw:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=trCSKdXmhNU:t6pS_PZJyEw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=trCSKdXmhNU:t6pS_PZJyEw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=trCSKdXmhNU:t6pS_PZJyEw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/trCSKdXmhNU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/trCSKdXmhNU/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Alex Hlinski)</author>
      <comments>http://www.colincochrane.com/post/2008/04/24/Google-Supports-Obama-for-US-Presidancy-Anti-Hillary-Propoganda-on-Google-Website.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=f7eb82c1-47f8-41d0-9a17-be508b935f68</guid>
      <pubDate>Thu, 24 Apr 2008 18:57:00 -0800</pubDate>
      <category>Google</category>
      <dc:publisher>Alex Hlinski</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=f7eb82c1-47f8-41d0-9a17-be508b935f68</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=f7eb82c1-47f8-41d0-9a17-be508b935f68</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/04/24/Google-Supports-Obama-for-US-Presidancy-Anti-Hillary-Propoganda-on-Google-Website.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=f7eb82c1-47f8-41d0-9a17-be508b935f68</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=f7eb82c1-47f8-41d0-9a17-be508b935f68</feedburner:origLink></item>
    <item>
      <title>The Broiled Laptop And My Lack of Recent Posts</title>
      <description>&lt;div style="margin: 5px 15px 5px 5px; float: left"&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=laptop-fire.jpg" alt="Flaming Laptop" title="Flaming Laptop" /&gt;
&lt;p style="font-size: 8px; text-align: center"&gt;
&lt;em&gt;Note: This is not my real laptop.&lt;/em&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
I just wanted to give a quick update explaining the lack of posts here for the past couple of weeks.&amp;nbsp; Basically my trusty &lt;a href="http://h10025.www1.hp.com/ewfrf/wc/product?product=3208700&amp;amp;lc=en&amp;amp;cc=ca&amp;amp;dlc=en&amp;amp;submit.y=0&amp;amp;submit.x=0&amp;amp;lang=en&amp;amp;cc=ca"&gt;Compaq V3030CA&lt;/a&gt; laptop bit the dust about a week and a half ago, after a series of increasingly serious problems finally took their toll.&amp;nbsp; After a bit of research, I discovered that there were several lines of HP and Compaq laptops that had an issue with the default BIOS, and HP was offering a &lt;a href="http://h10025.www1.hp.com/ewfrf/wc/document?docname=c01087277&amp;amp;lc=en&amp;amp;cc=ca&amp;amp;dlc=en&amp;amp;product=3208700&amp;amp;lang=en#"&gt;&amp;quot;Limited Warranty Service Enhancement&amp;quot;&lt;/a&gt; that essentially offers an extension of the manufacturers warranty if you:
&lt;/p&gt;
&lt;h3&gt;A) Have laptop that is a member of one of the following HP/Compaq series of laptops:
&lt;/h3&gt;
&lt;table border="0" width="276" height="237"&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;td align="center"&gt;
			&lt;h4&gt;HP&lt;/h4&gt;&lt;/td&gt;
			&lt;td align="center"&gt;
			&lt;h4&gt;Compaq&lt;/h4&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;ul&gt;
				&lt;li&gt;dv20xx&lt;/li&gt;
				&lt;li&gt;dv21xx&lt;/li&gt;
				&lt;li&gt;dv22xx&lt;/li&gt;
				&lt;li&gt;dv23xx&lt;/li&gt;
				&lt;li&gt;dv24xx&lt;/li&gt;
				&lt;li&gt;dv60xx&lt;/li&gt;
				&lt;li&gt;dv61xx&lt;/li&gt;
				&lt;li&gt;dv62xx&lt;/li&gt;
				&lt;li&gt;dv63xx&lt;/li&gt;
				&lt;li&gt;dv64xx&lt;/li&gt;
				&lt;li&gt;dv90xx&lt;/li&gt;
				&lt;li&gt;dv92xx&lt;/li&gt;
				&lt;li&gt;dv93xx&lt;/li&gt;
				&lt;li&gt;dv94xx&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td align="left" valign="top"&gt;
			&lt;ul&gt;
				&lt;li&gt;v30xx&lt;/li&gt;
				&lt;li&gt;v31xx&lt;/li&gt;
				&lt;li&gt;v32xx&lt;/li&gt;
				&lt;li&gt;v33xx&lt;/li&gt;
				&lt;li&gt;v34xx&lt;/li&gt;
				&lt;li&gt;v60xx&lt;/li&gt;
				&lt;li&gt;v61xx&lt;/li&gt;
				&lt;li&gt;v62xx&lt;/li&gt;
				&lt;li&gt;v63xx&lt;/li&gt;
				&lt;li&gt;v64xx&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;B) Are experiencing wireless problems and/or display problems.&lt;/h3&gt;
&lt;p&gt;
In my case, I had the pleasure of experiencing the wireless problems for some time (though I chalked it up to my router rather than my notebook) before I started getting random lockups and eventually extremely distorted video that would be immediately followed by my system locking up.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;The Root Cause&lt;/h3&gt;
&lt;p&gt;
&amp;nbsp;It turns out that the default BIOS for these particular laptops were configured to turn on the case fan when the processer (an AMD Turion x64 in my case) reached a temperature of 55&amp;deg; Celsius; a perfectly acceptable temperature for that chip.&amp;nbsp; Unfortunately the rest of the components in these laptops depended on that fan for cooling, and by the time the Turion chip reached 55&amp;deg; (which takes a while because the chip runs quite cool) the rest of the components in the machine were literally cooking themselves into premature failure.
&lt;/p&gt;
&lt;p&gt;
So my machine is off at HP getting repaired free-of-charge, so if you are experiencing the same problems and have one of the laptops listed above, by all means contact HP and they will take care of everything (shipping, repairs) completely free of charge.&amp;nbsp;&amp;nbsp; I&amp;#39;m expecting my machine back in about a week or so, at which time I&amp;#39;ll get back to a more regular posting schedule.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=RgyU-wpCraE:07pNA7fxIE4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=RgyU-wpCraE:07pNA7fxIE4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=RgyU-wpCraE:07pNA7fxIE4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=RgyU-wpCraE:07pNA7fxIE4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=RgyU-wpCraE:07pNA7fxIE4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=RgyU-wpCraE:07pNA7fxIE4:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=RgyU-wpCraE:07pNA7fxIE4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=RgyU-wpCraE:07pNA7fxIE4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=RgyU-wpCraE:07pNA7fxIE4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/RgyU-wpCraE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/RgyU-wpCraE/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/04/19/The-Broiled-Laptop-And-My-Lack-of-Recent-Posts.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=4ac66e61-4e11-4a62-ab9a-9c939b4d0af9</guid>
      <pubDate>Sat, 19 Apr 2008 10:41:00 -0800</pubDate>
      <category>General</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=4ac66e61-4e11-4a62-ab9a-9c939b4d0af9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=4ac66e61-4e11-4a62-ab9a-9c939b4d0af9</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/04/19/The-Broiled-Laptop-And-My-Lack-of-Recent-Posts.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=4ac66e61-4e11-4a62-ab9a-9c939b4d0af9</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=4ac66e61-4e11-4a62-ab9a-9c939b4d0af9</feedburner:origLink></item>
    <item>
      <title>IIS 7 Site Won't Start After Upgrading to Vista Service Pack 1</title>
      <description>&lt;p&gt;After letting Service Pack 1 install overnight, I logged in to my machine this morning looking forward to exploring some of the new features added to IIS 7.0.&amp;nbsp; Unfortunately there was a small problem with one of the local web applications that I host from my machine.&amp;nbsp; Simply put, the application refused to start in IIS, and each attempt to start it resulted in a modal pop-up informing me that the process was in use.&amp;nbsp; I quick peek at the error log showed the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/iis1.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="iis1" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/iis1_thumb.jpg" width="556" height="36"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/iis2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="iis2" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/iis2_thumb.jpg" width="559" height="231"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/iis3_1.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="iis3" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/iis3_thumb_1.jpg" width="559" height="240"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;After I quick search I found &lt;a href="http://support.microsoft.com/kb/890015"&gt;a KB article&lt;/a&gt; over at Microsoft that addressed the problem.&amp;nbsp; As directed by the article, I popped open the command prompt and ran &lt;strong&gt;netstat -ano &lt;/strong&gt;to get a list of what processes were listing for net traffic on what port.&amp;nbsp; First entry on the list identified the problem process.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/IIS7SiteWontStartAfterUpgradingtoVistaSe_7D5E/image_thumb.png" width="556" height="58"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;(The screencap was taken after the problem was fixed, so the PID is not the same).&amp;nbsp; I opened up the task manager to find out what process was at fault, and it turned out that Skype was listening for incoming traffic on port 80 for some silly reason.&amp;nbsp; I closed up Skype and attempted to start the website and lo-and-behold, it worked.&amp;nbsp; I started Skype again, and everything was working like normal again.&lt;/p&gt; &lt;p&gt;I thought this may be of use to anyone who encounters a similar problem.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=FlyA1_nFcCU:GoXRJIIL5FM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=FlyA1_nFcCU:GoXRJIIL5FM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=FlyA1_nFcCU:GoXRJIIL5FM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=FlyA1_nFcCU:GoXRJIIL5FM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=FlyA1_nFcCU:GoXRJIIL5FM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=FlyA1_nFcCU:GoXRJIIL5FM:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=FlyA1_nFcCU:GoXRJIIL5FM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=FlyA1_nFcCU:GoXRJIIL5FM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=FlyA1_nFcCU:GoXRJIIL5FM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/FlyA1_nFcCU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/FlyA1_nFcCU/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/03/25/iis7-site-does-not-start-after-upgrading-to-vista-service-pack-1.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=aa31bfd0-9a6e-4320-9c16-12b7b5772bba</guid>
      <pubDate>Tue, 25 Mar 2008 09:08:09 -0800</pubDate>
      <category>ASP.NET</category>
      <category>Microsoft</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=aa31bfd0-9a6e-4320-9c16-12b7b5772bba</pingback:target>
      <slash:comments>19</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=aa31bfd0-9a6e-4320-9c16-12b7b5772bba</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/03/25/iis7-site-does-not-start-after-upgrading-to-vista-service-pack-1.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=aa31bfd0-9a6e-4320-9c16-12b7b5772bba</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=aa31bfd0-9a6e-4320-9c16-12b7b5772bba</feedburner:origLink></item>
    <item>
      <title>Internet Explorer 8 Beta 1: First Impressions</title>
      <description>&lt;p&gt;
Since the IE development team releasing the &lt;a href="http://blogs.msdn.com/ie/archive/2008/03/05/internet-explorer-8-beta-1-for-developers-now-available.aspx"&gt;first beta version of Internet Explorer 8&lt;/a&gt; for developers last week, I&amp;#39;ve had the chance to play around with this latest incarnation of the Internet Explorer family.&amp;nbsp; While most of the focus has been on the &lt;a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx"&gt;improved support for web standards&lt;/a&gt;, which is immediately evident even in this early beta, there are many more new features and enhancements that are making IE8 look like its shaping up into a solid browser.
&lt;/p&gt;
  
&lt;h3&gt;1) The Acid2 Test&lt;/h3&gt; 
&lt;p&gt;
First off, I&amp;#39;ll confirm that &lt;em&gt;yes, &lt;/em&gt;IE8 does pass the &lt;a href="http://www.webstandards.org/files/acid2/test.html"&gt;Acid2 test&lt;/a&gt;.
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-9.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-9_thumb.jpg" border="0" alt="ie8-9" width="287" height="332" /&gt;&lt;/a&gt; 
&lt;/p&gt;
  
&lt;h3&gt;2) Loosely-Coupled IE (LSIE)&lt;/h3&gt; 
&lt;p&gt;
How many times have we all come across this classic?
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-1_1.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-1_thumb_1.jpg" border="0" alt="ie8-1" width="316" height="159" /&gt;&lt;/a&gt; 
&lt;/p&gt;
 
&lt;p&gt;
Nothing was quite as annoying as having multiple tabs/browsers open and having an error on one page, or with a plugin, cause &lt;em&gt;all of them&lt;/em&gt; to crash.&amp;nbsp; The IE development team has addressed this with a collection of internal architecture changes called &lt;a href="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx"&gt;Loosely-Coupled IE&lt;/a&gt;.&amp;nbsp; In a nutshell, what LSIE means is that the browser frame (everything other than the tabs) and the browser tabs are now located in separate processes, so if you visit a website that disagrees with one of your plugins, it doesn&amp;#39;t result in IE completely crashing out.&amp;nbsp; Rather, you will see the classic &amp;quot;Internet Explorer has stopped working&amp;quot; window:
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-2.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-2_thumb.jpg" border="0" alt="ie8-2" width="316" height="163" /&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
 
&lt;p&gt;
Which is now followed with the problem &lt;em&gt;tab&lt;/em&gt; being recovered, rather than the entire browser:
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-3.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-3_thumb.jpg" border="0" alt="ie8-3" width="437" height="74" /&gt;&lt;/a&gt; 
&lt;/p&gt;
 
&lt;h3&gt;3) Session Recovery&lt;/h3&gt; 
&lt;p&gt;
IE8 also offers a new session recovery option for those instances where you have an &amp;quot;unexpected&amp;quot; end to a session.
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-4.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-4_thumb.jpg" border="0" alt="ie8-4" width="244" height="167" /&gt;&lt;/a&gt; 
&lt;/p&gt;
 
&lt;h3&gt;4) Domain Highlighting&lt;/h3&gt; 
&lt;p&gt;
A new feature of the address bar now highlights what IE considers the &amp;quot;owning domain&amp;quot; of the site you are currently viewing.&amp;nbsp; At first it may appear strange, and somewhat unnecessary, but when you consider situations where unscrupulous webmasters try using subdomains to fool the user into thinking they are at a site they are not (such as &lt;em&gt;www.domain.com.path.&lt;strong&gt;realdomain.com&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;&lt;em&gt;) &lt;/em&gt;&lt;/strong&gt;this feature becomes a subtle, but useful visual cue to quickly draw your attention to the true domain of the site you are browsing.
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-5.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-5_thumb.jpg" border="0" alt="ie8-5" width="444" height="55" /&gt;&lt;/a&gt; 
&lt;/p&gt;
  
&lt;h3&gt;5) IE8 Developer Tools&lt;/h3&gt; 
&lt;p&gt;
A nice addition for web developers is the built in IE8 Developer Tools, which is the successor to the IE developer toolbar.&amp;nbsp; It features some nice upgrades from the developer toolbar, such as the ability to changes rendering modes on-the-fly.
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-6.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-6_thumb.jpg" border="0" alt="ie8-6" width="531" height="129" /&gt;&lt;/a&gt; 
&lt;/p&gt;
 
&lt;p&gt;
A beefed up style-trace, which breaks down each style being applied to a selected element (showing you what specific element the definition is inherited from, and which stylesheet the definition is located in), and allows you to toggle the application of specific style definitions.
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-7.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-7_thumb.jpg" border="0" alt="ie8-7" width="538" height="116" /&gt;&lt;/a&gt; 
&lt;/p&gt;
 
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-8.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-8_thumb.jpg" border="0" alt="ie8-8" width="540" height="136" /&gt;&lt;/a&gt; 
&lt;/p&gt;
 
&lt;p&gt;
Unfortunately the developer tools are not as comprehensive as the phenomenal Firefox add-in &lt;a href="http://www.colincochrane.com/admin/Pages/www.getfirebug.com/"&gt;Firebug&lt;/a&gt;, but are still a big step in the right direction, and provides the functionality needed to take most style-based issues with a web page.
&lt;/p&gt;
 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
 
&lt;p&gt;
The IE8 beta is quite stable, so I encourage you to &lt;a href="http://blogs.msdn.com/ie/archive/2008/03/05/internet-explorer-8-beta-1-for-developers-now-available.aspx"&gt;give it a try&lt;/a&gt; and see what you think.&amp;nbsp; I&amp;#39;ll be posting more impressions as I continue using the beta, but I&amp;#39;d love to hear some more opinions on it, so please feel free to share your experiences and impressions in the comments section.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=92iUcbF7Poc:kCVYRStCzkU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=92iUcbF7Poc:kCVYRStCzkU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=92iUcbF7Poc:kCVYRStCzkU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=92iUcbF7Poc:kCVYRStCzkU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=92iUcbF7Poc:kCVYRStCzkU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=92iUcbF7Poc:kCVYRStCzkU:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=92iUcbF7Poc:kCVYRStCzkU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=92iUcbF7Poc:kCVYRStCzkU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=92iUcbF7Poc:kCVYRStCzkU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/92iUcbF7Poc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/92iUcbF7Poc/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/03/12/internet-explorer-8-beta-1-first-impressions.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=387e47b1-042d-4aed-b7c6-061e394f431f</guid>
      <pubDate>Wed, 12 Mar 2008 20:54:00 -0800</pubDate>
      <category>Internet Explorer</category>
      <category>Microsoft</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=387e47b1-042d-4aed-b7c6-061e394f431f</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=387e47b1-042d-4aed-b7c6-061e394f431f</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/03/12/internet-explorer-8-beta-1-first-impressions.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=387e47b1-042d-4aed-b7c6-061e394f431f</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=387e47b1-042d-4aed-b7c6-061e394f431f</feedburner:origLink></item>
    <item>
      <title>.NET Code Tips: Converting A UNIX Timestamp To System.DateTime</title>
      <description>&lt;p&gt;
After having to deal with UNIX timestamps in an application I am currently developing, I realized that there&amp;#39;s probably a few people out there who are wondering how to convert a UNIX timestamp into a useable System.DateTime in a .NET application.&amp;nbsp; 
&lt;/p&gt;
 
&lt;p&gt;
Well the good news is that it&amp;#39;s quite simple.&amp;nbsp; All a UNIX timestamp represents is the number of seconds since January 1st, 1970 12:00:00 AM.&amp;nbsp; So all we have to do is create a new System.DateTime structure, set it to 1/1/1970 12:00:00 AM, and use the AddSeconds() methods to tack on the timestamp.
&lt;/p&gt;
  
&lt;h3&gt;Visual Basic:&lt;/h3&gt; 
&lt;div&gt;
 
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; ConvertTimestamp(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; timestamp &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Double&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; DateTime
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(timestamp)
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Function
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;C#:&lt;/h3&gt;
&lt;div&gt;
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; DateTime ConvertTimestamp(&lt;span style="color: #0000ff"&gt;double&lt;/span&gt; timestamp)
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(timestamp);
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; }
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Keep in mind that this method will return the time as Coordinated Univeral Time (UTC), so if you want to convert the value to local time you can simply modify the procedure as follows:
&lt;/p&gt;
&lt;h3&gt;Visual Basic:&lt;/h3&gt;
&lt;div&gt;
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; ConvertTimestamp(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; timestamp &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Double&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; DateTime
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(timestamp).ToLocalTime()
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Function
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;C#:&lt;/h3&gt;
&lt;div&gt;
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; DateTime ConvertTimestamp(&lt;span style="color: #0000ff"&gt;double&lt;/span&gt; timestamp)
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(timestamp).ToLocalTime();
&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; }
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
It&amp;#39;s that easy to turn a UNIX timestamp into a .NET System.DateTime object.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Happy coding!
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=BLsZAW2OsC8:5Rd-lOKAmw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=BLsZAW2OsC8:5Rd-lOKAmw8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=BLsZAW2OsC8:5Rd-lOKAmw8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=BLsZAW2OsC8:5Rd-lOKAmw8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=BLsZAW2OsC8:5Rd-lOKAmw8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=BLsZAW2OsC8:5Rd-lOKAmw8:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=BLsZAW2OsC8:5Rd-lOKAmw8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=BLsZAW2OsC8:5Rd-lOKAmw8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=BLsZAW2OsC8:5Rd-lOKAmw8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/BLsZAW2OsC8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/BLsZAW2OsC8/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/03/07/converting-a-unix-timestamp-to-system-datetime.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=143e7279-5c20-4b6c-8b93-288f28907bca</guid>
      <pubDate>Fri, 07 Mar 2008 19:58:00 -0800</pubDate>
      <category>Visual Basic</category>
      <category>Code Tips</category>
      <category>C#</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=143e7279-5c20-4b6c-8b93-288f28907bca</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=143e7279-5c20-4b6c-8b93-288f28907bca</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/03/07/converting-a-unix-timestamp-to-system-datetime.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=143e7279-5c20-4b6c-8b93-288f28907bca</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=143e7279-5c20-4b6c-8b93-288f28907bca</feedburner:origLink></item>
    <item>
      <title>The Worlds Most Appropriate Image Alt Attribute</title>
      <description>&lt;p&gt;
As all good web developers know, accessibility is a very important consideration with an ever increasing proportion of the population that is old and decrepit. One of the more important accessibility features is the image alt attribute that is used to describe an image for visually impaired users. It&amp;#39;s always nice to find a site that has accessbility in mind by providing good descriptions of an image within the alt attribute text. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;This particular example has got to be the best I have ever come across, and is an inspired choice of descriptive text that makes it clear to the elderly user what shenanigans are going on within the picture.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=incest-alt-attribute-small.jpg" alt="You didn't think I could top that did you?" title="You didn't think I could top that did you?" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This interesting commentary on modern family life within the UK can be found here, &lt;a href="http://www.dailymail.co.uk/pages/live/femail/article.html?in_article_id=514809&amp;amp;in_page_id=1879" title="Incest article"&gt;http://www.dailymail.co.uk/pages/live/femail/article.html?in_article_id=514809&amp;amp;in_page_id=1879. &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Note, unfortunately the alt text has been changed since this screenshot was taken. The good SEO strategy of a related high value keyword in the picture filename remains, however. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=TNA0rS-gj50:HJMdMcCNWqk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=TNA0rS-gj50:HJMdMcCNWqk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=TNA0rS-gj50:HJMdMcCNWqk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=TNA0rS-gj50:HJMdMcCNWqk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=TNA0rS-gj50:HJMdMcCNWqk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=TNA0rS-gj50:HJMdMcCNWqk:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=TNA0rS-gj50:HJMdMcCNWqk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=TNA0rS-gj50:HJMdMcCNWqk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=TNA0rS-gj50:HJMdMcCNWqk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/TNA0rS-gj50" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/TNA0rS-gj50/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Alex Hlinski)</author>
      <comments>http://www.colincochrane.com/post/2008/02/18/The-Worlds-Most-Appropriate-Image-Alt-Attribute.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=5cc8564d-1c29-4875-ac3f-fe8426ead688</guid>
      <pubDate>Mon, 18 Feb 2008 18:33:00 -0800</pubDate>
      <category>Web Design</category>
      <dc:publisher>Alex Hlinski</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=5cc8564d-1c29-4875-ac3f-fe8426ead688</pingback:target>
      <slash:comments>20</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=5cc8564d-1c29-4875-ac3f-fe8426ead688</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/02/18/The-Worlds-Most-Appropriate-Image-Alt-Attribute.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=5cc8564d-1c29-4875-ac3f-fe8426ead688</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=5cc8564d-1c29-4875-ac3f-fe8426ead688</feedburner:origLink></item>
    <item>
      <title>del.icio.us Bans Search Engine Spiders</title>
      <description>&lt;p&gt;
It appears that within the past 2-3 days the popular social book-marking site &lt;a href="http://del.icio.us"&gt;del.icio.us&lt;/a&gt; has started blocking the major search engine spiders from crawling their site.&amp;nbsp; This isn&amp;#39;t a simple robots.txt exclusion, but rather a 404 response that is now being served based on the requesting User-Agent.
&lt;/p&gt;
&lt;p&gt;
While I was doing some Photoshop work for a site of mine tonight I needed to grab some custom shapes to use to make some icons.&amp;nbsp; I recalled having bookmarked a good resource for custom shapes in del.icio.us, but after searching my bookmarks using my del.icio.us add-in for Firefix, I couldn&amp;#39;t find it, so I pulled up my browser and went to my profile page on del.icio.us to do a search.&amp;nbsp; To my surprise, I was greeted with this:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/delicious404.jpg"&gt;&lt;img style="border-width: 0px" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/delicious404_thumb.jpg" border="0" alt="del.icio.us 404 Errors" width="479" height="253" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/useragentmenu.jpg"&gt;&lt;img style="border-width: 0px; margin: 0px 0px 0px 15px" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/useragentmenu_thumb.jpg" border="0" alt="User Agent set to Googlebot" width="195" height="506" align="right" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
After confirming I hadn&amp;#39;t mistyped the URL, I checked out the del.icio.us homepage and found that all was fine there.&amp;nbsp; However, upon trying to perform a search, I was confronted with the same 404 error, and received the same response when trying to navigate to any page other than the homepage.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
At this point I was thinking that there might have been some server issues going on with del.icio.us, but that didn&amp;#39;t line up with my Firefox add-in still showing my bookmarks.&amp;nbsp; I then noticed that my User-Agent switcher add-in was active (not sending the default User-Agent header), and remembered that I had set it to switch my User-Agent to Googlebot earlier because I was checking another site earlier today to see if it was cloaking (it was).&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I reset the User-Agent switcher so it was sending my normal User-Agent header and tried accessing my del.icio.us page again and I was surprised to see that it was no longer responding with a 404 error.&amp;nbsp; Puzzled by this, I took a look at del.icio.us&amp;#39; robots.txt and found that it was disallowing Googlebot, Slurp, Teoma, and msnbot for the following:
&lt;/p&gt;
&lt;pre&gt;
Disallow: /inbox
Disallow: /subscriptions
Disallow: /network
Disallow: /search
Disallow: /post
Disallow: /login
Disallow: /rss
&lt;/pre&gt;
&lt;p&gt;
Seeing that the robots.txt was blocking these search engine spiders, I tried accessing del.icio.us with my User-Agent switcher set to each of the disallowed User-Agents and received the same 404 response for each one.&amp;nbsp; I thought that there might have been some obscure issue with the add-in that was leading to this behaviour, so I popped open Fiddler, a nifty HTTP debugging proxy that I use to sniff HTTP headers.&amp;nbsp; Fiddler has a convenient feature that allows you to create HTTP requests manually, so I created a simple set of request headers and made HEAD and GET requests using the different User-Agents listed in the robots.txt.&amp;nbsp; I received the same responses as before.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/deliciousheadrequest_3.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/deliciousheadrequest_thumb_3.jpg" border="0" alt="HEAD Request using Googlebot User-Agent" width="510" height="326" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
My interest was definitely piqued at this point.&amp;nbsp; I ran a site command against del.icio.us in Google restricted to the past 24 hours and found results as fresh as 15 hours old.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/deliciousgoogleresult_1.jpg"&gt;&lt;img style="border: 0px none " src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/del.icio.usBansSearchEngineSpiders_12270/deliciousgoogleresult_thumb_1.jpg" border="0" alt="Recent Google Search Results for a site command ran against del.icio.us" width="641" height="330" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Running a normal site command on del.icio.us revealed numerous results that Google had a cached version of, many of which were as fresh as only three days ago.
&lt;/p&gt;
&lt;p&gt;
This evidence seems to be indicating that del.icio.us has recently started blocking the major search engine spiders from crawling their site, by way of the requesting User-Agent.&amp;nbsp; Given the recent crawl dates and cache dates, it looks like this started happening within the past 2-3 days.&amp;nbsp; This raises some questions as to the intentions of del.icio.us, and perhaps Yahoo!&amp;nbsp; With Yahoo! recently integrating del.icio.us bookmarks into its search results this could an attempt to enhance the effectiveness of that new feature by preventing competing search engines from indexing content from del.icio.us.&amp;nbsp; While Yahoo!&amp;#39;s Slurp bot is also blocked, it&amp;#39;s unlikely that Yahoo! would need to crawl the content of one of its own sites, as Yahoo! actually owns del.icio.us. 
&lt;/p&gt;
&lt;p&gt;
What are your thoughts on this?
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=IvpBRx8KZTI:HAI--hmeUfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=IvpBRx8KZTI:HAI--hmeUfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=IvpBRx8KZTI:HAI--hmeUfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=IvpBRx8KZTI:HAI--hmeUfs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=IvpBRx8KZTI:HAI--hmeUfs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=IvpBRx8KZTI:HAI--hmeUfs:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=IvpBRx8KZTI:HAI--hmeUfs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=IvpBRx8KZTI:HAI--hmeUfs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=IvpBRx8KZTI:HAI--hmeUfs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/IvpBRx8KZTI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/IvpBRx8KZTI/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/02/16/delicious-bans-search-engine-spiders.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=86f7246c-2712-46a9-a069-983eebe01d1e</guid>
      <pubDate>Sat, 16 Feb 2008 22:06:00 -0800</pubDate>
      <category>Search</category>
      <category>Yahoo</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=86f7246c-2712-46a9-a069-983eebe01d1e</pingback:target>
      <slash:comments>28</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=86f7246c-2712-46a9-a069-983eebe01d1e</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/02/16/delicious-bans-search-engine-spiders.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=86f7246c-2712-46a9-a069-983eebe01d1e</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=86f7246c-2712-46a9-a069-983eebe01d1e</feedburner:origLink></item>
    <item>
      <title>ASP.NET Custom Errors: Preventing 302 Redirects To Custom Error Pages</title>
      <description>&lt;div class="csharpcode"&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="csharpcode"&gt;&lt;em&gt;You can download the HttpModule &lt;/em&gt;&lt;a href="http://www.colincochrane.com/file.axd?file=ColinCochrane.HttpErrorModule.dll"&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt; &lt;/div&gt; &lt;div class="csharpcode"&gt;&amp;nbsp; &lt;/div&gt; &lt;div class="csharpcode"&gt;Defining custom error pages is a convenient way to show users a friendly page when they encounter an HTTP error such as a 404 Not Found, or a 500 Server Error.&amp;nbsp; Unfortunately ASP.NET handles custom error pages by responding with a 302 Temporary redirect to the error page that was defined. For example, consider an example application that has IIS configured to map all requests to it, and has the following customErrors element defined in its web.config: &lt;/div&gt; &lt;div class="csharpcode"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="csharpcode"&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;customErrors&lt;/span&gt; &lt;span style="color: #ff0000"&gt;mode&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="RemoteOnly"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="~/error.aspx"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;error&lt;/span&gt; &lt;span style="color: #ff0000"&gt;statusCode&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="404"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;redirect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="~/404.aspx"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;customError&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If a user requested a page that didn't exist, then the HTTP response would look something like: &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;http://www.domain.com/non-existant-page.aspx --&amp;gt; 302 Found
http://www.domain.com/404.aspx  --&amp;gt; 404 Not Found
Date: Sat, 26 Jan 2008 03:08:21 GMT
Server: Microsoft-IIS/6.0
Content-Length: 24753
Content-Type: text/html; charset=utf-8
X-Powered-By: ASP.NET
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;As you can see, there is a 302 redirect that occurs to send the user to the custom error page.&amp;nbsp; This is not ideal for two reasons:&lt;/font&gt; &lt;/div&gt;
&lt;p&gt;1) It's bad for SEO &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When a search engine spiders crawls your site and comes across a page that doesn't exist, you want to make sure you respond with an HTTP status of 404 and send it on its way.&amp;nbsp; Otherwise you may end up with duplicate content issues or indexing problems, depending on the spider and search engine. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;2) It can lead to more incorrect HTTP status responses &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This ties in with the first point, but can be significantly more serious.&amp;nbsp; If the custom error page is not configured to response with the correct status code then the HTTP response could end up looking like: &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;http://www.domain.com/non-existant-page.aspx --&amp;gt; 302 Found
http://www.domain.com/404.aspx  --&amp;gt; 200 OK
Date: Sat, 26 Jan 2008 03:08:21 GMT
Server: Microsoft-IIS/6.0
Content-Length: 24753
Content-Type: text/html; charset=utf-8
X-Powered-By: ASP.NET
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Which would almost guarantee that there would be duplicate content issues for the site with the search engines, as the search spiders are simply going to assume that the error page is a normal page, like any other.Furthermore it will probably cause some website and server administration headaches, as HTTP errors won't be accurately logged, making them harder to track and identify. &lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;I tried to find a solution to this problem, but I didn't have any luck finding anything, other than people who were also looking for a way to get around it.&amp;nbsp; So I did what I usually do, and created my own solution. &lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;/div&gt;
&lt;div&gt;The solution comes in the form of a small HTTP module that hooks onto the HttpContext.Error event.&amp;nbsp; When an error occurs, the module checks if the error's type is an HttpException.&amp;nbsp; If the error is an HttpException, then the following process takes place: &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;The response headers are cleared (context.Response.ClearHeaders() ) &lt;/li&gt;
&lt;li&gt;The response status code is set to match the actual HttpException.GetHttpCode() value (context.Response.StatusCode = HttpException.GetHttpCode()) &lt;/li&gt;
&lt;li&gt;The customErrorsSection from the web.config is checked to see if the HTTP status code (HttpException.GetHttpCode() ) is defined. &lt;/li&gt;
&lt;li&gt;If the statusCode is defined in the customErrorsSection then the request is transferred, server-side, to the custom error page. (context.Server.Transfer(customErrorsCollection.&lt;span class="kwrd"&gt;Get&lt;/span&gt;(statusCode.ToString).Redirect) ) &lt;/li&gt;
&lt;li&gt;If the statusCode is not defined in the customErrorsSection, then the response is flushed, immediately sending the response to the client.(context.Response.Flush() )&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Here is the source code for the module. &lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;div&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.Configuration&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; HttpErrorModule&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;Implements&lt;/span&gt; IHttpModule&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Dispose() &lt;span style="color: #0000ff"&gt;Implements&lt;/span&gt; System.Web.IHttpModule.Dispose&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     &lt;span style="color: #008000"&gt;'Nothing to dispose.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Init(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; context &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.Web.HttpApplication) &lt;span style="color: #0000ff"&gt;Implements&lt;/span&gt; System.Web.IHttpModule.Init&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;AddHandler&lt;/span&gt; context.&lt;span style="color: #0000ff"&gt;Error&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; EventHandler(&lt;span style="color: #0000ff"&gt;AddressOf&lt;/span&gt; Context_Error)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Context_Error(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EventArgs)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; context &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; HttpContext = &lt;span style="color: #0000ff"&gt;CType&lt;/span&gt;(sender, HttpApplication).Context&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; (context.&lt;span style="color: #0000ff"&gt;Error&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;GetType&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Is&lt;/span&gt; &lt;span style="color: #0000ff"&gt;GetType&lt;/span&gt;(HttpException)) &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;       &lt;span style="color: #008000"&gt;' Get the Web application configuration.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; configuration &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration(&lt;span style="color: #006080"&gt;"~/web.config"&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;       &lt;span style="color: #008000"&gt;' Get the section.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; customErrorsSection &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; CustomErrorsSection = &lt;span style="color: #0000ff"&gt;CType&lt;/span&gt;(configuration.GetSection(&lt;span style="color: #006080"&gt;"system.web/customErrors"&lt;/span&gt;), CustomErrorsSection)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;       &lt;span style="color: #008000"&gt;' Get the collection&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; customErrorsCollection &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; CustomErrorCollection = customErrorsSection.Errors&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; statusCode &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Integer&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;CType&lt;/span&gt;(context.&lt;span style="color: #0000ff"&gt;Error&lt;/span&gt;, HttpException).GetHttpCode&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;       &lt;span style="color: #008000"&gt;'Clears existing response headers and sets the desired ones.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;       context.Response.ClearHeaders()&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;       context.Response.StatusCode = statusCode&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; (customErrorsCollection.Item(statusCode.ToString) IsNot &lt;span style="color: #0000ff"&gt;Nothing&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;         context.Server.Transfer(customErrorsCollection.&lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;(statusCode.ToString).Redirect)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;Else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;         context.Response.Flush()&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  36:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  37:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  38:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  39:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  40:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  41:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  42:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End Class&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The following element also needs to be added to the httpModules element in your web.config (replace the attribute values if you aren't using the &lt;a href="http://www.colincochrane.com/file.axd?file=ColinCochrane.HttpErrorModule.dll"&gt;downloaded binary&lt;/a&gt;): &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;httpModules&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="HttpErrorModule"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ColinCochrane.HttpErrorModule, ColinCochrane"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;httpModules&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And there you go! No more 302 redirects to your custom error pages. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=CcNiephqWtg:JGu-kW7pyxE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=CcNiephqWtg:JGu-kW7pyxE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=CcNiephqWtg:JGu-kW7pyxE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=CcNiephqWtg:JGu-kW7pyxE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=CcNiephqWtg:JGu-kW7pyxE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=CcNiephqWtg:JGu-kW7pyxE:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=CcNiephqWtg:JGu-kW7pyxE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=CcNiephqWtg:JGu-kW7pyxE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=CcNiephqWtg:JGu-kW7pyxE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/CcNiephqWtg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/CcNiephqWtg/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/01/25/ASP-NET-Custom-Errors-Preventing-302-Redirects-To-Custom-Error-Pages.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=ae4e8d9f-de74-442c-bb79-719654e5fb3d</guid>
      <pubDate>Fri, 25 Jan 2008 21:53:42 -0800</pubDate>
      <category>ASP.NET</category>
      <category>SEO</category>
      <category>Web Development</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=ae4e8d9f-de74-442c-bb79-719654e5fb3d</pingback:target>
      <slash:comments>50</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=ae4e8d9f-de74-442c-bb79-719654e5fb3d</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/01/25/ASP-NET-Custom-Errors-Preventing-302-Redirects-To-Custom-Error-Pages.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=ae4e8d9f-de74-442c-bb79-719654e5fb3d</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=ae4e8d9f-de74-442c-bb79-719654e5fb3d</feedburner:origLink></item>
    <item>
      <title>Web Standards: The Ideal And The Reality</title>
      <description>&lt;p&gt;There has been a flurry of reactions to the &lt;a href="http://blogs.msdn.com/ie/archive/2008/01/21/compatibility-and-ie8.aspx"&gt;IE8 development team's recent announcement&lt;/a&gt; about the new version-targeting meta declaration that will be introduced in Internet Explorer 8. In an article I posted on the Metamend SEO Blog yesterday, I looked at how this feature could bring &lt;a href="http://www.metamend.com/blog/2008/01/22/ie8-and-web-standards-new-meta-tag-to-target-browser-versions/"&gt;IE8 and Web Standards&lt;/a&gt; a lot closer together and find the ideal balance between backwards-compatibility and interoperability.&amp;nbsp; Many, however, did not share my optimism and saw this as another cop-out by Microsoft that would continue to hold back the web standards movement.&amp;nbsp; Being that this is a topic that involves both Internet Explorer/Microsoft and web standards I naturally came across a lot of heated discussion.&amp;nbsp; As I read more and more of this discussion I was once again reminded about how so many people take such an unreasonably hard stance on the issue of web standards and browser support.&amp;nbsp; When it comes to a topic as complex as web standards and interoperability it is crucial that one considers all factors, both theoretical and practical, otherwise the discussion will inevitably end up taking a "your with us or against us" mentality, that does little to benefit anyone.&lt;/p&gt; &lt;h3&gt;The Ideal&lt;/h3&gt; &lt;p&gt;Web standards are intended to bring consistency to the Web.&amp;nbsp; The ultimate ideal is a completely interoperable web, independent of platform or agent.&amp;nbsp; The more realistic ideal is a set of rules for the creation of content that, if followed, would ensure consistent presentation regardless of the client's browser&amp;nbsp;&amp;nbsp; This would allow web developers who followed these rules to be safe in the knowledge that their content would be presented as they intended for all visitors.&lt;/p&gt; &lt;h3&gt;The Reality&lt;/h3&gt; &lt;p&gt;Web standards are attempting to bring consistency to what is a enormously complex and vast collection of mostly inconsistent data.&amp;nbsp; Even with more web pages being created that are built on web standards, there is still, and will always be, a subset of this collection that is non-standard.&amp;nbsp; There will never be an entirely interoperable web, nor would anyone reasonable expect there to be.&amp;nbsp; The reasonable expectation is that web standards are adopted by those who develop new content, or modify existing content, and that major web browsers will be truly standards-compliant in its presentation, so that web developers need not to worry about cross-browser compatibility.&lt;/p&gt; &lt;p&gt;One aspect that is often forgotten is the average internet user.&amp;nbsp; They don't care about standards, DOCTYPES or W3C recommendations.&amp;nbsp; All they care about is being able to visit a web site and have it display correctly, as they should.&amp;nbsp; This is what puts the browser developers in a bind, because the browser business is &lt;em&gt;competitive &lt;/em&gt;and its hard to increase your user base if most pages on the web break when viewed with your product.&amp;nbsp; A degree of backwards-compatibility is absolutely essential, and denying that is simply ignorant.&amp;nbsp; This leads to something of a catch-22, however, because on the other side of the coin are the website owners who may not have the resources (be it time or money), or simply lack the desire, to redevelop their sites.&amp;nbsp;&amp;nbsp; They are unlikely to make a substantial investment to bring their sites up to code for the sole reason of standards-compliance unless there is a benefit in doing so, or a harm in not doing so.&amp;nbsp; While the more vigorous supporters web standards&amp;nbsp; may wag their fingers at Microsoft for spending time worrying about backwards compatibility, you can be sure that if businesses were suddenly forced to spend tens of thousands of dollars to make their sites work in IE, Microsoft would be on the receiving end of a lot more than finger wagging.&lt;/p&gt; &lt;p&gt;I admit this was a minor rant.&amp;nbsp; As a supporter of web standards, I get a great deal of enjoyment out of good, honest discourse regarding their development and future.&amp;nbsp; This makes it all the more frustrating to read article after article and post after post that take close-minded stances, becoming dams in the flow of discussion.&amp;nbsp; The advancement of web standards is, and only can be, a collaborative effort, and this effort will be most productive when everyone enters in to it with their ears open and their egos left at the door.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ZwAIZE2kiuo:o-4zWiBbWl0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ZwAIZE2kiuo:o-4zWiBbWl0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=ZwAIZE2kiuo:o-4zWiBbWl0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ZwAIZE2kiuo:o-4zWiBbWl0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=ZwAIZE2kiuo:o-4zWiBbWl0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ZwAIZE2kiuo:o-4zWiBbWl0:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ZwAIZE2kiuo:o-4zWiBbWl0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ZwAIZE2kiuo:o-4zWiBbWl0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=ZwAIZE2kiuo:o-4zWiBbWl0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/ZwAIZE2kiuo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/ZwAIZE2kiuo/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/01/23/web-standards-the-ideal-and-the-reality.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=f671654a-3741-4b34-a860-3a4c226f7b0a</guid>
      <pubDate>Wed, 23 Jan 2008 21:06:37 -0800</pubDate>
      <category>Web Standards</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=f671654a-3741-4b34-a860-3a4c226f7b0a</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=f671654a-3741-4b34-a860-3a4c226f7b0a</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/01/23/web-standards-the-ideal-and-the-reality.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=f671654a-3741-4b34-a860-3a4c226f7b0a</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=f671654a-3741-4b34-a860-3a4c226f7b0a</feedburner:origLink></item>
    <item>
      <title>Please Don't Urinate In The Pool: The Social Media Backlash</title>
      <description>&lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/7fa48a41d676_129F6/pool-party.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px 10px 5px 0px; border-right-width: 0px" height="175" alt="pool-party" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/7fa48a41d676_129F6/pool-party_thumb.jpg" width="244" align="left" border="0" /&gt;&lt;/a&gt; The increasing interest of the search engine marketing community in social media has resulted in more and more discussion about how to get in on the "traffic goldrush".&amp;nbsp; As an SEO, I appreciate the enthusiasm in exploring new methods for maximizing exposure for a client's site, but as a social media user I am finding myself becoming increasingly annoyed with the number of people that are set on finding ways to game the system.&lt;/p&gt; &lt;h3&gt;The Social Media Backlash&lt;/h3&gt; &lt;p&gt;My focus for the purposes of this post will be &lt;a href="http://www.stumbleupon.com"&gt;StumbleUpon&lt;/a&gt;, which is my favourite social media community by far.&amp;nbsp; That said, most of what I say will applicable to just about any social media community, so don't stop reading just because you're not a stumbler.&amp;nbsp; Within the StumbleUpon community there has been a surprisingly strong, and negative, reaction to those who write articles/blog posts that explore methods for leveraging StumbleUpon to drive the fabled "server crashing" levels of traffic, or dissect the inner-workings of the stumbling algorithm in order to figure out how to get that traffic with the least amount of effort and contribution necessary.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;"What Did I Do?"&lt;/h3&gt; &lt;p&gt;When one of these people would end up on the receiving end of the StumbleUpon's community's ire they would be surprised. Instinctively, with perfectly crafted link-bait in hand, they would chronicle how they fell victim to hordes of angry stumblers, and express their disappointment while condemning the community for being so harsh.&amp;nbsp; Then, with anticipation of the inevitable rush of traffic their tale would attract to their site, they would hit the "post" button and quickly submit their post to their preferred social media channels.&amp;nbsp; What they didn't realize was that they were proving the reason for the community's backlash the instant they pressed "post".&lt;/p&gt; &lt;h3&gt;Please Don't Urinate In The Pool&lt;/h3&gt; &lt;p&gt;To explain that reason, we need to look at the reason people actually use StumbleUpon.&amp;nbsp; The biggest reason is the uncanny ability that it has for providing its users with a virtually endless supply of content that is almost perfectly targeted to them.&amp;nbsp; When this supply gets tainted, the user experience is worsened, and the better that the untainted experience is, the less tolerant the users will be of any tainting. &lt;/p&gt; &lt;p&gt;To illustrate, allow me to capitalize on the admittedly crude analogy found in the heading of this section.&amp;nbsp; Let's think of the StumbleUpon community as a group of friends at a pool party.&amp;nbsp; They are having a lot of fun, enjoying eachother's company, when they discover someone has been urinating in the pool.&amp;nbsp; The cleaner the water was before, the more everyone is going to notice the unwelcome "addition" to the water.&amp;nbsp; When they find out who urinated in the pool, they are going to be expectedly angry with them.&amp;nbsp; To stretch this analogy a little further, you can be damned sure that they wouldn't be happy when they found out that someone was telling everyone methods for strategically urinating in certain areas of the pool in order to maximize the number of people who would be exposed to the urine.&lt;/p&gt; &lt;p&gt;For anyone who was in the group of friends, and actually used and enjoyed the pool, the idea of urinating in it wouldn't even be an option.&amp;nbsp; Or, in the case of StumbleUpon, someone who actually participated in the community and enjoyed the service, wouldn't want to pollute it.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ox53oBDS5To:zAvDj250lC8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ox53oBDS5To:zAvDj250lC8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=ox53oBDS5To:zAvDj250lC8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ox53oBDS5To:zAvDj250lC8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=ox53oBDS5To:zAvDj250lC8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ox53oBDS5To:zAvDj250lC8:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ox53oBDS5To:zAvDj250lC8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=ox53oBDS5To:zAvDj250lC8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=ox53oBDS5To:zAvDj250lC8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/ox53oBDS5To" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/ox53oBDS5To/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2008/01/11/Please-Dont-Urinate-In-The-Pool-The-Social-Media-Backlash.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=16621526-f823-43f0-88ba-7ac7a28b401e</guid>
      <pubDate>Fri, 11 Jan 2008 22:08:58 -0800</pubDate>
      <category>SEM</category>
      <category>SEO</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=16621526-f823-43f0-88ba-7ac7a28b401e</pingback:target>
      <slash:comments>12</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=16621526-f823-43f0-88ba-7ac7a28b401e</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2008/01/11/Please-Dont-Urinate-In-The-Pool-The-Social-Media-Backlash.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=16621526-f823-43f0-88ba-7ac7a28b401e</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=16621526-f823-43f0-88ba-7ac7a28b401e</feedburner:origLink></item>
    <item>
      <title>Catching Unwanted Spiders And Content Scraping Bots In ASP.NET</title>
      <description>&lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/CatchingBadSpidersAndContentScraping.NET_110BD/spiderinaglass_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="184" alt="spiderinaglass" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/CatchingBadSpidersAndContentScraping.NET_110BD/spiderinaglass_thumb.jpg" width="244" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If you have a blog that is even moderately popular then you have likely fallen victim to some form of content scraping.&amp;nbsp; Ever since it became possible to earn money through ads on a website there have been people trying to find ways to cheat the system.&amp;nbsp; The most widespread example of this comes in the form of &lt;a title="Spam + Blog = Splog" href="http://www.somewhatfrank.com/2005/08/what_is_splog_a.html"&gt;splogs&lt;/a&gt; and similar spam-based websites, which consist only of ads from Google AdSense and duplicated content that is scraped from other sites.&amp;nbsp; In this post I will share a method you can use to identify "evil" spiders and content scraping bots that are wasting your website's resources. &lt;/p&gt; &lt;p&gt;I'll start off by defining what is considered an "evil" spider/bot.&amp;nbsp; For our purposes here, we'll be looking at spiders and bots that ignore &lt;a href="http://www.robotstxt.org"&gt;robots.txt&lt;/a&gt; and &lt;a href="http://microformats.org/wiki/rel-nofollow"&gt;nofollow&lt;/a&gt; when crawling a site.&amp;nbsp; These are spiders and bots that offer no value to you in allowing them to crawl your site, as the major search engines use spiders and bots that respect these rules (with the unique exception of MSN who employs a certain bot that presents itself as a regular user in order to identify sites that present different content to search engine spiders than users).&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;Of these valueless spiders, some are almost certainly going to be some form of content scraping bot, which is sent to literally copy the content of your site for use elsewhere.&amp;nbsp; It is in your best interest to limit how much of your content gets scraped because you want visitors coming to &lt;strong&gt;your&lt;/strong&gt; site, not some spam-filled facsimile. &lt;/p&gt; &lt;p&gt;This method to identify unwanted spiders involves the creation of a trap,&amp;nbsp; which can be created as follows: &lt;/p&gt; &lt;p&gt;&lt;strong&gt;1) Create a Hidden Page&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;To identify these undesired visitors you need to isolate them.&amp;nbsp; Create a page on your site, but do not link to it from anywhere just yet.&amp;nbsp; For the purposes of my examples, I'll call our example page "trap.aspx". &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/CatchingBadSpidersAndContentScraping.NET_110BD/spidertrap1.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="59" alt="spidertrap1" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/CatchingBadSpidersAndContentScraping.NET_110BD/spidertrap1_thumb.jpg" width="177" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now you want to disallow this page in your robots.txt. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/CatchingBadSpidersAndContentScraping.NET_110BD/spidertrap2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="38" alt="spidertrap2" src="http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/CatchingBadSpidersAndContentScraping.NET_110BD/spidertrap2_thumb.jpg" width="157" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;With this trap page disallowed in the robots.txt, it will prevent good spiders from crawling it.&amp;nbsp; What is needed now is a link to the trap page with the rel="nofollow" attribute, which should be placed on your home page for maximum effect.&amp;nbsp; The link must be invisible to users otherwise you might mistake a unwitting visitor for a bad spider. &lt;/p&gt; &lt;div&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="nofollow"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="/trap.aspx" &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="display:none;"&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This creates a situation in which the only requests for "/trap.aspx" will be from a spider or bot that ignores &lt;em&gt;both&lt;/em&gt; robots.txt &lt;em&gt;and&lt;/em&gt; nofollow, which is exactly the kind of bots we want to identify. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) Create a Log File&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Create an XML document and name it "trap.xml" (or whatever you want) and place it in the App_Data folder of your application (or wherever you want, as long as the application has write-access to the directory).&amp;nbsp; Open the new XML document and create an empty root-element "&amp;lt;trapRequests&amp;gt;" and ensure it has a complete closing tag. &lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;trapRequests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;trapRequests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;/div&gt;
&lt;div&gt;You can use whatever method is best for you to log the requests, you do not need to use an XML document.&amp;nbsp; I am using XML for the purposes of this example. &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3) Log What Gets Caught In The Trap&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;With the trap in place, you now want to keep track of the requests being made for "trap.aspx".&amp;nbsp; This can be accomplished quite easily using LINQ, as illustrated in the following example: &lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Xml.Linq&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;Partial Class&lt;/span&gt; trap_aspx
&lt;span style="color: #0000ff"&gt;Inherits&lt;/span&gt; System.Web.UI.Page&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;Protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.EventArgs) _
&lt;span style="color: #0000ff"&gt;Handles&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;.Load&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; LogRequest(Request.UserHostAddress, Request.UserAgent)&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; LogRequest(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; ipAddress &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; userAgent &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;)&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;  Dim&lt;/span&gt; logFile &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; XDocument&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &lt;br /&gt;  Try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logFile = XDocument.Load(Server.MapPath(&lt;span style="color: #006080"&gt;"~/App_Data/trap.xml"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logFile.Root.AddFirst(&lt;span style="color: #6464c5"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;request&lt;/span&gt;&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6464c5"&gt;                          &amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;date&lt;/span&gt;&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #454545; background-color: #fffebf"&gt;&amp;lt;%=&lt;/span&gt; Now.ToString &lt;span style="color: #454545; background-color: #fffebf"&gt;%&amp;gt;&lt;/span&gt; &lt;span style="color: #6464c5"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;/date&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6464c5"&gt;                          &amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;ip&lt;/span&gt;&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #454545; background-color: #fffebf"&gt;&amp;lt;%=&lt;/span&gt; ipAddress &lt;span style="color: #454545; background-color: #fffebf"&gt;%&amp;gt;&lt;/span&gt; &lt;span style="color: #6464c5"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;/ip&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6464c5"&gt;                          &amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;userAgent&lt;/span&gt;&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #454545; background-color: #fffebf"&gt;&amp;lt;%=&lt;/span&gt; Now.ToString &lt;span style="color: #454545; background-color: #fffebf"&gt;%&amp;gt;&lt;/span&gt; &lt;span style="color: #6464c5"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;/userAgent&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6464c5"&gt;                          &amp;lt;&lt;/span&gt;&lt;span style="color: #844646"&gt;/request&lt;span style="color: #6464c5"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logFile.Save(Server.MapPath(&lt;span style="color: #006080"&gt;"~/App_Data/trap.xml"&lt;/span&gt;))&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;  Catch&lt;/span&gt; ex &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Exception&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    My&lt;/span&gt;.Log.WriteException(ex)&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;End Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This code sets it up so every request for this page is logged with: &lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;The Date and Time of the request.&lt;/li&gt;
  &lt;li&gt;The IP address of the requesting agent.&lt;/li&gt;
  &lt;li&gt;The User Agent of the requesting agent. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can, of course, customize what information is logged to your preference.&amp;nbsp; The code will need to be adjusted if you are using a different storage method.&amp;nbsp; Once done, you will end up with an XML log file (or your custom store) with every request to "trap.aspx" that will look like: &lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;trapRequests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;request&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;date&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;12/30/2007 12:54:20 PM&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;date&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;1.2.3.4&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;userAgent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ISCRAPECONTENT/1.2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;userAgent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;request&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;request&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;date&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;12/30/2007 2:31:51 PM&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;date&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;2.3.4.5&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;userAgent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;BADSPIDER/0.5&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;userAgent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;request&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;trapRequests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;/div&gt;
&lt;div&gt;Now you've set your trap and any unwanted bots and spiders that find it will be logged.&amp;nbsp; You are then free to use the logged data to deny access to offending IPs, User Agents, or by whatever criteria you decide is appropriate for your site. &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=Hz3_0vH4OXE:8BM3iyjUTyg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=Hz3_0vH4OXE:8BM3iyjUTyg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=Hz3_0vH4OXE:8BM3iyjUTyg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=Hz3_0vH4OXE:8BM3iyjUTyg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=Hz3_0vH4OXE:8BM3iyjUTyg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=Hz3_0vH4OXE:8BM3iyjUTyg:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=Hz3_0vH4OXE:8BM3iyjUTyg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=Hz3_0vH4OXE:8BM3iyjUTyg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=Hz3_0vH4OXE:8BM3iyjUTyg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/Hz3_0vH4OXE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/Hz3_0vH4OXE/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/30/Catching-Unwanted-Spiders-And-Content-Scraping-Bots-In-ASP-NET.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=dad23e94-6a09-49be-8ef8-49c3f4abb5c5</guid>
      <pubDate>Sun, 30 Dec 2007 19:20:00 -0800</pubDate>
      <category>ASP.NET</category>
      <category>SEO</category>
      <category>Web Development</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=dad23e94-6a09-49be-8ef8-49c3f4abb5c5</pingback:target>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=dad23e94-6a09-49be-8ef8-49c3f4abb5c5</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/30/Catching-Unwanted-Spiders-And-Content-Scraping-Bots-In-ASP-NET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=dad23e94-6a09-49be-8ef8-49c3f4abb5c5</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=dad23e94-6a09-49be-8ef8-49c3f4abb5c5</feedburner:origLink></item>
    <item>
      <title>GMail Security Exploit Allows Backdoor Into Your Account</title>
      <description>&lt;p&gt;
I normally don&amp;#39;t discuss topics related to online security, but I recently came across a post over at &lt;a href="http://sphinn.com"&gt;Sphinn&lt;/a&gt; that detailed how &lt;a href="http://www.davidairey.co.uk/google-gmail-security-hijack/" title="GMail Security Exploit Leads To Domain Hijacking"&gt;David Airey had his domain hijacked&lt;/a&gt; thanks to a &lt;a href="http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/"&gt;security exploit in GMail&lt;/a&gt; and wanted to help make sure as many people as possible are made aware of it.&amp;nbsp; I recommend to any of you who uses GMail to read David&amp;#39;s post that details the trouble that this has caused him and make sure that your GMail account hasn&amp;#39;t been compromised.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
Not the most festive post for an early Christmas morning, but I&amp;#39;ll wish everyone a Merry Christmas anyways. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=V_TTPQdhN_I:CuQDh_D1JXQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=V_TTPQdhN_I:CuQDh_D1JXQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=V_TTPQdhN_I:CuQDh_D1JXQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=V_TTPQdhN_I:CuQDh_D1JXQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=V_TTPQdhN_I:CuQDh_D1JXQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=V_TTPQdhN_I:CuQDh_D1JXQ:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=V_TTPQdhN_I:CuQDh_D1JXQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=V_TTPQdhN_I:CuQDh_D1JXQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=V_TTPQdhN_I:CuQDh_D1JXQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/V_TTPQdhN_I" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/V_TTPQdhN_I/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/25/GMail-Security-Exploit-Allows-Backdoor-Into-Your-Account.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=998049aa-02b9-4db9-bc5b-8969311b9a90</guid>
      <pubDate>Tue, 25 Dec 2007 00:10:00 -0800</pubDate>
      <category>Google</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=998049aa-02b9-4db9-bc5b-8969311b9a90</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=998049aa-02b9-4db9-bc5b-8969311b9a90</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/25/GMail-Security-Exploit-Allows-Backdoor-Into-Your-Account.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=998049aa-02b9-4db9-bc5b-8969311b9a90</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=998049aa-02b9-4db9-bc5b-8969311b9a90</feedburner:origLink></item>
    <item>
      <title>How Being An SEO Analyst Made Me A Better Web Developer</title>
      <description>&lt;blockquote&gt;
	&lt;p&gt;
	Being a successful web developer requires constant effort to refine your existing abilities while expanding your skill-set to include the new technologies that are continually released, so when I first started my job as a search engine optimization analyst I was fully expecting my web development skills to dull.&amp;nbsp; I could not have been more wrong. 
	&lt;/p&gt;
	&lt;p&gt;
	Before I get to the list of reasons why being an SEO analyst made me a better web developer I&amp;#39;m going to give a quick overview of how I got into search engine optimization in the first place. Search engine optimization first captured my interest when I wanted to start driving more search traffic for a website I developed for the &lt;a href="http://www.bcda.ca"&gt;BCDA&lt;/a&gt; (and continue to volunteer my services as webmaster). Due to some dissatisfaction with our hosting provider I decided that we would switch hosting providers as soon as our existing contract expired and go with one of my preferred hosts. However, as a not-for-profit organization the budget for the website was limited and the new hosting was going cost a little more, so I decided to set up an AdSense account to bring in some added income.&amp;nbsp; 
	&lt;/p&gt;
	&lt;p&gt;
	The expectations weren&amp;#39;t high; I was hoping to bring in enough revenue through the website to cover hosting costs.&amp;nbsp; At that point I did not have much experience with SEO so I started researching and looking for strategies I could use on the site.&amp;nbsp; As I read more and more articles, blogs and whitepapers I became increasingly fascinated with the industry while I would apply all of the newfound knowledge to the site.&amp;nbsp; Soon after I responded to a job posting at an SEO firm, applied, and was shortly thereafter starting my new career as an SEO analyst.&amp;nbsp; 
	&lt;/p&gt;
	&lt;p&gt;
	My first few weeks at the job were spent learning procedures, familiarizing myself with the various tools that we use, and, most importantly, honing my SEO skills.&amp;nbsp; I spent the majority of my time auditing and reporting on client sites, which exposed me to a lot of different websites, programming and scripting languages, and tens of thousands of lines of code.&amp;nbsp; During this process I realized that my web development skills weren&amp;#39;t getting worse, they were actually getting better.&amp;nbsp;&amp;nbsp; The following list examines the reasons for this improvement. 
	&lt;/p&gt;
	&lt;h3&gt;1) Coding Diversity&lt;/h3&gt; 
	&lt;p&gt;
	To properly analyze a site, identify problems, and be able to offer the right solutions I often have to go deeper than just HTML on a website.&amp;nbsp; This meant that I had to be proficient at coding in a variety of different languages, because I don&amp;#39;t believe in pointing out problems with a site unless I can recommend how to best fix them.&amp;nbsp; Learning the different languages came quickly from the sheer volume of code I was faced with every day, and got easier with each language I learned. 
	&lt;/p&gt;
	&lt;h3&gt;2) Web Standards and Semantic Markup&lt;/h3&gt; 
	&lt;p&gt;
	In a recent post, &lt;a href="http://www.colincochrane.com/post/2007/12/Reducing-Code-Bloat-Part-Two-Semantic-HTML.aspx"&gt;Reducing Code Bloat Part Two: Semantic HTML&lt;/a&gt;, I discussed the importance of semantic HTML to lean, tidy markup for your web documents.&amp;nbsp; While I have always been a proponent of web standards and semantic markup my experience in SEO has served to solidify my beliefs.&amp;nbsp; After you have pored through 12,000 lines of markup that should have been 1000, or spent two hours implementing style modifications that should have taken five minutes, the appreciation for semantic markup and web standards is quickly realized. 
	&lt;/p&gt;
	&lt;h3&gt;3) Usability and Accessibility&lt;/h3&gt; 
	&lt;p&gt;
	Once I&amp;#39;ve optimized a site to draw more search traffic I need to help make sure that that traffic actually sticks around.&amp;nbsp; A big part of this is the usability and accessibility of a site.&amp;nbsp; There are a lot of other websites out there for people to visit and they are not going to waste time trying to figure out how to navigate through a meandering quagmire of a design.&amp;nbsp; This aspect of my job forces me to step into the shoes of the average user, which is something that a lot of developers need to do more often.&amp;nbsp; It has also made me more considerate when utilizing features and technologies, such as AJAX, in respect to accessibility, such that I ensure that the site is still accessible when that feature is disabled or is not supported. 
	&lt;/p&gt;
	&lt;h3&gt;4) The Value of Content&lt;/h3&gt; 
	&lt;p&gt;
	Before getting into SEO, I was among the many web developers guilty of thinking that a website&amp;#39;s success can be ensured by implementing enough features, and that enough cool features could make up for a lack of simple, quality content.&amp;nbsp; Search engine optimization taught me the value of content, and that the right balance of innovative features and content will greatly enhance the effectiveness of both. 
	&lt;/p&gt;
	&lt;p&gt;
	That covers some of the bigger reasons that working as an SEO analyst made me a better web developer.&amp;nbsp; Chances are that I will follow up on this post in the future with more reasons that I am sure to realize as I continue my career in SEO.&amp;nbsp; In fact one of the biggest reasons I love working in search engine optimization and marketing is that it is an industry that is constantly changing and evolving, and there is always sometime new to learn. 
	&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=WWW1-stXIuo:r3QlbnHSD-I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=WWW1-stXIuo:r3QlbnHSD-I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=WWW1-stXIuo:r3QlbnHSD-I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=WWW1-stXIuo:r3QlbnHSD-I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=WWW1-stXIuo:r3QlbnHSD-I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=WWW1-stXIuo:r3QlbnHSD-I:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=WWW1-stXIuo:r3QlbnHSD-I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=WWW1-stXIuo:r3QlbnHSD-I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=WWW1-stXIuo:r3QlbnHSD-I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/WWW1-stXIuo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/WWW1-stXIuo/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/19/How-Being-An-SEO-Analyst-Made-Me-A-Better-Web-Developer.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=928ea7e6-dcae-4bcc-a0b2-e50bd7fd0412</guid>
      <pubDate>Wed, 19 Dec 2007 10:46:00 -0800</pubDate>
      <category>SEO</category>
      <category>SEM</category>
      <category>Web Development</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=928ea7e6-dcae-4bcc-a0b2-e50bd7fd0412</pingback:target>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=928ea7e6-dcae-4bcc-a0b2-e50bd7fd0412</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/19/How-Being-An-SEO-Analyst-Made-Me-A-Better-Web-Developer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=928ea7e6-dcae-4bcc-a0b2-e50bd7fd0412</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=928ea7e6-dcae-4bcc-a0b2-e50bd7fd0412</feedburner:origLink></item>
    <item>
      <title>Reducing Code Bloat Part Two - Semantic HTML</title>
      <description>&lt;p&gt;In my first post on this subject, &lt;a title="Reducing HTML Code Bloat" href="http://www.colincochrane.com/post/2007/11/Reducing-Code-Bloat-Or-How-To-Cut-Your-HTML-Size-In-Half.aspx"&gt;Reducing Code Bloat - Or How To Cut Your HTML Size In Half&lt;/a&gt;, I demonstrated how you can significantly reduce the size of a web document by simply moving style definitions externally and getting rid of a table-based layout.&amp;nbsp; In this installment I will look at the practice of semantic HTML and how effective it can be at keeping your markup tidy and lean. &lt;/p&gt; &lt;h4&gt;What is Semantic HTML?&lt;/h4&gt; &lt;p&gt;Semantic HTML, in a nutshell, is the practice of creating HTML documents that only contain the author's "meaning" and not how that meaning is presented.&amp;nbsp; This boils down to using only structural elements and not presentational elements.&amp;nbsp; A common issue with semantic HTML is identifying the often subtle differences between elements that represent the author's meaning versus a presentational element.&amp;nbsp; Consider the following examples: &lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
I really felt the need to &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;i&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;emphasize&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;i&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; the point.
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp; &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
I really felt the need to &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;em&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;emphasize&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;em&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; the point.
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Many people would consider these two snips of code to be essentially the same; a paragraph, with the word "emphasize" in italics.&amp;nbsp; When considering the semantic value of the elements, however, there is one significant difference.&amp;nbsp; The element &amp;lt;i&amp;gt; is a purely presentational (or visual), and it has no meaning to the semantic structure of the document.&amp;nbsp; The &amp;lt;em&amp;gt; element, on the other hand, has a meaningful semantic value in the document's structure because it defining its contents as being emphasized.&amp;nbsp; Visually we usually see the contents both &amp;lt;i&amp;gt; and &amp;lt;em&amp;gt; elements rendered as italicized text which is why the difference often seems like nitpicking, but the standard italicizing for &amp;lt;em&amp;gt; elements is simply the choice made by most web browsers, it has no inherent visual style. &lt;/p&gt;
&lt;h4&gt;Making Your Markup Work for You&lt;/h4&gt;
&lt;p&gt;Some of you might be thinking to yourself "some HTML tags have a different &lt;em&gt;meaning&lt;/em&gt; than others? So what?".&amp;nbsp; Certainly a reasonable response, because when it comes down to it, HTML semantics can seem like pointless nitpicking.&amp;nbsp; That being said, this nitpicking drives home what HTML is really supposed to do: define &lt;strong&gt;markup.&lt;/strong&gt;&amp;nbsp; Think of it like being a writer for a magazine.&amp;nbsp; You write your article, including paragraphs and indicating words or sentences that should be emphasized, or considered more strongly, in relation to the rest, and submit it.&amp;nbsp; You don't decide what font is used, the colour of the text, or how much space should be between each line, that's the editor's job.&amp;nbsp; It is exactly the same concept with semantic HTML: the structure and meaning of the content is the job of HTML, and the presentation is the job of the browser and CSS. &lt;/p&gt;
&lt;p&gt;Without the burden of presentational elements you only have to worry about a core group of elements with meaningful structure value.&amp;nbsp; For instance... &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
This is a chunk of text &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="red14pxitalic"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;where&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; random words 
are &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="green16pxbold"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;styled&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; differently,
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="red14pxitalic"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;with&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; some words 
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="green16pxbold"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;being&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; red, italicized and at 14px, and others
being green, bold, and 16px.
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;/div&gt;
&lt;div&gt;with an external style-sheet definition... &lt;/div&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;span&lt;/span&gt;&lt;span style="color: #cc6633"&gt;.red14pxitalic&lt;/span&gt;{&lt;span style="color: #0000ff"&gt;color&lt;/span&gt;:&lt;span style="color: #006080"&gt;red;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-size&lt;/span&gt;:&lt;span style="color: #006080"&gt;14px;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-style&lt;/span&gt;:&lt;span style="color: #006080"&gt;italic;&lt;/span&gt;}
&lt;span style="color: #0000ff"&gt;span&lt;/span&gt;&lt;span style="color: #cc6633"&gt;.green16pxbold&lt;/span&gt;{&lt;span style="color: #0000ff"&gt;color&lt;/span&gt;:&lt;span style="color: #006080"&gt;green;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-size&lt;/span&gt;:&lt;span style="color: #006080"&gt;16px;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-weight&lt;/span&gt;:&lt;span style="color: #006080"&gt;bold;&lt;/span&gt;}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;...turns into this... &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
This is a chunk of text &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;em&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;where&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;em&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; random words 
are &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;strong&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;styled&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;strong&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; differently, &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;em&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;with&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;em&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; some words 
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;strong&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;being&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;strong&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; red, italicized and at 14px, and others being green, 
bold, and 16px.
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;with an external style-sheet definition... &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;p&lt;/span&gt; &lt;span style="color: #0000ff"&gt;em&lt;/span&gt;{&lt;span style="color: #0000ff"&gt;color&lt;/span&gt;:&lt;span style="color: #006080"&gt;red;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-size&lt;/span&gt;:&lt;span style="color: #006080"&gt;14px;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-style&lt;/span&gt;:&lt;span style="color: #006080"&gt;italic;&lt;/span&gt;}
&lt;span style="color: #0000ff"&gt;p&lt;/span&gt; &lt;span style="color: #0000ff"&gt;strong&lt;/span&gt;{&lt;span style="color: #0000ff"&gt;color&lt;/span&gt;:&lt;span style="color: #006080"&gt;green;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-size&lt;/span&gt;:&lt;span style="color: #006080"&gt;16px;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;font-weight&lt;/span&gt;:&lt;span style="color: #006080"&gt;bold;&lt;/span&gt;}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The second example accomplishes the same visual result as the first, but contains actual semantic worth in the document's structure.&amp;nbsp; It also illustrates how much simpler it is to create a new document because you don't have to worry about style.&amp;nbsp; You create the document and use meaningful semantic elements to identify whatever parts of the content are necessary, and let the style-sheet take care of the rest (assuming of course that the style-sheet was properly defined with the necessary styles).&amp;nbsp; By using a more complete range of HTML elements you will find yourself needing &amp;lt;span class="whatever"&amp;gt; tags less and less and find your markup becoming cleaner, easier to read, and smaller. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Code Size Comparison&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td valign="top" width="133"&gt;HTML Characters (Including Spaces)&lt;/td&gt;
&lt;td valign="top" width="133"&gt;CSS Characters (Including Spaces)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;Example One&lt;/td&gt;
&lt;td valign="top" width="133"&gt;302&lt;/td&gt;
&lt;td valign="top" width="133"&gt;127&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;Example Two&lt;/td&gt;
&lt;td valign="top" width="133"&gt;216&lt;/td&gt;
&lt;td valign="top" width="133"&gt;103&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Part Three will continue looking at semantic HTML, as well as strategies you can use when defining your style framework. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=5BPcO9m0PBk:NQSgtaLvBx8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=5BPcO9m0PBk:NQSgtaLvBx8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=5BPcO9m0PBk:NQSgtaLvBx8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=5BPcO9m0PBk:NQSgtaLvBx8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=5BPcO9m0PBk:NQSgtaLvBx8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=5BPcO9m0PBk:NQSgtaLvBx8:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=5BPcO9m0PBk:NQSgtaLvBx8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=5BPcO9m0PBk:NQSgtaLvBx8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=5BPcO9m0PBk:NQSgtaLvBx8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/5BPcO9m0PBk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/5BPcO9m0PBk/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/17/Reducing-Code-Bloat-Part-Two-Semantic-HTML.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=9e1ba433-ed6b-4a0f-a6cf-96fad1b7bb36</guid>
      <pubDate>Mon, 17 Dec 2007 12:06:00 -0800</pubDate>
      <category>HTML</category>
      <category>XHTML</category>
      <category>Web Development</category>
      <category>CSS</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=9e1ba433-ed6b-4a0f-a6cf-96fad1b7bb36</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=9e1ba433-ed6b-4a0f-a6cf-96fad1b7bb36</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/17/Reducing-Code-Bloat-Part-Two-Semantic-HTML.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=9e1ba433-ed6b-4a0f-a6cf-96fad1b7bb36</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=9e1ba433-ed6b-4a0f-a6cf-96fad1b7bb36</feedburner:origLink></item>
    <item>
      <title>Is There Added Value In XHTML To Search Engine Spiders?</title>
      <description>&lt;p&gt;The use of XHTML in the context of SEO is a matter of debate.&amp;#160; The consensus tends to be that using XHTML falls into the category of optimization efforts that provide certain benefits for the site as a whole (extensibility, ability to use XSL transforms) but offers little or no added value in the eyes of the search engines.&amp;#160; That being said, as the number of pages that search engine spiders have to crawl continues to increase every day, the limits to how much the spiders can crawl are being tested.&amp;#160; This has been recognized by SEOs and is reflected in efforts to trim page sizes down to make a site more appealing to the spiders.&amp;#160; Now it is time to start considering the significant benefits that a well-formed XHTML document can potentially offer to search engine spiders. &lt;/p&gt;  &lt;p&gt;Parsing XML is faster than parsing HTML for one simple reason: &lt;strong&gt;XML documents are expected to be well-formed.&lt;/strong&gt;&amp;#160; This saves the parser from having to spend the extra overhead involved in &amp;quot;filling in the blanks&amp;quot; with a non-valid document.&amp;#160; Dealing with XML also opens the door to the use of speedy languages like XPath that provide fast and straightforward access to any given part of an XML document.&amp;#160; For instance, consider the following XHTML document: &lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xml:lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;My XHTML Document&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;description&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;This is my XHTML document.&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;This is my XHTML document!&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Here is some content.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now let's say we wanted to grab the contents of the title element from this document.&amp;#160; If we were to parse it as straight HTML we'd probably use a regular expression such as &amp;quot;&amp;lt;title&amp;gt;([^&amp;lt;]*)&amp;lt;/title&amp;gt;&amp;quot; &lt;em&gt;(As a quick aside, I want to clarify that HTML parsers are quite advanced and don't simply use regular expressions to read a document).&lt;/em&gt;&amp;#160; In Visual Basic the code to accomplish this would look like: &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Text.RegularExpressions

&lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; MyParser

  &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; GetTitle(&lt;span style="color: #0000ff"&gt;ByRef&lt;/span&gt; html &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; 
    &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; RegEx.Match(html,&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;title&amp;gt;([^&amp;lt;]*)&amp;lt;/title&amp;gt;&amp;quot;&lt;/span&gt;).Groups(1).Value 
  &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; 

&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If we were to use XPath, on the other hand, we would get something like this: &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Xml 

&lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; MyParser 

  &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; GetTitle(&lt;span style="color: #0000ff"&gt;ByRef&lt;/span&gt; reader &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; XmlReader) &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; 
    &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; doc &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; XPath.XPathDocument(reader) 
    &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; navigator &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; XPath.XPathNavigator = doc.CreateNavigator
    &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; navigator.SelectSingleNode(&amp;amp;quot;/head/title&amp;amp;quot;).Value 
  &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; 

&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Don't let the amount of code fool you.&amp;#160; While the first example uses 1 line of code to accomplish what takes the second example 3 lines, the real value comes when dealing with a non-trivial document.&amp;#160; The first method would need enumerate the elements in the document, which would involve either very complex regular expressions with added logic (because regular expressions are not best suited for parsing HTML), or the added overhead necessary for an existing HTML parser to accurately determine how the document &amp;quot;intended&amp;quot; to be structured.&amp;#160; Using XPath is a simple matter of using a different XPath expression for the &amp;quot;navigator.SelectSingleNode&amp;quot; method. 
  &lt;br /&gt;

  &lt;br /&gt;With that in mind, I constructed a very basic test to see what kind of speed differences we'd be looking at between HTML parsing and XML (using XPath) parsing.&amp;#160; The test was simple: I created a well-formed XHTML document consisting of a title element, meta description and keywords elements, 150 paragraphs of &lt;a title="Lorum Ipsum Generator" href="http://www.lipsum.com"&gt;Lorum Ipsum&lt;/a&gt;, 1 &amp;lt;h1&amp;gt; element, 5 &amp;lt;h2&amp;gt; elements, 10 &amp;lt;h3&amp;gt; elements and 10 anchor elements scattered throughout the document. &lt;/p&gt;

&lt;p&gt;The test consisted of two methods, one using XPath, and one using Regular Expressions.&amp;#160; The task of each method was to simply iterate through every element in the document once, and repeat this task 10000 times while being timed.&amp;#160; Once completed it would spit out the elapsed time in milliseconds that it took to complete.&amp;#160; The test was kept deliberately simple because the results are only meant to very roughly illustrate the performance differences between the two methods.&amp;#160; It was by no means an exhaustive performance analysis and should not be considered as such. &lt;/p&gt;

&lt;p&gt;That being said, I ran the test 10 times and averaged the results for each method, resulting in the following: 
  &lt;br /&gt;

  &lt;br /&gt;&lt;strong&gt;XML Parsing (Using XPATH) - 13ms&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML Parsing (Using RegEx) - 1852ms&lt;/strong&gt; 

  &lt;br /&gt;

  &lt;br /&gt;As I said, these results are very rough, and meant to illustrate the difference between the two methods rather than the exact times.&amp;#160; &lt;br /&gt;

  &lt;br /&gt;These results should, however, give you something to consider in respect to the potential benefits of XHTML to a search engine spider.&amp;#160; We don't know how search engine spiders are parsing web documents, and that will likely never change.&amp;#160; We do know that search engines are constantly refining their internal processes, including spider logic, and with the substantial performance beneifts of XML parsing, it doesn't seem too far-fetched to think that the search engines might have their spiders capitilizing on well-formed XHTML documents with faster XML parsing, or are at least taking a very serious look at implementing that functionality in the near future.&amp;#160; If you consider even a performance improvement of only 10ms, when you multiply that against the tens of thousands of pages being spidered every day, those milliseconds add up very quickly. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=K0-Qy0MJTVg:N7XypGrAZl4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=K0-Qy0MJTVg:N7XypGrAZl4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=K0-Qy0MJTVg:N7XypGrAZl4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=K0-Qy0MJTVg:N7XypGrAZl4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=K0-Qy0MJTVg:N7XypGrAZl4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=K0-Qy0MJTVg:N7XypGrAZl4:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=K0-Qy0MJTVg:N7XypGrAZl4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=K0-Qy0MJTVg:N7XypGrAZl4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=K0-Qy0MJTVg:N7XypGrAZl4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/K0-Qy0MJTVg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/K0-Qy0MJTVg/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/08/Is-There-Added-Value-In-XHTML-To-Search-Engine-Spiders.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=7c4c33bf-a5e9-41a9-becc-87cbc9ebde05</guid>
      <pubDate>Sat, 08 Dec 2007 11:10:00 -0800</pubDate>
      <category>SEO</category>
      <category>HTML</category>
      <category>XHTML</category>
      <category>XML</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=7c4c33bf-a5e9-41a9-becc-87cbc9ebde05</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=7c4c33bf-a5e9-41a9-becc-87cbc9ebde05</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/08/Is-There-Added-Value-In-XHTML-To-Search-Engine-Spiders.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=7c4c33bf-a5e9-41a9-becc-87cbc9ebde05</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=7c4c33bf-a5e9-41a9-becc-87cbc9ebde05</feedburner:origLink></item>
    <item>
      <title>Using CSS To Create Two Common HTML Border Effects</title>
      <description>&lt;p&gt;
Seperating the style from the markup of a web document is generally a painless, if sometimes time-consuming, task.&amp;nbsp; In many cases however, the process can have some added speed-bumps; most notably when the original HTML is using an infamous table-based layout.&amp;nbsp; The two most common speedbumps when dealing with table-based layouts and styling are recreating the classic borderless table and keeping the default table border appearance.
&lt;/p&gt;
&lt;p&gt;
The appearance of these two kinds of table are as follows&amp;nbsp;
&lt;/p&gt;
&lt;em&gt;Default Border&lt;br /&gt;
&lt;br /&gt;
&lt;/em&gt;
&lt;table border="1"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;1&lt;/td&gt;
			&lt;td&gt;2&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;3&lt;/td&gt;
			&lt;td&gt;4&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;em&gt;&lt;br /&gt;
Borderless&lt;br /&gt;
&lt;br /&gt;
&lt;/em&gt;
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;1&lt;/td&gt;
			&lt;td&gt;2&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;3&lt;/td&gt;
			&lt;td&gt;4&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
The markup for these two tables looks like:&lt;br /&gt;
&lt;div class="code"&gt;&lt;span class="rem"&gt;&amp;lt;!--Default Border --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tbody&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;3&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;4&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tbody&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;&amp;lt;!-- Borderless --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellspacing&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellpadding&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tbody&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;3&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;4&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tbody&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;
If you want to get the same effects while losing the HTML attributes you can use the folllow CSS:&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Default Border&lt;/em&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div class="code"&gt;table{border-spacing:0px;border:solid 1px #8D8D8D;width:130px;}&lt;br /&gt;table td{&lt;br /&gt;border:solid 1px #C0C0C0;&lt;br /&gt;border-bottom:solid 1px #8D8D8D;&lt;br /&gt;border-left:solid 1px #8D8D8D;&lt;br /&gt;display:table-cell;&lt;br /&gt;margin:0;&lt;br /&gt;padding:0;}&lt;/div&gt;&lt;p&gt;
&lt;br /&gt;
&lt;em&gt;Borderless&lt;/em&gt;
&lt;/p&gt;
&lt;div class="code"&gt;table{border:none;border-collapse:collapse;}&lt;br /&gt;table td{padding:0;margin:0;}&lt;/div&gt;&lt;p&gt;
Duplicating the default table border look requires extra rules in its style definition because the default border contains two shades so the border-color values must be set accordingly.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
That is the basic method to replicating HTML table effects with CSS that are usually created with HTML attributes. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=3fAQYTR-g2Y:8zEk9owwOZU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=3fAQYTR-g2Y:8zEk9owwOZU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=3fAQYTR-g2Y:8zEk9owwOZU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=3fAQYTR-g2Y:8zEk9owwOZU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=3fAQYTR-g2Y:8zEk9owwOZU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=3fAQYTR-g2Y:8zEk9owwOZU:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=3fAQYTR-g2Y:8zEk9owwOZU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=3fAQYTR-g2Y:8zEk9owwOZU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=3fAQYTR-g2Y:8zEk9owwOZU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/3fAQYTR-g2Y" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/3fAQYTR-g2Y/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/04/Using-CSS-To-Create-Two-Common-HTML-Border-Effects.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=6ac0f423-aabc-48df-9d70-74a229d7c6db</guid>
      <pubDate>Tue, 04 Dec 2007 17:01:00 -0800</pubDate>
      <category>HTML</category>
      <category>Web Development</category>
      <category>Web Design</category>
      <category>CSS</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=6ac0f423-aabc-48df-9d70-74a229d7c6db</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=6ac0f423-aabc-48df-9d70-74a229d7c6db</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/04/Using-CSS-To-Create-Two-Common-HTML-Border-Effects.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=6ac0f423-aabc-48df-9d70-74a229d7c6db</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=6ac0f423-aabc-48df-9d70-74a229d7c6db</feedburner:origLink></item>
    <item>
      <title>A Code Snippet That Speaks For Itself</title>
      <description>&lt;p&gt;
While working on a client&amp;#39;s site today I came across this gem that I thought you might enjoy.&amp;nbsp; I&amp;#39;ll let the snippet speak for itself. 
&lt;/p&gt;
&lt;div class="code"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;document.write(&lt;span class="str"&gt;'&amp;lt;'&lt;/span&gt;);&lt;br /&gt;document.write(&lt;span class="str"&gt;'!--  '&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;&amp;amp;lt;&lt;/span&gt;!--   &lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;noscript&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;(Removed to protect anonymity of client)&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;noscript&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="rem"&gt;&amp;lt;!--//--&amp;gt;&lt;/span&gt;  &lt;/div&gt;&lt;p&gt;
*Smacks Forehead* 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=DsdSQ6zl8RM:PgchksOw9Xs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=DsdSQ6zl8RM:PgchksOw9Xs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=DsdSQ6zl8RM:PgchksOw9Xs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=DsdSQ6zl8RM:PgchksOw9Xs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=DsdSQ6zl8RM:PgchksOw9Xs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=DsdSQ6zl8RM:PgchksOw9Xs:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=DsdSQ6zl8RM:PgchksOw9Xs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=DsdSQ6zl8RM:PgchksOw9Xs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=DsdSQ6zl8RM:PgchksOw9Xs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/DsdSQ6zl8RM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/DsdSQ6zl8RM/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/12/04/A-Code-Snippet-That-Speaks-For-Itself.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=32533e54-e403-4876-aee7-3a2784bb8e2b</guid>
      <pubDate>Tue, 04 Dec 2007 12:18:00 -0800</pubDate>
      <category>HTML</category>
      <category>Humour</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=32533e54-e403-4876-aee7-3a2784bb8e2b</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=32533e54-e403-4876-aee7-3a2784bb8e2b</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/12/04/A-Code-Snippet-That-Speaks-For-Itself.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=32533e54-e403-4876-aee7-3a2784bb8e2b</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=32533e54-e403-4876-aee7-3a2784bb8e2b</feedburner:origLink></item>
    <item>
      <title>7 Firefox Add Ons For Web Developers</title>
      <description>&lt;p&gt;
Firefox add-ons can be one of the best set of tools a web developer can have but with so many out there it can be hard to decide on which ones are the best for you.&amp;nbsp; I was reluctant to post this at first, given the countless other blogs out their who have posted their own add-on lists, but felt this would be of value for those looking for recommendations that weren&amp;#39;t posted 2-3 years ago.&amp;nbsp; I avoided going for the &amp;quot;Top 841 Add Ons Every Web Developer Must Have!!!!&amp;quot; angle, as this isn&amp;#39;t a top list.&amp;nbsp; It&amp;#39;s simply a list of my personal favourites because, as a guy who&amp;#39;s known around the office for having too many add-ons installed for Firefox, I&amp;#39;ve definitely used a lot of add-ons, some which were fanstastic, and some which left something to be desired.&amp;nbsp; Over time I managed to pare down my pile of add-ons in to a core set that all save me a considerable amount of time, and also share the same basic qualities: 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Easy to Use&lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;Not Obtrusive&lt;/li&gt;
	&lt;li&gt;Light-Weight&lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;Accurate&lt;br /&gt;
	&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Ease of use is important to saving time (an add-on isn&amp;#39;t going to increase productivity if it takes just as long to figure out how to use it, configure it, or even just to use it).&amp;nbsp; Not being obtrusive is important because I want my add-ons to be un-noticable other than a toolbar or icon unless I actively want to utlilize it, and this ties in with being light-weight, as a light-weight add-on is not going to cause any decreases in performance.&amp;nbsp; Finally, accuracy is imperitive because I have to be able to trust what information the add-on is providing me with.&lt;br /&gt;
&lt;br /&gt;
With those qualities explained, I&amp;#39;ll get on to the list.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1) &lt;a href="http://www.getfirebug.com/" title="Firebug - Web Development Evolved"&gt;Firebug&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
For web development and/or design if you are going to install one add-on, this is the one.&amp;nbsp; Firebug lets you view, edit, debug and monitor HTML, CSS and JavaScript live on any web page.&amp;nbsp; I use Firebug extensively every day to test layout changes before I make them, to debug script errors, navigate through a page&amp;#39;s markup with ease, monitor all the HTTP requests made for a given page, and more.&amp;nbsp; It also has some incredibly useful features like a diagram that shows all the measurements for dimension, margin, padding, border, etc... for a selected element, a list of applied styles for a selected element, and the &amp;quot;inspect&amp;quot; feature that lets you simply click on the part of a web page you want to analyze and have Firebug automatically get all the details on it for you.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=fb1.JPG" alt="" /&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=fb2.JPG" alt="" /&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=fb3.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2) &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60" title="Web Developer Firefox Add-On"&gt;Web Developer&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Web Developer is an add-on that provides a toolbar and menu that gives you access to a host of different development tools.&amp;nbsp; Just one of the 12 toolbar buttons gives you the following options:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=wdm14.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
There are tons of other useful tools included with Web Developer, including some of my personal favourites:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Outline different HTML elements (with ability to display element type and custom outline colour)&lt;/li&gt;
	&lt;li&gt;Show/hide/outline images with oversized dimensions, missing alt attributes, adjusted dimensions, missing dimensions, etc&lt;/li&gt;
	&lt;li&gt;Show image paths, alt and title attributes, sizes&lt;/li&gt;
	&lt;li&gt;Disable javascript&lt;/li&gt;
	&lt;li&gt;Disable CSS styles (external, interal, inline, etc..)&amp;nbsp;&lt;br /&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;3) &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748" title="Greasemonkey Firefox Add-On"&gt;Greasemonkey&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
One of the most popular add-ons out there, Greasemonkey simply lets you run custom JavaScript against any page you want.&amp;nbsp; There are thousands of Greasemonkey scripts out there for those who don&amp;#39;t want to create their own, offering enhancements such as numbering search results in Google, MSN and Yahoo, killing pop-up ads, and pretty much anything else you could think of.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4) &lt;a href="http://users.skynet.be/mgueury/mozilla/" title="HTML Validator Firefox Add-On"&gt;HTML Validator&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
A must have if you care about W3C validation.&amp;nbsp; HTML Validator displays an icon in the bottom of your browser indicating if the current page validates against its DOCTYPE, as well as the number of errors and warnings.&amp;nbsp; You can configure the validation method it uses (HTML Tidy, or SGML which is used by the W3C Markup Validation Service), and it also displays a list of errors and highlights them in when you view the page&amp;#39;s source.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5) &lt;a href="http://www.kevinfreitas.net/extensions/measureit/" title="MeasureIt - Firefox Add-On"&gt;MeasureIt&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Simple and easy-to use, MeasureIt is an add-on that, when activated, displays an overlay where you can drag and position a dynamic ruler so you can measure dimensions on a web page.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=measureit1.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;6) &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2324" title="Session Manager - Firefox Add-On"&gt;Session Manager&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Session Manager is an incredibly useful add-on that tracks your Firefox sessions and allows you reload older sessions or recover a crashed session.&amp;nbsp; If you&amp;#39;re like me and usually have the same websites opened in different tabs, this add-on will make your life a lot easier.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;7) &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3559" title="QuickRestart Firefox Add-On"&gt;QuickRestart&lt;/a&gt;&lt;a href="http://tools.seobook.com/firefox/seo-for-firefox.html" title="SEO For Firefox Add-On"&gt;&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
QuickRestart is a simple and convenient add-on that simply adds a button to your toolbar that restarts Firefox, just like when you install an add-on or upgrade.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
Hopefully you will find these add-ons as useful as I have.&amp;nbsp; I&amp;#39;ll also be posting a list of useful add-ons for Internet Explorer later this week as well.&amp;nbsp; I encourage everyone to comment with your own recommendations for Firefox add-ons that you find useful for web development. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=t7yy2EsN_iY:J-pIvRoHoqY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=t7yy2EsN_iY:J-pIvRoHoqY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=t7yy2EsN_iY:J-pIvRoHoqY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=t7yy2EsN_iY:J-pIvRoHoqY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=t7yy2EsN_iY:J-pIvRoHoqY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=t7yy2EsN_iY:J-pIvRoHoqY:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=t7yy2EsN_iY:J-pIvRoHoqY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=t7yy2EsN_iY:J-pIvRoHoqY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=t7yy2EsN_iY:J-pIvRoHoqY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/t7yy2EsN_iY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/t7yy2EsN_iY/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/11/25/7-Firefox-Add-Ons-For-Web-Developers.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=b0e12462-87ab-4f98-8f82-94772ccf3d85</guid>
      <pubDate>Sun, 25 Nov 2007 17:30:00 -0800</pubDate>
      <category>Web Development</category>
      <category>Web Design</category>
      <category>Tools</category>
      <category>Firefox</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=b0e12462-87ab-4f98-8f82-94772ccf3d85</pingback:target>
      <slash:comments>16</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=b0e12462-87ab-4f98-8f82-94772ccf3d85</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/11/25/7-Firefox-Add-Ons-For-Web-Developers.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=b0e12462-87ab-4f98-8f82-94772ccf3d85</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=b0e12462-87ab-4f98-8f82-94772ccf3d85</feedburner:origLink></item>
    <item>
      <title>Visual Studio 2008 Initial Impressions - Part  One</title>
      <description>&lt;p&gt;
The release of &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx" title="Visual Studio 2008 Details from Microsoft"&gt;Visual Studio 2008&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&amp;amp;displaylang=en" title="Microsoft .NET Framework 3.5"&gt;.NET Framework 3.5&lt;/a&gt; this past Monday has created a considerable buzz in the .NET community.&amp;nbsp; With language enhancements such as &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx" title="LINQ - Language Integrated Query"&gt;LINQ&lt;/a&gt; (Language Integrated Query) and &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/04/08/new-orcas-language-feature-lambda-expressions.aspx" title="Lambda Expressions - ScottGu's Blog"&gt;lambda expressions&lt;/a&gt; as well as a plethora of refinements to the IDE itself there are a lot of new tools available at our disposal now.&amp;nbsp; I was very eager to get acquainted with these new tools so I installed a copy of Team Edition and spent almost every free moment this week familiarizing myself with them.&amp;nbsp; Here are some of my initial impressions.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1)&lt;/strong&gt; &lt;strong&gt;LINQ To SQL Classes&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I work with a lot of applications that depend heavily on a backend database, so I&amp;#39;ve coded my fair share of business logic layers which can be quite tedious.&amp;nbsp; LINQ To SQL Classes take a lot of the grunt work out of that process by providing a convenient visual designer that performs automatic object-relational mapping.&amp;nbsp; All you have to do is drag a table or stored procedure from the Server Explorer to the design window and the designer automatically creates a strongly-typed object or method that is ready for use in your application.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=linq1.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2) Intellisense Enhancements&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There were a couple of really nice usability enhancements to Intellisense in Visual Studio 2008.&amp;nbsp; Now, as you type, the Intellisense list automatically filters the list down based on what you&amp;#39;ve entered in so far.&amp;nbsp; For instance, if you have entered &amp;quot;MyObject.ToS&amp;quot; the list would be filtered to only show the items that start with &amp;quot;ToS&amp;quot;, which does a nice job of speeding things up.&amp;nbsp; The other enhancement addresses the issue that many people had with previous versions of Visual Studio and the way that the Intellisense list would often obscure chunks of your code, forcing you to close the window if you had to check something that was underneath it.&amp;nbsp; Now you just have to hit &amp;quot;Ctrl&amp;quot; while the list is open and it will become semi-transparant, allowing you to see the code underneath.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.colincochrane.com/image.axd?picture=intellisense1.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3) Improved IDE Performance&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Not a &amp;quot;feature&amp;quot;, necessarily, but a welcome improvement to Visual Studio.&amp;nbsp; You&amp;#39;ll notice this as soon as you load the environment for the first time and discover how quickly the environment loads.&amp;nbsp; The performance improvements don&amp;#39;t stop there either, as the IDE is a lot faster and responsive throughout.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Stay tuned for Part Two where I&amp;#39;ll go in to some more features of LINQ as well as some of the language upgrades given to Visual Basic. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=25A45btKFr8:iDJN-G8QkBI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=25A45btKFr8:iDJN-G8QkBI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=25A45btKFr8:iDJN-G8QkBI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=25A45btKFr8:iDJN-G8QkBI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=25A45btKFr8:iDJN-G8QkBI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=25A45btKFr8:iDJN-G8QkBI:ahCdw3vyz8w"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=ahCdw3vyz8w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=25A45btKFr8:iDJN-G8QkBI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/colincochrane?a=25A45btKFr8:iDJN-G8QkBI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/colincochrane?i=25A45btKFr8:iDJN-G8QkBI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/colincochrane/~4/25A45btKFr8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/colincochrane/~3/25A45btKFr8/post.aspx</link>
      <author>blog.nospam@nospam.colincochrane.com (Colin Cochrane)</author>
      <comments>http://www.colincochrane.com/post/2007/11/25/Visual-Studio-2008-Initial-Impressions-Part-One.aspx#comment</comments>
      <guid isPermaLink="false">http://www.colincochrane.com/post.aspx?id=2655ffe2-490d-4ba8-b5cd-b320f8efc1e0</guid>
      <pubDate>Sun, 25 Nov 2007 13:00:00 -0800</pubDate>
      <category>ASP.NET</category>
      <category>Visual Basic</category>
      <category>XML</category>
      <dc:publisher>Colin Cochrane</dc:publisher>
      <pingback:server>http://www.colincochrane.com/pingback.axd</pingback:server>
      <pingback:target>http://www.colincochrane.com/post.aspx?id=2655ffe2-490d-4ba8-b5cd-b320f8efc1e0</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.colincochrane.com/trackback.axd?id=2655ffe2-490d-4ba8-b5cd-b320f8efc1e0</trackback:ping>
      <wfw:comment>http://www.colincochrane.com/post/2007/11/25/Visual-Studio-2008-Initial-Impressions-Part-One.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.colincochrane.com/syndication.axd?post=2655ffe2-490d-4ba8-b5cd-b320f8efc1e0</wfw:commentRss>
    <feedburner:origLink>http://www.colincochrane.com/post.aspx?id=2655ffe2-490d-4ba8-b5cd-b320f8efc1e0</feedburner:origLink></item>
  </channel>
</rss>
