<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.11" -->
<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/"
	>

<channel>
	<title>Just a Coder</title>
	<link>http://www.nickfitz.co.uk</link>
	<description>The occasional online observations of Nick Fitzsimons</description>
	<pubDate>Tue, 07 Jul 2009 23:28:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.11</generator>
	<language>en</language>
			<item>
		<title>XHTML 2 Canned&#8230;</title>
		<link>http://www.nickfitz.co.uk/2009/07/07/xhtml-2-canned/</link>
		<comments>http://www.nickfitz.co.uk/2009/07/07/xhtml-2-canned/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 23:27:29 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
		
		<category>General</category>

		<category>Web Development</category>

		<category>Web Standards</category>

		<category>XHTML 2</category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2009/07/07/xhtml-2-canned/</guid>
		<description><![CDATA[&#8230;not many dead.
In other news:

Phlogiston &#8220;seemed like a good idea at the time&#8221;;
Doubt cast on Ussher chronology;
Cold Fusion - yeah, right.


Next, the Shipping Forecast.

]]></description>
			<content:encoded><![CDATA[<p>&#8230;<a href="http://hsivonen.iki.fi/xhtml2-html5-q-and-a/">not many dead</a>.</p>
<p>In other news:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Phlogiston_theory">Phlogiston</a> &#8220;seemed like a good idea at the time&#8221;;</li>
<li>Doubt cast on <a href="http://en.wikipedia.org/wiki/Ussher_chronology">Ussher chronology</a>;</li>
<li><a href="http://en.wikipedia.org/wiki/Cold_Fusion">Cold Fusion</a> - yeah, right.</li>
</ul>
<p>
Next, the <a href="http://www.bbc.co.uk/weather/coast/shipping/">Shipping Forecast</a>.
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2009/07/07/xhtml-2-canned/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fix After Security Update 2009-001 Bricked My MacBook</title>
		<link>http://www.nickfitz.co.uk/2009/03/01/fix-after-security-update-2009-001-bricked-my-macbook/</link>
		<comments>http://www.nickfitz.co.uk/2009/03/01/fix-after-security-update-2009-001-bricked-my-macbook/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 20:30:57 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
		
		<category>General</category>

		<category>Macintosh</category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2009/03/01/fix-after-security-update-2009-001-bricked-my-macbook/</guid>
		<description><![CDATA[This afternoon I finally got around to letting Software Update install the OS X Security Update 2009-001 for Tiger on my MacBook.
Being an idiot, I didn&#8217;t do a backup first. When the system restarted, it got to the grey screen with the Apple logo and the spinning gear, where it remained&#8230; for over half an [...]]]></description>
			<content:encoded><![CDATA[<p>This afternoon I finally got around to letting Software Update install the OS X Security Update 2009-001 for Tiger on my MacBook.</p>
<p>Being an idiot, I didn&#8217;t do a backup first. When the system restarted, it got to the grey screen with the Apple logo and the spinning gear, where it remained&#8230; for over half an hour.</p>
<p>At this point I gave up and switched over to my PowerMac, where an intensive Google session commenced. There appear to be a number of people encountering this or similar problems, but various suggested solutions didn&#8217;t work.</p>
<p>I was able to mount the MacBook on the PowerMac in <a href="http://support.apple.com/kb/HT1661">target disk mode</a> (which somebody on <a href="http://discussions.apple.com/message.jspa?messageID=9045921#9045921">this Apple Support Discussions thread</a> wrongly claims is impossible) and followed some of the steps listed at MacFixIt&#8217;s &#8220;<a href="http://www.macfixit.com/article.php?story=20060322080433175">Startup fails (particularly after a system or security update); solving</a>&#8221; tutorial, specifically, deleting assorted cached OS files.</p>
<p>However, the MacBook still wouldn&#8217;t start, not even in Safe Mode.</p>
<p>So I then downloaded <a href="http://www.apple.com/downloads/macosx/apple/security_updates/securityupdate2009001tigerintel.html">the standalone installer for the update</a> from Apple. Despite being an Intel update, this ran on the PowerMac, and detected that the FireWire drive was a bootable Intel OS X installation. It installed successfully, and having ejected the MacBook drive, I restarted, holding down the Shift key to reboot in Safe Mode.</p>
<p>Bingo! The MacBook booted up. I restarted again, and it booted normally.</p>
<p>Panic over, and time to do a backup.</p>
<p>Hopefully this solution will prove helpful to anybody in the same situation.
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2009/03/01/fix-after-security-update-2009-001-bricked-my-macbook/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Theme: GiltEdge 0.1 alpha</title>
		<link>http://www.nickfitz.co.uk/2009/01/27/new-theme-giltedge/</link>
		<comments>http://www.nickfitz.co.uk/2009/01/27/new-theme-giltedge/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 15:31:59 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
		
		<category>General</category>

		<category>Web Development</category>

		<category>WordPress</category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2009/01/27/new-theme-giltedge/</guid>
		<description><![CDATA[At long last, I&#8217;ve got around to developing a new theme for the site. Given the gold-and-lead colour scheme, and the dire financial straits the World currently finds itself in, the name GiltEdge seemed fitting :-)

It&#8217;s not complete yet - there are a few spots that aren&#8217;t quite pixel-perfect yet, and I&#8217;ve only tested in [...]]]></description>
			<content:encoded><![CDATA[<p>At long last, I&#8217;ve got around to developing a new theme for the site. Given the gold-and-lead colour scheme, and the dire financial straits the World currently finds itself in, the name GiltEdge seemed fitting :-)<br />
<a id="more-35"></a><br />
It&#8217;s not complete yet - there are a few spots that aren&#8217;t quite pixel-perfect yet, and I&#8217;ve only tested in Firefox and Safari on the Mac. Still, I thought I&#8217;d put it up in the hope that any visitors might kindly post a comment about any obviously broken bits they come across.</p>
<p class="update"><del>UPDATE: It&#8217;s wretchedly broken in IE6, and far from perfect in IE7. Why am I not surprised?</del></p>
<p class="update"><del>UPDATE: And, with a few hasLayout triggers, most of the IE issues are fixed. Just a few more to do.</del></p>
<p class="update">UPDATE: Everything now seems to be OK in IE 6, 7 and 8. There&#8217;s a conditional stylesheet for 6 and 7, almost entirely devoted to <code>hasLayout</code> triggers.</p>
<p>One thing I know about is the empty &#8220;navigation&#8221; section at the top of archive pages when there are no &#8220;next&#8221; or &#8220;previous&#8221; pages. I&#8217;ll have to dig into the WordPress API to check out how to make that section appear only when appropriate.</p>
<p>Once the little niggles like that are done, it&#8217;ll be time to start work on some more extensive customisations, together with a plugin or two.</p>
<p>In the meantime, enjoy! - or, if it breaks horribly for you, leave a comment.</p>
<h3>About the Picture</h3>
<p>The photograph at the top was taken at around 4:15pm on the 11th December 2007 from the 6th floor of <a href="http://maps.google.co.uk/?ie=UTF8&#038;ll=51.513944,-0.128596&#038;spn=0.003619,0.009323&#038;t=h&#038;z=17">Yahoo! Europe&#8217;s offices</a> on Shaftesbury Avenue in London. (I hadn&#8217;t broken in - I was contracting with them at the time.) The view looks over the rooftops of Seven Dials and Covent Garden towards Westminster; on the left is the Church of St Martin in the Fields near Trafalgar Square. Then, moving right, the light at the top of the clocktower commonly, if erroneously, called Big Ben shows that Parliament was in session at the time. A floodlit Westminster Abbey is next, contrasting sharply with the modern structure of Millbank Tower. Finally, I&#8217;m not absolutely certain, but I think the tower block at the right with the blue lights on top may be New Scotland Yard.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2009/01/27/new-theme-giltedge/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Urgent Update of Internet Explorer - Install It Now</title>
		<link>http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/</link>
		<comments>http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 04:03:49 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
		
		<category>General</category>

		<category>Internet Explorer</category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/</guid>
		<description><![CDATA[Given that I&#8217;m so prone to criticising Microsoft, I have to give them credit for moving so rapidly to provide a patch for the recently discovered vulnerability in Internet Explorer.

One little niggle: The email subject line &#8220;Out-of-Band Microsoft Security Bulletin Summary for December 2008&#8243; isn&#8217;t exactly clear. It uses terminology (&#8221;Out-of-Band&#8221;) relating to MS&#8217;s update [...]]]></description>
			<content:encoded><![CDATA[<p>Given that I&#8217;m so prone to criticising Microsoft, I have to give them credit for moving so rapidly to provide a patch for the recently discovered vulnerability in Internet Explorer.<br />
<a id="more-34"></a><br />
One little niggle: The email subject line &#8220;Out-of-Band Microsoft Security Bulletin Summary for December 2008&#8243; isn&#8217;t exactly clear. It uses terminology (&#8221;Out-of-Band&#8221;) relating to MS&#8217;s update release strategy that probably makes no sense whatsoever to most people, who won&#8217;t even be aware of the monthly patch strategy. &#8220;Out-of-Band&#8221; is such a recondite term, being a technical usage that Microsoft are metaphorically relating to what is primarily a social issue of encouraging people to install an update, that it serves to obscure the importance of said update. What&#8217;s wrong with the word &#8220;Urgent&#8221;?</p>
<p>Still, leaving my obligatory whining aside, the number of versions and configurations patched makes it very clear that all users of Internet Explorer <em>must</em> install this one - and if your system isn&#8217;t supported, you <strong>really should upgrade</strong>.</p>
<p>What impresses me about this update is that it includes support for systems and versions so old that no web developer supports them anymore. This demonstrates that although we web devs may be able to pick and choose what we worry about through graded browser support (as do, for example, <a href="http://developer.yahoo.com/yui/articles/gbs/">Yahoo!</a> and <a href="http://www.bbc.co.uk/guidelines/futuremedia/technical/browser_support.shtml">the BBC</a>), there are nonetheless software developers out there, grappling with old C or C++ code, who are doing the desperately difficult job of supporting users of older systems. <a href="http://www.microsoft.com/technet/security/bulletin/ms08-dec.mspx">The list of systems and versions</a> they had to be sure to fix, and test, is available at Microsoft&#8217;s site: seventeen different combinations of operating system and browser version. <em>Seventeen!</em></p>
<p>Think about fixing and testing that little lot next time you&#8217;re upset by the <a href="http://positioniseverything.net/explorer/threepxtest.html">3-pixel text jog</a> ;-)
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/feed/</wfw:commentRss>
		</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>General</category>

		<category>Bugs</category>

		<category>Web Development</category>

		<category>Web Standards</category>

		<category>Microsoft</category>

		<category>Common sense</category>

		<category>HTTP</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 />
<a id="more-33"></a><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> - 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>
		</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>General</category>

		<category>Bugs</category>

		<category>Web Development</category>

		<category>Web Standards</category>

		<category>Common sense</category>

		<category>HTTP</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 />
<a id="more-32"></a><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 - 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>
		</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>General</category>

		<category>Freedom</category>

		<category>Web Development</category>

		<category>Web Standards</category>

		<category>Common sense</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 section 2.1), excluding [...]]]></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 />
<a id="more-30"></a><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>
		</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>General</category>

		<category>Common sense</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 reduce [...]]]></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 />
<a id="more-29"></a><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>
		</item>
		<item>
		<title>Why &#8220;left: -9999px;&#8221; is Better For Accessibility Than &#8220;display: none;&#8221;</title>
		<link>http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/</link>
		<comments>http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/#comments</comments>
		<pubDate>Wed, 14 Feb 2007 18:17:20 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
		
		<category>General</category>

		<category>Internet Explorer</category>

		<category>Web Development</category>

		<category>Web Standards</category>

		<category>CSS</category>

		<category>Microsoft</category>

		<category>Accessibility</category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/</guid>
		<description><![CDATA[Update: Thierry Koblentz points out in the comments that either technique may be appropriate, depending on circumstances. I mention this in the last paragraph, but just to be clear, there should have been a &#8220;usually&#8221; or &#8220;often&#8221; or some such word in front  of the &#8220;better&#8221; of the title. That, or a different title.
Update [...]]]></description>
			<content:encoded><![CDATA[<p class="update"><strong>Update:</strong> <a href="http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/#comment-21146">Thierry Koblentz points out</a> in the comments that either technique may be appropriate, depending on circumstances. I mention this in the last paragraph, but just to be clear, there should have been a &#8220;usually&#8221; or &#8220;often&#8221; or some such word in front  of the &#8220;better&#8221; of the title. That, or a different title.</p>
<p class="update"><strong>Update 2, December 2008:</strong> It is now accepted that it is better to use <code>top: -9999px;</code>, as using <code>left:</code> would cause a scroll bar on <a href="http://news.bbc.co.uk/hi/arabic/news/">a page with right-to-left text</a>.</p>
<p>A recurring question on various mailing lists such as the <a href="http://webstandardsgroup.org/">Web Standards Group</a> discussion list is &#8220;How can I hide content but still have it accessible?&#8221; This is usually asked in the context of <a href="http://www.access-matters.com/2005/05/08/quiz-114-image-replacement-techniques/">image replacement techniques</a>, where one might for example wish to display a heading in a fancy typeface, but still have the content accessible to users of assistive technologies such as screen reading software.<br />
<a id="more-24"></a><br />
Two techniques, both reliant on CSS, tend to come up in these discussions: hiding the text by the use of <code>display: none</code> or <code>visibility: hidden</code>, and positioning the text off-screen, using absolute positioning and <code>left: -9999px</code>, or <code>margin-left: -9999px</code>.</p>
<p><a href="http://access-matters.com/">Access Matters</a> determined back in June 2005 that the <code>display</code> and <code>visibility</code> techniques appeared to be inaccessible to screen readers, whereas the offscreen positioning method was accessible. The <a href="http://access-matters.com/screen-reader-test-results/">full results</a> go into more detail.</p>
<p>One thing that nobody seemed to have bothered to explain was just <em>why</em> this was the case. Inspired by yet another thread on the subject, I finally decided to do some digging; if I don&#8217;t know <em>why</em> I&#8217;m doing something, I can&#8217;t be sure that I <em>should</em> be doing it, which leads to the risk of <a href="http://catb.org/jargon/html/C/cargo-cult-programming.html">Cargo Cult coding</a>.</p>
<h3>Ask the people who know</h3>
<p>To my astonishment, a search of the <a href="http://msdn.microsoft.com/library">Microsoft Developer Network Library</a> quickly brought me to the explanation I sought. (I was astonished because the MSDN library search is notorious for returning swathes of irrelevant results for even the simplest search; I have heard anecdotal evidence that Microsoft&#8217;s own developers search the library using Google with the <code>site:msdn.microsoft.com</code> specifier.)</p>
<p>The library&#8217;s section on <a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/accessibility/accessibility_node_entry.asp">accessibility support in Internet Explorer</a> is extensive, but the information about <a href="https://msdn.microsoft.com/workshop/browser/accessibility/overview/invisible.asp">invisible objects</a> told me all I needed to know. To quote:</p>
<blockquote cite="https://msdn.microsoft.com/workshop/browser/accessibility/overview/invisible.asp"><p>With Internet Explorer 6 and later, the <code>pvarState</code> parameter of the <code>IAccessible::get_accState</code> property receives <code>STATE_SYSTEM_OFFSCREEN</code> when the object is invisible because of scrolling and receives <code>STATE_SYSTEM_INVISIBLE</code> when the object is invisible because its <code>IHTMLStyle::visibility</code> property is set to <code>hidden</code>, or its <code>IHTMLStyle::display</code> property is set to <code>none</code>.</p></blockquote>
<h3>Again, in English?</h3>
<p>A screen reader doesn&#8217;t load an HTML page: the browser (usually Internet Explorer) does that. What the screen reader does is to ask IE about the content, using an API called <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaastart_9w2t.asp">Microsoft Active Accessibility</a> (MSAA). MSAA allows the screen reader to interrogate the browser as to the contents of a page; the dialog, insofar as I understand it, would go something like:</p>
<dl>
<dt>Internet Explorer:</dt>
<dd>Hey, I&#8217;ve just loaded a page.</dd>
<dt>Screen reader:</dt>
<dd>Cool, what&#8217;s it got on it?</dd>
<dt>Internet Explorer:</dt>
<dd>There&#8217;s a heading, then some links, then a few paragraphs.</dd>
<dt>Screen reader:</dt>
<dd>OK; give us the heading.</dd>
<dt>Internet Explorer:</dt>
<dd>It says &#8220;Welcome to HyperGlobalMegaCorp&#8221;.</dd>
<dt>Screen reader:</dt>
<dd>Right, hang on a moment. <em>(Speaks the given text to the user.)</em>  </dd>
</dl>
<p>&#8230; and so on; you get the general idea.</p>
<p>The key is that IE doesn&#8217;t just return content to be spoken in some way; it also returns information <em>about</em> that content. This includes information that goes by the snappy name of <code>pvarState</code>, and one of the aspects of this information is that it can tell the screen reader whether or not the content of the thing it&#8217;s asking about (for example, the heading in the above dialogue) is actually displayed on the screen - that is, whether it&#8217;s visible or invisible. (Note that these terms aren&#8217;t being used here in exactly the same way as they are in CSS.)</p>
<p>There are three ways that IE comes to regard something as being invisible:</p>
<ol>
<li>It has the CSS property <code>display</code> set to the value <code>none</code>;</li>
<li>It has the CSS property <code>visibility</code> set to the value <code>hidden</code>;</li>
<li>It is in a position where the window would need to be scrolled for it to become visible.</li>
</ol>
<p>IE further distinguishes these three forms of invisibility by dividing them into two kinds. The first two forms of invisibility are denoted by the <code>pvarState</code> value <code>STATE_SYSTEM_INVISIBLE</code>, and the final form is denoted by the value <code>STATE_SYSTEM_OFFSCREEN</code>.</p>
<p>So finally it all becomes clear: screen readers will treat content with the state <code>STATE_SYSTEM_OFFSCREEN</code> as being content that it should read, because it&#8217;s only invisible by virtue of not being within the visible region of the window: after all, a screen reader that required the user to scroll the window to read all of the content would be of very little value to anybody. The only reason that the content can&#8217;t actually be scrolled into view when using the off-left or off-top positioning technique is that Internet Explorer itself doesn&#8217;t support the concept of scrolling the window by a negative amount, although I believe this isn&#8217;t a limitation of the Windows scrolling mechanism <span lang="la">per se</span>.</p>
<p>If, however, the screen reader finds that the state of the content is <code>STATE_SYSTEM_INVISIBLE</code> it apparently concludes that it must have been concealed for a reason, and doesn&#8217;t speak it.</p>
<p>So there you go: use one of the offscreen methods and the screen reader will treat your content as being there; use the <code>display</code> or <code>visibility</code> method and the screen reader will discard it, meaning that this is a reliable way of concealing content from both a normal user and a screen reader user, should you have a reason to do so. But armed with the information above, you&#8217;ll at least know <em>why</em> you&#8217;re using whichever method you apply.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WebDD: Microsoft&#8217;s Reality Distortion Field is Fully Functional</title>
		<link>http://www.nickfitz.co.uk/2007/02/06/webdd-microsofts-reality-distortion-field-is-fully-functional/</link>
		<comments>http://www.nickfitz.co.uk/2007/02/06/webdd-microsofts-reality-distortion-field-is-fully-functional/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 17:10:33 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
		
		<category>General</category>

		<category>Web Development</category>

		<category>Photography</category>

		<category>WebDD</category>

		<category>Conferences</category>

		<category>Microsoft</category>

		<category>Macintosh</category>

		<category>Me</category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2007/02/06/webdd-microsofts-reality-distortion-field-is-fully-functional/</guid>
		<description><![CDATA[

 
 

  A designer?
  

  Originally uploaded by writerus drivelus.
 


Last Saturday I went to the WebDD conference at Microsoft Campus, Reading. Following my standard conference procedure, I checked in, obtained coffee, and fired up my MacBook.



At this point one of the official photographers (only authorised individuals may take photos at [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr">
<div class="photo">
 <a href="http://www.flickr.com/photos/43663754@N00/380482052/" title="photo sharing"><img src="http://farm1.static.flickr.com/167/380482052_1a4999424a_m.jpg" alt="A designer?" title="" /></a>
 </div>
<p class="caption">
  <a href="http://www.flickr.com/photos/43663754@N00/380482052/">A designer?</a>
  </p>
<p class="attribution">
  Originally uploaded by <a href="http://www.flickr.com/people/43663754@N00/">writerus drivelus</a>.
 </p>
</div>
<p>
Last Saturday I went to the <a href="http://www.webdd.org.uk/">WebDD</a> conference at <a href="http://www.microsoft.com/uk/about/map-reading.mspx">Microsoft Campus, Reading</a>. Following my standard conference procedure, I checked in, obtained coffee, and fired up my <a href="http://www.apple.com/macbook/">MacBook</a>.
</p>
<p><a id="more-23"></a></p>
<p>
At this point one of the official photographers (only authorised individuals may take photos at MS) rushed over to me and asked, &#8220;Is it all right if I take a photograph of you?&#8221;
</p>
<p>
&#8220;Yeah, fine,&#8221; I replied. As he raised his camera, I asked, &#8220;Is it the Mac?&#8221; &#8220;Yes,&#8221; he said.
</p>
<p>
I&#8217;d only been at Microsoft five minutes, but the Reality Distortion Field had already cast me into a <a href="http://www.hmbateman.com/">Bateman cartoon</a>: &#8220;The Man Who Used a Macintosh on Microsoft Campus.&#8221;
</p>
<p>
(And no, I&#8217;m not a designer.)
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2007/02/06/webdd-microsofts-reality-distortion-field-is-fully-functional/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
