<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Just a Coder &#187; Common sense</title>
	<atom:link href="http://www.nickfitz.co.uk/categories/common-sense/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nickfitz.co.uk</link>
	<description>The occasional online observations of Nick Fitzsimons</description>
	<lastBuildDate>Sun, 08 Jan 2012 02:09:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Well, That Didn&#8217;t Hurt As Much As I Expected</title>
		<link>http://www.nickfitz.co.uk/2010/12/20/well-that-didnt-hurt-as-much-as-i-expected/</link>
		<comments>http://www.nickfitz.co.uk/2010/12/20/well-that-didnt-hurt-as-much-as-i-expected/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 04:23:47 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Common sense]]></category>
		<category><![CDATA[NHS]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/?p=120</guid>
		<description><![CDATA[The National Health Service is for life, not just for politics.]]></description>
			<content:encoded><![CDATA[<p>
Three weeks ago I was lying in a bed in the Coronary Care Unit of <a href="http://www.uhl-tr.nhs.uk/patients/about-our-hospitals/glenfield-hospital">Glenfield Hospital</a>, having had a heart attack (anterior myocardial infarction with severe stenosis of the <a href="http://en.wikipedia.org/wiki/Left_anterior_descending">Left Anterior Descending</a> coronary artery, to be precise). I dialled 999 (the UK emergency service number) at 17:52; the paramedics arrived outside my home at 17:58. After thirty minutes or so of taking cardiograms and assessing my condition, they took me to the Glenfield CCU.
</p>
<p>
Less than forty minutes later I had received an angioplasty. That&#8217;s where they put a stent in the blocked artery and stick a little balloon in there and blow it up to unblock it. I also got to watch it in X-Ray on the monitors and listen to the cardiologist&#8217;s running commentary to his students, which was awesome: you can&#8217;t beat geeking out on somebody describing exactly how they&#8217;re saving your life in real time.
</p>
<p>
With that done I was feeling right as rain again. (Slightly righter actually, but I think that was the morphine.)
</p>
<p>
The only reason I&#8217;m mentioning this here is to let you know that if you ever have a heart attack in Leicester, you&#8217;ll be taken to the best possible place in the UK to get it fixed. The department at Glenfield is awesome, and so are our paramedics. In fact, if you suspect you might be going to have a heart attack in the near future, I would recommend taking short-term accommodation in Leicester and putting 999 on speed dial. It might just save your life.
</p>
<p>
Oh, one more reason. Those American politicians who opposed plans to reform health care in the USA were a bunch of lying shills when they denigrated the United Kingdom&#8217;s National Health Service. Less than ninety minutes after phoning for an ambulance, I had undergone an angioplasty without anybody asking me to prove that I had so much as a penny in my pocket, and was being taken to a ward where I would be cared for and my status would be monitored and I would receive whatever treatment I required and be fed and watered until I was in a fit state to leave (which was two days later). If any of those politicians wants to come over here and run down the NHS to my face, I will gladly punch them so hard in theirs that they can find out just how wrong they are at the local A&#038;E department.
</p>
<p>
The NHS is for life, not just for politics.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2010/12/20/well-that-didnt-hurt-as-much-as-i-expected/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Antisocial Networking</title>
		<link>http://www.nickfitz.co.uk/2010/07/24/more-antisocial-networking/</link>
		<comments>http://www.nickfitz.co.uk/2010/07/24/more-antisocial-networking/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 20:17:09 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Common sense]]></category>
		<category><![CDATA[Elsewhere...]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/?p=81</guid>
		<description><![CDATA[Yet more shenanigans resulting from people failing to "get" Twitter.]]></description>
			<content:encoded><![CDATA[<p>Following on from the <a href="http://www.nickfitz.co.uk/2010/07/14/antisocial-networking/">recent brouhaha surrounding Gillian McKeith and Twitter</a>, this weekend brings another example of how not to respond to Twitter comments in the shape of a threat of legal action against blogger Luke Bozier.</p>
<p>Luke tweeted <a href="http://twitter.com/LukeBozier/status/19418319246">his unflattering opinion of ex-Prime Minister Gordon Brown&#8217;s new web site</a>, and also posted <a href="http://lukebozier.co.uk/2010/07/tangent-is-taking-the-labour-community-for-a-ride/">more detailed criticism</a> of <a href="http://www.tangentone.com/">Tangent One</a>, who are apparently responsible for the site, on his blog.</p>
<p>Shortly afterwards, he received the following message from somebody describing themselves as executive director of <a href="http://www.tangentplc.com/">Tangent Communications plc</a>, parent company of Tangent One:</p>
<blockquote><p>I respectfully suggest you delete that tweet, issue no more similar ones and generally try to sell your products in a more professional way. I really don’t like the prospect of either a public slanting match or legal action, but if I need to protect my company’s business and reputation, I will.</p>
</blockquote>
<p>This has resulted in <a href="http://twitter.com/jackofkent">Jack of Kent</a> (aka legal eagle David Allen Green) repeatedly re-tweeting the original tweet and promoting the hashtag <a href="http://twitter.com/search?q=%23OffTangent">#OffTangent</a>, which is now trending nicely in the UK.</p>
<p>Assuming the threat received by Luke Bozier is real, one has to wonder at a digital agency whose response to online criticism is to immediately reach for the threat of legal action.</p>
<p>If they had chosen to ignore Luke&#8217;s tweet, it would have been seen by those of his 1,000-plus followers who regularly check Twitter, and perhaps passed along by some of them. The overall effect would almost certainly have been negligible.</p>
<p>Instead they came out blustering and, just as happened with the @gillianmckeith account the other week,  have whipped up a storm of virtual criticism.</p>
<p>I&#8217;m not sure these people really get how this &#8220;social web&#8221; thing works <img src='http://www.nickfitz.co.uk/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2010/07/24/more-antisocial-networking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Antisocial Networking</title>
		<link>http://www.nickfitz.co.uk/2010/07/14/antisocial-networking/</link>
		<comments>http://www.nickfitz.co.uk/2010/07/14/antisocial-networking/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 19:26:17 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Bad Science]]></category>
		<category><![CDATA[Ben Goldacre]]></category>
		<category><![CDATA[Common sense]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Gillian McKeith]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/?p=55</guid>
		<description><![CDATA[When running away from a social networking fiasco, HTML comments won't help you.]]></description>
			<content:encoded><![CDATA[<p class="update">For some background to the Twitter-related brouhaha that led to this post, read Jack of Kent&#8217;s <em><a href="http://jackofkent.blogspot.com/2010/07/integrity-and-honesty-of-gillianmckeith.html">The Integrity and Honesty of @gillianmckeith</a></em>.</p>
<p>So, <a href="http://twitter.com/gillianmckeith">@gillianmckeith</a> tweets that <a href="http://twitter.com/bengoldacre">@bengoldacre</a>&#8216;s <a href="http://www.amazon.co.uk/gp/product/000728487X?ie=UTF8&amp;tag=jusacod-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=000728487X">Bad Science</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.co.uk/e/ir?t=jusacod-21&amp;l=as2&amp;o=2&amp;a=000728487X" border="0" alt="" width="1" height="1" /> contains lies, and Mr Goldacre promptly calls her (if it was her&#8230;) on it. @gillianmckeith then appears to remove the offending tweets and tries to <a href="http://twitter.com/gillianmckeith/status/18517237896">suggest that that account isn&#8217;t necessarily <em>the</em> Gillian McKeith&#8217;s account</a>; but unfortunately it&#8217;s linked to from her own site (to which I am not granting any google linkjuice, by the way).</p>
<p>When this is pointed out, the link is removed from her site by somebody. Unfortunately, it&#8217;s only removed in the sense of being commented out, and is still clearly visible in the source. Also, as David Naylor points out, <a href="http://www.davidnaylor.co.uk/gillian-mckeith-vs-ben-goldacre.html">it&#8217;s still present on places like her YouTube channel</a>, which is linked to from the same &#8220;social networking&#8221; section of her site.</p>
<p>Time to bring out the big guns: now, the entire &#8220;social networking&#8221; section is removed.</p>
<p>You guessed it:</p>
<div class="long_lines">
<pre><code>
&lt;!--
&lt;div id="gillianssocialnetwork"&gt;
 &lt;a href="http://twitter.com/gillianmckeith" target="_blank" title="Follow Gillian on Twitter"&gt;
  &lt;img src="i/twitter.jpg" alt="Twitter" width="39" height="44" border="0" class="networkicon" /&gt;
 &lt;/a&gt;
 &lt;a href="http://www.facebook.com/GillianMcKeithOFFICIAL" target="_blank" title="Gillian's facebook Page"&gt;
  &lt;img src="i/facebook.jpg" alt="Facebook" width="39" height="44" border="0" class="networkicon" /&gt;
 &lt;/a&gt;
 &lt;a href="http://www.youtube.com/user/gillianmckeithTV" target="_blank" title="Gillian's YouTube Channel"&gt;
  &lt;img src="i/youtube.jpg" alt="Gillian's YouTube Channel" width="39" height="44" border="0" class="networkicon" /&gt;
 &lt;/a&gt;
 &lt;a href="http://uk.linkedin.com/in/gillianmckeith" target="_blank" title="Gillian on LinkdIn"&gt;
  &lt;img src="i/linkdin.jpg" alt="Gillian on LinkdIn" width="39" height="44" border="0" class="networkicon" /&gt;
 &lt;/a&gt;
&lt;/div&gt;
&lt;div class="rightcolitems"&gt;
 Do you social network? So does Gillian! Follow her on the links above
&lt;/div&gt;&lt;br /&gt;
--&gt;
</code></pre>
</div>
<p>All I can really say is: <code><a href="http://twitter.com/#search?q=%23viewsourceftw">#viewsourceftw</a></code>.</p>
<p>UPDATE, 2010-07-15T01:00: Actually, that isn&#8217;t the only Twitter-related content that has been commented out on that page. It also has the following:</p>
<div class="long_lines">
<code>
<pre>
&lt;!--    &lt;div id="twitterboxheader">&lt;a href="http://twitter.com/gillianmckeith" target="_blank">&lt;img src="i/gillianmckeith_on_twitter.jpg" alt="Follow Gillian on Twitter" border="0" title="Follow Gillian on Twitter"/>&lt;/a>
    &lt;/div>
&lt;div id="twitterboxmain">
&lt;div id="twitter_div">
&lt;ul id="twitter_update_list">&lt;/ul>
&lt;br />&lt;br />

&lt;/div>
&lt;a href="http://twitter.com/gillianmckeith" id="twitter-link" style="display:block;text-align:right; font-size:1.2em;" target="_blank">follow me on Twitter*lt;/a>
&lt;/div>
&lt;div id="twitterboxend">&lt;img src="i/twitterboxbase.jpg" />&lt;/div>&lt;br />&lt;br />-->
</code></pre>
</div>
<p>which is code to display the latest tweet from @gillianmckeith, and towards the end of the source code is some HTML loading some JavaScript:</p>
<div class="long_lines">
<code>
<pre>
&lt;script type="text/javascript" src="http://twitter.com/javascripts/blogger.js">&lt;/script>
&lt;script type="text/javascript" src="http://twitter.com/statuses/user_timeline/gillianmckeith.json?callback=twitterCallback2&amp;count=1">&lt;/script>
</code></pre>
</div>
<p>which actually updates that box with the most recent tweet.</p>
<p>You will notice that the JavaScript section hasn't been commented out. This would suggest that the data is still being loaded from that Twitter account by that page, whenever it is viewed. And indeed, a check with the wonderful <a href="http://www.charlesproxy.com/">Charles HTTP debugging proxy</a>, a tool which allows one to examine the low-level nuts and bolts of one's computer's communications with the web, shows that this is the case. When I load the page at gillianmckeith.info into my browser, the second script shown above sends the following additional HTTP request to Twitter from my browser:</p>
<div class="long_lines">
<code>
<pre>
GET /statuses/user_timeline/gillianmckeith.json?callback=twitterCallback2&amp;count=1 HTTP/1.1
Host: twitter.com
Pragma: no-cache
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
Accept: */*
Referer: http://www.gillianmckeith.info/
Cache-Control: no-cache
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Cookie: &lt;removed for security reasons>
Connection: keep-alive

</code></pre>
</div>
<p>which sends the response (formatted for clarity):</p>
<div class="long_lines">
<code>
<pre>
HTTP/1.1 200 OK
Date: Wed, 14 Jul 2010 23:38:55 GMT
Server: hi
Status: 200 OK
X-Transaction: 1279150735-24110-17319
X-RateLimit-Limit: 150
ETag: "fcf22c639f08a8ca540302c7c569266e"-gzip
Last-Modified: Wed, 14 Jul 2010 23:38:55 GMT
X-RateLimit-Remaining: 143
X-Runtime: 0.00977
Content-Type: application/json; charset=utf-8
Pragma: no-cache
X-RateLimit-Class: api
X-Revision: DEV
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
X-RateLimit-Reset: 1279153007
Set-Cookie: lang=en; path=/
Set-Cookie: &lt;removed for security reasons>
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 630
Connection: close

twitterCallback2(
[
    {
        "contributors":null,
        "source":"web",
        "created_at":"Wed Jul 14 13:06:40 +0000 2010",
        "coordinates":null,
        "truncated":false,
        "in_reply_to_status_id":null,
        "user": {
            "profile_link_color":"ff0073",
            "description":".",
            "location":"Earth",
            "profile_background_image_url":
            "http://a3.twimg.com/profile_background_images/111501429/Picture_145.png",
            "profile_image_url":
            "http://a0.twimg.com/profile_images/813972928/gillian1_normal.jpg",
            "profile_sidebar_fill_color":"e07ecc",
            "profile_background_tile":false,
            "screen_name":"gillianmckeith",
            "lang":"en",
            "statuses_count":1344,
            "created_at":"Tue Jul 08 15:26:42 +0000 2008",
            "profile_sidebar_border_color":"000000",
            "profile_use_background_image":true,
            "followers_count":2570,
            "contributors_enabled":false,
            "friends_count":16,
            "following":false,
            "geo_enabled":false,
            "profile_background_color":"ffffff",
            "protected":false,
            "favourites_count":1,
            "name":"Gillian McKeith",
            "verified":false,
            "profile_text_color":"000000",
            "url":"http://www.gillianmckeith.com",
            "id":15354299,
            "follow_request_sent":false,
            "notifications":false,
            "time_zone":"London",
            "utc_offset":0
        },
        "place":null,
        "geo":null,
        "in_reply_to_screen_name":null,
        "favorited":false,
        "id":18517738649,
        "in_reply_to_user_id":null,
        "text":"The moral of the story:  Love your neighbour and your enemies too."
    }
]);
</code></pre>
</div>
<p>That is data from the <a href="http://apiwiki.twitter.com/">Twitter API</a>, containing the public information about the @gillianmckeith account together with the most recent tweet from that account, in a standard data format called JSON. <a href="http://twitter.com/statuses/user_timeline/gillianmckeith.json?callback=twitterCallback2&#038;count=1">You can get the same info from this link</a>, just to show that there's nothing special going on here. In fact, here's <a href="http://twitter.com/statuses/user_timeline/nickfitz.json?callback=twitterCallback2&#038;count=1">the same info but for my Twitter account</a>.</p>
<p>So, whatever the reason might be that some person has removed the visible evidence of that Twitter account being related to Ms McKeith, the fact is that, at the time of writing, her web site is causing data from that Twitter account to be loaded into every JavaScript-enabled web browser that visits her home page; it just doesn't cause them to display the information once they've received it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2010/07/14/antisocial-networking/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More On ASP.NET&#8217;s Broken Error Handling</title>
		<link>http://www.nickfitz.co.uk/2008/12/10/more-on-aspnets-broken-error-handling/</link>
		<comments>http://www.nickfitz.co.uk/2008/12/10/more-on-aspnets-broken-error-handling/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 18:09:59 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Common sense]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2008/12/10/more-on-aspnets-broken-error-handling/</guid>
		<description><![CDATA[More on ASP.NET's peculiar approach to HTTP errors.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve looked a bit more into <a href="http://www.nickfitz.co.uk/2008/12/07/why-cant-microsoft-just-use-http-like-everybody-else/">the way ASP.NET handles HTTP errors</a>, and frankly it now seems not just irritating, but downright bizarre.<br />
<span id="more-33"></span><br />
By the way, although the original post was about a <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5">5xx series server error</a>, this also applies to <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4">4xx series client errors</a>. We&#8217;ll take the familiar <code>404 Not Found</code> as an example case.</p>
<p>Here are the main parts (with some headers and the body omitted) of the response to a broken request for <a href="http://blogs.msdn.com/oldnewthing/default.aspx">Raymond Chen&#8217;s blog</a> &#8211; I deliberately misspelled &#8220;default&#8221; as &#8220;defult&#8221; to trigger a 404:</p>
<p>
<pre><code>
HTTP/1.1 <strong>302 Found</strong>
Date: Wed, 10 Dec 2008 17:46:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
CommunityServer: 2.1.61025.2
<strong>Location: /error-notfound.aspx?aspxerrorpath=/oldnewthing/defult.aspx</strong>
Content-Type: text/html; charset=utf-8
Content-Length: 176
</code></pre>
</p>
<p>So, a request for something that is not found returns <code>302 Found</code>. Nice.</p>
<p>What happens when the browser follows the redirection to <code>/error-notfound.aspx?aspxerrorpath=/oldnewthing/defult.aspx</code>? This happens:</p>
<p>
<pre><code>
HTTP/1.1 <strong>404 Not Found</strong>
Date: Wed, 10 Dec 2008 17:46:52 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
CommunityServer: 2.1.61025.2
Content-Type: text/html; charset=utf-8
Content-Length: 11769
</code></pre>
</p>
<p>So, just to get this straight: when something is not found, ASP.NET returns a <code>302 Found</code> response redirecting the client elsewhere. Then, when the redirect is followed, it returns a <code>404 Not Found</code> response, despite the fact that this page clearly <em>has</em> been found, and it was the page that redirected us here that was <em>not</em> found.</p>
<p>Weird. Just plain weird.</p>
<p>Update: an online acquaintance (I don&#8217;t have a URL for him) has pointed me to a page on <cite><abbr title="Microsoft Developer Network">MSDN</abbr></cite> where <a href="http://msdn.microsoft.com/en-us/library/aa479319.aspx">the rationale for this behaviour</a> is presented:</p>
<blockquote cite="http://msdn.microsoft.com/en-us/library/aa479319.aspx"><p>
Redirect creates a new Context, Transfer does not. Redirect requires a round-trip to the browser, Transfer does not. As a result of this round-trip, Redirect rewrites the URL to reflect the location of the error page, Transfer does not.</p>
<p>
If this seems to be an argument in favor of Transfer, it isn&#8217;t. The rationale of the ASP.NET development team is that Redirect <em>accurately displays the URL of the custom error page</em>&#8230;
</p>
</blockquote>
<p>However, at no point is it explained <em>why</em> displaying such an implementation detail to clients is preferable. Given that the article starts with the words:</p>
<blockquote cite="http://msdn.microsoft.com/en-us/library/aa479319.aspx"><p>The quality of a site should be measured not only by how well it works, but by how gracefully it fails.</p>
</blockquote>
<p>it seems strange that it then recommends a technique which causes sites to fail in a singularly graceless manner.</p>
<p>My suggestion would be to modify your ASP.NET application configurations so that the <code>customError</code> capability uses the <code>Transfer</code> technique instead of <code>Redirect</code>. If that </p>
<blockquote><p>&#8230;breaks a tenet of the design philosophy of ASP.NET&#8230;</p>
</blockquote>
<p> then so be it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2008/12/10/more-on-aspnets-broken-error-handling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Can&#8217;t Microsoft Just Use HTTP Like Everybody Else?</title>
		<link>http://www.nickfitz.co.uk/2008/12/07/why-cant-microsoft-just-use-http-like-everybody-else/</link>
		<comments>http://www.nickfitz.co.uk/2008/12/07/why-cant-microsoft-just-use-http-like-everybody-else/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 05:57:39 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Common sense]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2008/12/07/why-cant-microsoft-just-use-http-like-everybody-else/</guid>
		<description><![CDATA[A 5xx server error shouldn't redirect the user to a new location. They should be left where they are, ready to retry when the server has recovered.]]></description>
			<content:encoded><![CDATA[<p>A few moments ago I was following a link from Google to Raymond Chen&#8217;s excellent MSDN blog <a href="http://blogs.msdn.com/oldnewthing/default.aspx">The Old New Thing</a>. As has happened to me before, I ended up getting redirected to an ASP.NET error page at a totally different URL, telling me that the site was &#8220;unable to service my request.&#8221;<br />
<span id="more-32"></span><br />
Now, the inability to serve the requested page is fair enough; Raymond has previously mentioned that the <code>blogs.msdn.com</code> site can be slow or overloaded because it comes under such relentless attack from comment spammers.</p>
<p>But a redirect to the absolute URL of an error page? That&#8217;s just annoying. It means that I can&#8217;t try to reload the page to see if the server has recovered from whatever issues are affecting it &#8211; or, more accurately, I can try to reload, but as I&#8217;m now at the absolute URL of the error page, I just keep reloading that.</p>
<p>Unsurprisingly, the HTTP 1.1 standard has already provided for this kind of situation by means of the <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4"><code>503 Service Unavailable</code></a> status code:</p>
<blockquote><p>The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay.</p>
</blockquote>
<p>If the <code>blogs.msdn.com</code> people (who, by the way, Raymond is not responsible for) would use this status code to serve their error page for the post on Raymond&#8217;s blog, I could simply come back after a few minutes and try to reload the page, as my browser would still be at the same location. </p>
<p>It&#8217;s also possible that they <em>do</em> send this status code, but with a <code>Location: </code> header to cause the redirect. (The server seems to be back on its feet again now, so I can&#8217;t inspect the HTTP cycle to check.)</p>
<p>Either way, what they do is wrong and broken. <strong>Don&#8217;t</strong> send people somewhere else to explain a <code>5xx Server Error</code> status; simply serve the explanation directly using the appropriate 5xx status code, leaving your visitors ready to try a reload when the server has recovered. Otherwise, you&#8217;ll serve a lot of <code>200 OK</code> responses from your error page, most of them to people who haven&#8217;t noticed that their location bar now points there as they hit <code>[Control | Command]-R</code> in the hope of seeing what they originally came for.</p>
<p>Note: A more recent post <a href="http://www.nickfitz.co.uk/2008/12/10/more-on-aspnets-broken-error-handling/">examines this aspect of ASP.NET in greater depth</a>, and suggests the use of a configuration option that resolves the problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2008/12/07/why-cant-microsoft-just-use-http-like-everybody-else/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bandwidth? Yeah, whatever&#8230;</title>
		<link>http://www.nickfitz.co.uk/2008/08/13/bandwidth-yeah-whatever/</link>
		<comments>http://www.nickfitz.co.uk/2008/08/13/bandwidth-yeah-whatever/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 03:08:32 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Common sense]]></category>
		<category><![CDATA[Freedom]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2008/08/13/bandwidth-yeah-whatever/</guid>
		<description><![CDATA[Well, that&#8217;s nice. The Council&#8217;s electoral registration form came through the door today, so I visited the web site to indicate that everything&#8217;s the same. I now have the confirmation email. Definition of &#8220;line&#8221; in the following examination of the content of said email: something delimited by an RFC 2822-compliant line-delimiter (see third paragraph of [...]]]></description>
			<content:encoded><![CDATA[<p>Well, that&#8217;s nice.</p>
<p>The Council&#8217;s <a href="https://www.registerbyinternet.com/default.aspx">electoral registration</a> form came through the door today, so I visited the web site to indicate that everything&#8217;s the same.<br />
<span id="more-30"></span><br />
I now have the confirmation email.</p>
<p>Definition of &#8220;line&#8221; in the following examination of the content of said email: something delimited by an <a href="http://tools.ietf.org/html/rfc2822#section-2.1">RFC 2822-compliant line-delimiter</a> (see third paragraph of section 2.1), excluding empty lines (that is, lines preceded by, and containing only, such a delimiter). </p>
<p>Content relating to me personally: 3 lines.</p>
<p>Content that&#8217;s merely relating to my confirmation (including &#8220;Thank you&#8221; and such, and therefore reasonable to include): 3 lines.</p>
<p>Content after that stuffed with legal garbage: 15 lines.</p>
<p>I&#8217;m tempted to do a word count, but let&#8217;s just estimate that there are something like twenty or thirty times as many words in the legalese as there are in the actual content of the message.</p>
<p>And people wonder why the Internet feels slow today.</p>
<p>P.S. Bonus points for the fact that, if I leave the &#8220;default.aspx&#8221; off the first link, the server returns an empty page, and is apparently Tomcat, despite the fact that the actual application is running on ASP.NET.</p>
<p>Without <code>default.aspx</code>:</p>
<pre><code>
HTTP/1.1 200 OK
Date: Wed, 13 Aug 2008 02:22:32 GMT
Server: Apache Tomcat/4.1.12 (HTTP/1.1 Connector)
Cache-control: private
Content-Length: 0
Content-Type: text/html

</code></pre>
<p><em>With</em> <code>default.aspx</code>:</p>
<pre><code>
HTTP/1.1 200 OK
Date: Wed, 13 Aug 2008 02:27:31 GMT
Server: WebSTAR/4.5(SSL)
Cache-Control: private
Content-Length: 71428
Content-Type: text/html; charset=utf-8

</code></pre>
<p>Ho hum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2008/08/13/bandwidth-yeah-whatever/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Avoidance != Solution</title>
		<link>http://www.nickfitz.co.uk/2008/07/31/avoidance-solution/</link>
		<comments>http://www.nickfitz.co.uk/2008/07/31/avoidance-solution/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 01:25:43 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Common sense]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2008/07/31/avoidance-solution/</guid>
		<description><![CDATA[On a forum I frequent, somebody recently posted a tale about some sysadmins having a problem with a server. Said server kept on restarting due to a signal from the UPS indicating that its power drain was excessive. The solution the sysadmins came up with? Disable the MicrosoftÂ® Exchangeâ„¢ service running on that server, to [...]]]></description>
			<content:encoded><![CDATA[<p>On a forum I frequent, somebody recently posted a tale about some sysadmins having a problem with a server. Said server kept on restarting due to a signal from the <abbr title="Uninterruptible Power Supply">UPS</abbr> indicating that its power drain was excessive.<br />
<span id="more-29"></span><br />
The solution the sysadmins came up with? Disable the MicrosoftÂ® Exchangeâ„¢ service running on that server, to reduce CPU load, and thereby reduce the power being consumed by the server, and thereby stop the UPS getting upset.</p>
<p>The obvious question is: why was the server running a service which isn&#8217;t necessary (if it was necessary, how can they turn it off)? But this is a sidetrack question.</p>
<p>The important point is that the &#8220;solution&#8221; wasn&#8217;t a solution, it was a way of making the problem go away. This doesn&#8217;t work, and as a rule, the problem comes back in a much worse form. </p>
<p>Don&#8217;t make the mistake of thinking you&#8217;ve solved a problem by brushing it under the carpet. In the long run, it tends to ruin the carpet.</p>
<p>The solution is to provide a solution, not find a way of ignoring the problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2008/07/31/avoidance-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

