<?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>From Accessibility to Zope &#187; Web Standards</title>
	<atom:link href="http://blog.mauveweb.co.uk/category/web-standards/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mauveweb.co.uk</link>
	<description>experiments in contemporary web development</description>
	<lastBuildDate>Thu, 18 Aug 2011 23:26:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fonts and font-family</title>
		<link>http://blog.mauveweb.co.uk/2010/02/03/fonts-and-font-family/</link>
		<comments>http://blog.mauveweb.co.uk/2010/02/03/fonts-and-font-family/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 19:10:54 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/?p=362</guid>
		<description><![CDATA[Yesterday, on Twitter, I watched a discussion emerge as one person I follow pointed out that another person's hosted wordpress.com blog was illegible on her computer, with all of the content appearing in ugly bold italics.
While we never got to the bottom of that issue (I couldn't reproduce it), it's worth backing up and examining [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, on Twitter, I watched a discussion emerge as one person I follow pointed out that another person's hosted wordpress.com blog was illegible on her computer, with all of the content appearing in ugly bold italics.</p>
<p>While we never got to the bottom of that issue (I couldn't reproduce it), it's worth backing up and examining font use on the web.</p>
<p><strong>Fonts, unlike any other aspect of web browser rendering, depend on the platform, not the browser version.</strong></p>
<p>The reason is simple: fonts are not bundled with the browser, but with the operating system, or installed with some creative applications.</p>
<p>If you select fonts based on how they look on your computer, they will look different on another computer with a different set of fonts installed. Also, fonts are matched by name in <acronym title="Cascading Style Sheets">CSS</acronym>, so when you write</p>
<p><code language="css">font-family: "Helvetica", "Arial", sans-serif;</code></p>
<p>you are requesting a font named "Helvetica", then one named "Arial", then the default sans-serif fonts. This is a very common thing for people to write, because Helvetica is a popular choice on Mac, Arial is a popular choice on Windows, and sans-serif is a catch-all. The intention is to select a nice sans-serif font on each platform.</p>
<p>Unfortunately, "Helvetica" can exist on Windows and Linux as well as Mac. Helvetica has been around as a typeface since 1957, and there are different versions of it around &#8211; by what route, or with what degree of intellectual property infringement, I do not know. There are also <a href="http://en.wikipedia.org/wiki/Helvetica#Helvetica">a fair number of variants</a> that your computer might also consider, if they are installed.</p>
<p>On Linux, Helvetica was historically an X bitmap font (ugly, impractical things that are now effectively dead). These days it is generally an fontconfig alias for a free sans-serif font, but renders with iffy hinting and kerning, perhaps to conform to the original font's metrics (ie. it has been shoehorned into exactly the same space, so that printed publications don't come out wrong). I actually find this font quite uncomfortable to read.</p>
<p>On Windows, you may occasionally find Helvetica exists, perhaps even as the same font, installed on its own, or with some software suite, but if you do you'll find several browsers on Windows render fonts with Microsoft's ClearType renderer optimised for legibility, not the Mac's quality-optimised renderer, also used in Safari 3 on Windows. Microsoft own fonts have been tweaked to work well with ClearType &#8211; others may not. Linux is (as ever) more flexible: it's possible to configure the amount of hinting to use through fontconfig, although most users will keep their distribution's defaults.</p>
<p>Ultimately it's an impenetrable picture &#8211; you cannot be sure that the fonts you list will give anything like the browsing experience you were expecting. The same overall picture applies with serif fonts and monospace fonts.</p>
<p>The best solution (unless you want to try downloadable fonts, which I wouldn't recommend for body fonts) is to side-step the specifics of fonts entirely and delegate to the user/browser/operating system. There are three suitable aliases for font families: <code>sans-serif</code>, <code>serif</code>, and <code>monospace</code>. These will reliably give you a good font of that category. There are two other aliases, <code>cursive</code> and <code>fantasy</code> which are too poorly defined &#8211; you could get practically anything.</p>
<p>Is this really the only option? If you're prepared to go to the enormous lengths required, can you not pick a list of named fonts, test broadly and claim it works? Well, yes, if you test broadly enough you can get say 99.9% coverage. Unfortunately, that's not always good enough.</p>
<p>The topic of a site turns out to significantly affect the statistics of users that visit it. For example, a site about Linux will get more Linux hits. A site about using Photoshop will get most hits from people with Adobe Creative Suites installed, and that <a href="http://blogs.adobe.com/typblography/CS3fonts.html">comes with fonts</a>. So as a theme designer, what was 99%+ for you could be 90% for some of the people who use your theme.</p>
<p>So, in summary, stick to the safe fonts: sans-serif, serif and monospace. Fonts that are ubiquitious and designed for the screen are also quite safe &#8211; Arial and Verdana. You might be able to find some other safe places <a href="http://www.codestyle.org/css/font-family/index.shtml">by consulting statistics</a> if you are feeling creatively hemmed in. But please, don't make font assumptions.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2010/02/03/fonts-and-font-family/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seam Carving</title>
		<link>http://blog.mauveweb.co.uk/2008/08/30/seam-carving/</link>
		<comments>http://blog.mauveweb.co.uk/2008/08/30/seam-carving/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 12:07:47 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/?p=157</guid>
		<description><![CDATA[I've just come across this awesome technique:

One of the reasons designers like to use fixed rather than fluid website layouts is because of the difficulty in providing attractive images at unknown aspect ratios. This technique offers a really beautiful solution.
The presentation shows that all that is needed to apply the effect is an image plane [...]]]></description>
			<content:encoded><![CDATA[<p>I've just come across this awesome technique:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/vIFCV2spKtg&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x402061&amp;color2=0x9461ca" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/vIFCV2spKtg&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x402061&amp;color2=0x9461ca" allowfullscreen="true"></embed></object></p>
<p>One of the reasons designers like to use fixed rather than fluid website layouts is because of the difficulty in providing attractive images at unknown aspect ratios. This technique offers a really beautiful solution.</p>
<p>The presentation shows that all that is needed to <em>apply</em> the effect is an image plane containing the priority of each pixel or effectively in which seam removal it is to be eliminated.</p>
<p>I demand that:</p>
<ol>
<li>There be a <acronym title="Portable Network Graphics">PNG</acronym> extension chunk defined to encode this plane.</li>
<li>Web browsers support this new chunk when non-proportionally scaling images.</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2008/08/30/seam-carving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WCAG + Samurai</title>
		<link>http://blog.mauveweb.co.uk/2008/07/09/wcag-samurai/</link>
		<comments>http://blog.mauveweb.co.uk/2008/07/09/wcag-samurai/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 11:17:21 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/?p=152</guid>
		<description><![CDATA[The WCAG Samurai Errata to WCAG 1.0 is an independently-produced set of amendments ("errata" is not really the right word) that fairly accurately nail how WCAG is and isn't working for pragmatic but standards-compliant developers like me.
I stumbled across this while browsing Google for references while writing a proposal for a client. I was writing [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://wcagsamurai.org/">WCAG Samurai Errata</a> to WCAG 1.0 is an independently-produced set of amendments ("errata" is not really the right word) that fairly accurately nail how WCAG is and isn't working for pragmatic but standards-compliant developers like me.</p>
<p>I stumbled across this while browsing Google for references while writing a proposal for a client. I was writing my usual set of caveats about the Web Content Accessbility Guidelines (WCAG), in which I lament how rubbish they are in practice. My usual spiel goes along the lines of "WCAG 1.0 informs all of our work at Mauve Internet. However, because the WCAG is subject to intepretation, and is now somewhat dated, we do not warrant conformance." I would like to make a clearer statement of how and why but a specification isn't really the place to challenge sections of the WCAG.</p>
<p>Happily, I can now get rid of this kind of non-committal note when writing specifications, and offer a firm commitment to WCAG+Samurai.</p>
<p>I will also be revising my company website &#8211; indeed, my company policy &#8211; to recommend conformance to the WCAG guidelines as amended by the WCAG Samurai Errata where possible.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2008/07/09/wcag-samurai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE8 actually does not pass Acid2</title>
		<link>http://blog.mauveweb.co.uk/2008/02/12/ie8-actually-does-not-pass-acid2/</link>
		<comments>http://blog.mauveweb.co.uk/2008/02/12/ie8-actually-does-not-pass-acid2/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 23:45:02 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2008/02/12/ie8-actually-does-not-pass-acid2/</guid>
		<description><![CDATA[I've just been reading the latest goss on Acid3 and I've come across the most wonderfully perverse announcement from Microsoft (this is a few weeks old, but it's not like I regularly read Microsoft blags).
Since announcing that IE8's renderer can pass Acid2, it transpires that they have a Catch-22:
 To have IE8 conform to standards, [...]]]></description>
			<content:encoded><![CDATA[<p>I've just been reading the latest goss on <a href="http://www.webstandards.org/buzz/action/acid3/">Acid3</a> and I've come across <a href="http://blogs.msdn.com/ie/archive/2008/01/21/compatibility-and-ie8.aspx">the most wonderfully perverse announcement from Microsoft</a> (this is a few weeks old, but it's not like I regularly read Microsoft blags).</p>
<p>Since announcing that IE8's renderer can pass Acid2, it transpires that they have a Catch-22:</p>
<p><strong> To have IE8 conform to standards, you have to use a non-standard workaround.</strong></p>
<p>Wow. I'd assumed Microsoft knew what standards were but couldn't seem to achieve compliance. Not so! Turns out they can achieve compliance but they don't know what web standards are!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2008/02/12/ie8-actually-does-not-pass-acid2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Standards in the Next Generation</title>
		<link>http://blog.mauveweb.co.uk/2007/12/22/web-standards-in-the-next-generation/</link>
		<comments>http://blog.mauveweb.co.uk/2007/12/22/web-standards-in-the-next-generation/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 13:57:03 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/12/22/web-standards-in-the-next-generation/</guid>
		<description><![CDATA[With the news this week that Microsoft have a build of Internet Explorer that can pass Acid2, I wonder if I will be forced to eat my words when I suggested recently that Internet Explorer may be falling further behind with web standards, not closing the gap.
Well, we have an interesting opportunity to measure an [...]]]></description>
			<content:encoded><![CDATA[<p>With the news this week that Microsoft have <a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx">a build of Internet Explorer</a> that can pass <a href="http://www.webstandards.org/action/acid2/">Acid2</a>, I wonder if I will be forced to eat my words when I suggested recently that Internet Explorer may be falling further behind with web standards, not closing the gap.</p>
<p>Well, we have an interesting opportunity to measure an aspect of that gap. A quick glance at Bugzilla shows that Gecko was able to generate a correct screenshot by 2006-04-17. Internet Explorer claimed correct rendering on 2007-12-12. The gap is 604 days for Gecko, but obviously, greater for other browsers who have been compliant for much longer.</p>
<p>If Internet Explorer 8 progresses anything like Gecko, there will be a large number of bugs still to fix. If Internet Explorer 8 progresses anything like Internet Explorer historically progresses, most of those bugs won't get fixed. In other words, I'll believe it when I see it. That might not be for 20 months and might not be available on Windows XP. In fact, if the same post on the <acronym title="Internet Explorer">IE</acronym> blog they are keen to excuse themselves from commitment to <em>specific</em> web standards, offering only a general tone in favour of them but excusing themselves with respect to backward compatibility. Taken as a preamble to a compliant-looking Acid2 rendering, I take this to mean, "we may not deliver this in IE8&#8243;. I think everyone hopes they will, but by comparison, some of the Acid2 patches could have been in Firefox 2 but weren't because Firefox 2 was built with a frozen earlier build of Gecko.</p>
<p>Meanwhile, Firefox 3 is drawing closer. My impression is that the gap between 2 and 3 is not huge, which (hear me out!) is because Firefox 2 was excellent and Firefox 3 struggles to improve upon it. The difference for users is relatively minor. Although the new approach to bookmarking is hugely refreshing I think many users, including my parents, just won't get it.</p>
<p>The difference for developers is significantly less marked &#8211; the difference between having functional support for a technology that isn't portable to <acronym title="Internet Explorer">IE</acronym> and having good support for a technology that isn't portable to <acronym title="Internet Explorer">IE</acronym> is not something that will revolutionise the web. In fact, looking at the <a href="http://developer.mozilla.org/en/docs/Firefox_3_for_developers">Firefox 3 for Developers</a> page, the changes are disappointing and even worrying. In some ways it's a return to the browser wars of the late 1990s when competition between browser vendors' extensions demolished the concept of web standards.</p>
<ul>
<li><strong>Support for aspects of HTML5</strong> &#8211; there isn't even a first working draft of HTML5. Although it was the WHATWG spec before, complying with a specification this early will mean that the implementation may not conform to the final specification, by which time, developers will be relying on the non-standard behaviour.</li>
<li><strong>APNG</strong> &#8211; APNG is a Mozilla-sponsored bastardisation of <acronym title="Portable Network Graphics">PNG</acronym> to add animation. It doesn't subscribe to the contract of <acronym title="Portable Network Graphics">PNG</acronym> (which expressly forbids animation) and it isn't negotiable properly because it hijacks <acronym title="Portable Network Graphics">PNG</acronym>'s <acronym title="Multipurpose Internet Mail Extension">MIME</acronym> type, extension and magic. This spells very bad news for the <acronym title="Portable Network Graphics">PNG</acronym> format. In future it will be impossible to tell if a <acronym title="Portable Network Graphics">PNG</acronym> is animated or not, and of course all legacy software will believe not. Despite the best efforts of a number of people, myself included, but most particularly Glenn Randers-Pehrson, Mozilla refused to adopt amendments which would resolve the conflicting standards and the <acronym title="Portable Network Graphics">PNG</acronym> group failed to ratify APNG as an official extension. Although APNG was an ad-hoc solution to offer animated <acronym title="User Interface">UI</acronym> elements in Mozilla, it is being released and promoted as the new web standard for animation and MNG support, although a superior and established format, has been canned.</li>
<li><strong>Microformats</strong> &#8211; Firefox 3 builds-in support for Microformats, which could just as easily be a standalone Javascript library. There's no reason why this should be built-in, except to create a de-facto standard in an <acronym title="	Application Programming Interface">API</acronym> which Mozilla controls. Moreover it promotes microformats as a de-facto standard, which I'm not comfortable with, because I think Microformats are an ugly hack in lieu of a proper solution.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/12/22/web-standards-in-the-next-generation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The HTML Standards, Part 1</title>
		<link>http://blog.mauveweb.co.uk/2007/07/12/the-html-standards-part-1/</link>
		<comments>http://blog.mauveweb.co.uk/2007/07/12/the-html-standards-part-1/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 14:11:40 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/07/12/the-html-standards-part-1/</guid>
		<description><![CDATA[I am an XML addict. XML has that simplicity and elegance that programmers crave. XML represents a flow of structured data between applications in a form that is an ideal blend of computer-readability and human readability, and that makes profound sense to a lot of people.
XHTML bottles that for web markup. HTML does not.

I have [...]]]></description>
			<content:encoded><![CDATA[<p>I am an <acronym title="eXtensible Markup Language">XML</acronym> addict. <acronym title="eXtensible Markup Language">XML</acronym> has that simplicity and elegance that programmers crave. <acronym title="eXtensible Markup Language">XML</acronym> represents a flow of structured data between applications in a form that is an ideal blend of computer-readability and human readability, and <em>that makes profound sense</em><em> to a lot of people</em>.</p>
<p><acronym title="eXtensible HyperText Markup Language">XHTML</acronym> bottles that for web markup. <acronym title="HyperText Markup Language">HTML</acronym> does not.</p>
<p><span id="more-82"></span></p>
<p>I have been using <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> exclusively since before I started Mauve Internet. The transition was not hard because I had already been working for a long time in the kind of rigid mindset that <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> mandates. My <acronym title="HyperText Markup Language">HTML</acronym> was not tag soup, and this was <em>instinctive</em>, because I'm a perfectionist and not a pragmatist. There are actually advantages to this anyway; for example it's possible to relocate &lt;P&gt;'s that are explicitly closed anywhere within an <acronym title="HyperText Markup Language">HTML</acronym> document without changing their semantics. This is not possible with implicitly-closed elements, because implicit closing is context-sensitive. Also <acronym title="Document Object Model">DOM</acronym> scripting makes much more sense if the <acronym title="User Agent">UA</acronym>'s <acronym title="Document Object Model">DOM</acronym> matches the apparent source structure.</p>
<p>Anyway, publishing <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> requires these steps:</p>
<ul>
<li>Change the DOCTYPE and add the <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> namespace.</li>
<li>Get your markup to validate as <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>. This is simple, because <acronym title="eXtensible Markup Language">XML</acronym> is simple.</li>
<li>Get rid of the inelegant commenting you've been using to hide styles and scripts from old browsers. This always made me queasy anyway. So link scripts and stylesheets instead.</li>
<li>Negotiate on the <acronym title="HyperText Transfer Protocol">HTTP</acronym> Accept header (because not having a working website in <acronym title="Internet Explorer">IE</acronym> is not usually acceptable). I prefer to procedurally convert <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> to real <acronym title="HyperText Markup Language">HTML</acronym> rather than use the <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> compatibility provisions. This requires maybe 30 lines of code in Python but obviously adds a small overhead in extra processing.</li>
<li>Make any scripts <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>/HTML agnostic. <code>document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></code>, the function that largely guarantees your pages won't degrade gracefully without Javascript, must go. <code>document.<span style="color: #006600;">createElementNS</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></code> should now replace <code>document.<span style="color: #006600;">createElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></code>, if it exists.</li>
<li>Make any styles <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>/HTML agnostic. The big catch is the difference in body versus html element semantics.</li>
</ul>
<p>Serving <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> gains you <acronym title="eXtensible Markup Language">XML</acronym> elegance, an extensive suite of tools, embedding <acronym title="eXtensible Markup Language">XML</acronym> from other namespaces, embedding <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> in other <acronym title="eXtensible Markup Language">XML</acronym>, custom extensions (useful for scripting), <acronym title="Document Object Model">DOM</acronym> libraries and easier processing, screen-scraping and so on. You lose very little. There's a few niggles involved in serving it and then Mozilla won't display it incrementally until Firefox 3.</p>
<p>Other than that, and as I've already implied, <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> codifies the best practice for web page design. Much stuff that was inelegant and hard to maintain in <acronym title="HyperText Markup Language">HTML</acronym> is banned or really inconvenient in <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>, and this is as a direct consequence of <acronym title="eXtensible Markup Language">XML</acronym> being rigidly elegant and hard to shoehorn sloppiness into. You should treat <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> conformance not as conformance to a different markup language but to a best practice, maintainance-friendly school of thought.</p>
<p>I briefly mentioned Internet Explorer's lack of support. Poor, dear old Internet Explorer, being a shit, as ever, like a bigoted, racist, unintelligible old man whom you'd rather not converse with any longer than you have to and who you secretly hope would just die. <acronym title="Internet Explorer">IE</acronym> got left behind with <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>, or rather it got left behind entirely for five years before it had cottoned onto <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>. <acronym title="Internet Explorer">IE</acronym> has its little crowd of web developers who prioritise it, treating <acronym title="Internet Explorer">IE</acronym>'s behaviour as the standard rather than&#8230; well, the standards. Similarly, there are those people who just don't know or don't care but use software which embeds the <acronym title="Internet Explorer">IE</acronym>-powered <acronym title="Microsoft Foundation Classes">MFC</acronym> CHTMLView and therefore targets <acronym title="Internet Explorer">IE</acronym>.</p>
<p>Obviously nobody would reasonably hold up the corpus of websites which aren't using <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> yet, and that small collection of compatibility problems, as evidence that <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> is dead, in the face of the overwhelming value to its users, would they?</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/07/12/the-html-standards-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sir Tim Inaugural Lecture</title>
		<link>http://blog.mauveweb.co.uk/2007/03/14/sir-tim-inaugural-lecture/</link>
		<comments>http://blog.mauveweb.co.uk/2007/03/14/sir-tim-inaugural-lecture/#comments</comments>
		<pubDate>Wed, 14 Mar 2007 18:23:08 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[The Internet]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/03/14/sir-tim-inaugural-lecture/</guid>
		<description><![CDATA[Just watching the live video feed of Prof. Sir Tim Berners-Lee's inaugural lecture in the Electronics and Computer Science department at Southampton Uni. I can't see the slides which is a nuisance. I thought I'd type up a few notes as I listen.
He started off talking about wishy-washy guff about engineering versus analysis of network [...]]]></description>
			<content:encoded><![CDATA[<p>Just watching the live video feed of Prof. Sir Tim Berners-Lee's inaugural lecture in the Electronics and Computer Science department at Southampton Uni. I can't see the slides which is a nuisance. I thought I'd type up a few notes as I listen.</p>
<p>He started off talking about wishy-washy guff about engineering versus analysis of network systems. And creativity, which is part of engineering.</p>
<p>Now he's found his feet a bit more. I thought it was amusing that he was trying to talk about Web 2.0 sites but without mentioning the actual term "Web 2.0&#8243;.</p>
<p>He made a big point about macrosopic social elements (the web community) deriving from microscopic (<acronym title="Uniform Resource Identifier">URI</acronym> schemes and <acronym title="HyperText Transfer Protocol">HTTP</acronym> and <acronym title="HyperText Markup Language">HTML</acronym> and stuff and junk). (This is exactly the point I make when trying to explain where TBL fits in to the history of the web: TBL is not responsible for the massive cultural system built on top of the web. It's mere chance that his distributed hypermedia system took root. A lot of people can't distinguish the utility of the web now from the seed protocols (not even ideas, as such, which were already established) that TBL gave us.)</p>
<p>He mentioned something about email and how it's abused.</p>
<p>The web &#8211; what it was intended to do and the primary concepts that drive it. Layering technologies on top of one another. Wow. Abstraction.</p>
<p>The web is an information space. A mapping between a <acronym title="Uniform Resource Identifier">URI</acronym> and some information.</p>
<p>PageRank. Google. Deriving macrosopic web usage models from something very simple like number of links. Audio went a bit rubbish for a while but it's back now.</p>
<p>Wiki. How microscopic behaviour like collaborative editing grows into macroscopic systems like Wikipedia. This will revolutionise democracy and politics.</p>
<p>Blogs. Woo. The Blogosphere. May be rubbish. Who knows. Probably both rubbish and excellent at the same time.</p>
<p>Information in <acronym title="HyperText Markup Language">HTML</acronym> format is not manipulatable. Se we need a semantic web to re-use data as data. <acronym title="Resource Description Framework">RDF</acronym>, <acronym title="Web Ontology Language">OWL</acronym>, SPARQL. Use URIs for things rather than web pages. And the relationships between overhead projectors and colours.  Merge and query is very easy. <acronym title="Friend Of A Friend">FOAF</acronym> networks. (Yay! I know all about those. Oh, I have to rebrand Mauvespace btw, following a conversation with a friend of a friend who is an <acronym title="Internet Protocol">IP</acronym> lawyer. Just need to think of a name.)</p>
<p>Some websites are tables, some are trees, some are "hypercubes". (He keeps calling tables and matrices "rectangles". That strikes me a such a cute web-kiddy thing to do, labelling arrays as "Square, daddio" while graphs are new and "cool")</p>
<p>Something to do with trees and top-down <acronym title="Object-Oriented Programming">OOP</acronym>. (*shrug*)</p>
<p>What shape is the Internet? It's a net. (It's not. It's a fluffy cumulus cloud. Every first-year computer science student knows that.) It's robust.</p>
<p>The web is a web. What shape is that? What does that mean? (I would have thought it's a directed graph). It should be shaped like the world.</p>
<p>Common vocabularies for describing things with <acronym title="Resource Description Framework">RDF</acronym>. You get local collaboration  to produce specific ontologies and you use some terms from global ontologies. Spatial things can be used in lots of applications. Overlapping ontologies.</p>
<p>The web is actually fractal. Structure at all different levels. (Fractal is not the right word).</p>
<p>Much less work is done in describing ontologies than using them.</p>
<p>Web Science includes</p>
<ul>
<li>User interface for the web. SemWeb doesn't have this.</li>
<li>Building resiliant systems. Against slashdotting, attack. At an architectural level.</li>
<li>New devices &#8211; handheld and large screens.</li>
<li>Creativity. Connecting people and making them more effective. Allowing them to understand one another; letting half-formed ideas in two different people's heads on different sides of the planet connect.</li>
</ul>
<p>Right, done.</p>
<p>It was a whistlestop tour of web science I suppose, but I didn't really feel that it was particularly insightful. Of course I'm not in the business of rationalising the way that the web works. I just program. I think TBL has to try to rationalise it because that's what he's famous for; at a personal level he probably feels people look to him to explain the ways of the beast. But of course he didn't create it. Mainly people just create web apps and it either catches on or not, or it needs a bit of pointling to actually make it work the way people want it to. With a lot of Web 2.0 sites, it just involves a huge amount of development to get to the point of having a web app that works well enough and scales, and then creative ideas can be tried out on pieces, beta tested and deployed.</p>
<p>This is exactly how the web started and evolved and I don't think I understand how we got to where we are now any better than I did before. I don't think it's possible to either; the web evolves in parallel across the globe. It doesn't have a single history behind it or a single motivation driving it. Deconstructing the web appears to me to be analagous with <a href="http://en.wikipedia.org/wiki/Psychohistory_%28fictional%29">Psychohistory</a>.</p>
<p>There is <a href="http://www.zepler.tv/podcasts.php">a podcast</a> available, but don't feel obliged.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/03/14/sir-tim-inaugural-lecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing an RSS client</title>
		<link>http://blog.mauveweb.co.uk/2007/02/13/writing-an-rss-client/</link>
		<comments>http://blog.mauveweb.co.uk/2007/02/13/writing-an-rss-client/#comments</comments>
		<pubDate>Tue, 13 Feb 2007 16:14:32 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/02/13/writing-an-rss-client/</guid>
		<description><![CDATA[Interestingly, my latest paid project is to build an RSS reader. I am doing this not out of bloody-minded determination to reinvent the wheel, and I would be perfectly happy to adapt an existing project to work in the way I want, but none of the apps I have seen or tried does what I [...]]]></description>
			<content:encoded><![CDATA[<p>Interestingly, my latest paid project is to build an <acronym title="Really Simple Syndication">RSS</acronym> reader. I am doing this not out of bloody-minded determination to reinvent the wheel, and I would be perfectly happy to adapt an existing project to work in the way I want, but none of the apps I have seen or tried does what I want it to do.</p>
<p>This project is a desktop feed notifier. It will poll feeds and pop up messages (non-intrusively) either when it starts or when it first sees them.</p>
<p>I have mentioned my views on <acronym title="Really Simple Syndication">RSS</acronym> before, but happily they don't conflict this project. Because this is aimed at intranet service notifications there is a contract between producer and consumer, not merely a shared protocol.</p>
<p>I think that one good aspect of <acronym title="Really Simple Syndication">RSS</acronym> is its ubiquity. Several apps already in use in this Intranet are <acronym title="Really Simple Syndication">RSS</acronym>-aware and can be wired into this system with a minimum of work.</p>
<p>Without wanting to revisit the previous arguments too much, I might as well summarise them for completeness. I can envisage only two useful strategies for a syndication format:</p>
<ul>
<li><strong>Fixed contract: </strong>Specify a unique set of obligations for producer and consumer including both syntax and semantics. eg. <acronym title="Really Simple Syndication">RSS</acronym> 0.90</li>
<li><strong>Negotiated contract: </strong>Specify obligations of syntax, but encourage producers to offer a complete semantic representation, and allow consumers to build a customised syndication from within it. eg. <acronym title="Resource Description Framework">RDF</acronym>.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/02/13/writing-an-rss-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>File uploads</title>
		<link>http://blog.mauveweb.co.uk/2007/01/23/file-uploads/</link>
		<comments>http://blog.mauveweb.co.uk/2007/01/23/file-uploads/#comments</comments>
		<pubDate>Tue, 23 Jan 2007 21:59:38 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/01/23/file-uploads/</guid>
		<description><![CDATA[I have mentioned briefly work that I was doing to wrap file uploading in AJAX for a proper experience. Browser-based file uploads have been downtrodden over the past few years.
In client terms, file uploads work in almost exactly the same way as they have always done: the page blocks while the data is posted, and [...]]]></description>
			<content:encoded><![CDATA[<p>I have mentioned briefly work that I was doing to wrap file uploading in <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> for a proper experience. Browser-based file uploads have been downtrodden over the past few years.</p>
<p>In client terms, file uploads work in almost exactly the same way as they have always done: the page blocks while the data is posted, and a very small progress bar shows up in the status bar. This is a user interface disaster for big files.</p>
<p>On the server side, the situation is more varied, but there is often little support for streaming of file uploads. In <acronym title="PHP: Hypertext Preprocessor">PHP</acronym>, file uploads are read wholly into memory, parsed and saved out to a temporary folder before a script even gets called. The request must fit within both <acronym title="PHP: Hypertext Preprocessor">PHP</acronym>'s file upload size limit and its memory limit. As far as I can tell, something similar happens in Zope although you can argue that Zope allows other standards for upload such as DAV and <acronym title="File Transfer Protocol">FTP</acronym> natively. In plain <acronym title="Common Gateway Interface">CGI</acronym>, of course, there is no handling of the uploads, so if you're using a <acronym title="Common Gateway Interface">CGI</acronym> wrapper, it can do whatever you want to handle this. <acronym title="Practical Extraction and Report Language">Perl</acronym>'s <code><acronym title="Common Gateway Interface">CGI</acronym>.pm</code> module allows a hook, at least. Python's <code>cgi</code> module doesn't, nor is it easy to subclass.</p>
<p>All in all, the situation of binding file uploads to form submissions, and processing of those in common server-side languages is wholly inadequate as file size gets large. File uploads are convenient because they are a commonly-supported fall-back, but the workarounds, although solving some of these problems, don't have the simplicity of a browser-native solution.</p>
<p>In my recent project I looked at ways of working around these limitations. The best workaround for the client-side problems I have found so far is to perform the upload in an &lt;iframe&gt;, using <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> queries to present a progress bar. This still has problems, notably that it's one file at a time, both on the choosing and the uploading. In Firefox I can actually perform two concurrent uploads in different &lt;iframes&gt;, but the <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> progress bar doesn't then update.</p>
<p>Server-side, I wrote the whole thing as a webserver so that the <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> queries could talk directly to the thread streaming the upload. Additionally I wrote my own parser to parse on-the-fly the data uploaded, so that the daemon knows what is uploading at any given stage. It works quite well, and the system is extensible in that it could combine a daemon that allows other forms of upload; feedback for these would also appear in the browser windows.</p>
<p>Even so, I wish that file uploading was something people were thinking about more. It's central to so many web applications now.</p>
<p>There are numerous problems:</p>
<ul>
<li>File uploads are synchronous. Downloads can happen in the background in their own, but uploads can't.</li>
<li>File uploads don't have a proper <acronym title="User Interface">UI</acronym>. Current browsers appear to show a tiny upload bar that isn't really very accurate and doesn't give data rates or estimated time remaining.</li>
<li>Uploads are chosen one at a time.</li>
<li>Javascript can't be used for polish. The model that has empowered Web 2.0 improvements is that of taking an existing <acronym title="HyperText Markup Language">HTML</acronym>/HTTP model and allowing it to be controlled by Javascript. However, there is no way into the uploading or the file selection processes with Javascript.</li>
</ul>
<p>The most general solution I can see would provide a Javascript <acronym title="	Application Programming Interface">API</acronym> for uploading. This would allow Javascript to show a (native) file chooser dialog, and instruct the browser on what to do with the files it returns. POST or PUT to the origin server seem useful, as does <acronym title="File Transfer Protocol">FTP</acronym> upload. Clearly there are security concerns, but I fail to see how, as long as Javascript may instigate an operation, read upload statistics, but not read the filesystem, this presents a problem.</p>
<p>Perhaps an <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>-style <acronym title="	Application Programming Interface">API</acronym> could be along these lines:</p>
<pre><code><span style="color: #009900; font-style: italic;">//configure a native dialog to present to the user</span>
<span style="color: #003366; font-weight: bold;">var</span> ufc=<span style="color: #003366; font-weight: bold;">new</span> UploadFileChooser<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
ufc.<span style="color: #006600;">setAcceptableFileTypes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'image/jpeg'</span>, <span style="color: #3366CC;">'image/png'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #003366; font-weight: bold;">var</span> uploads=ufc.<span style="color: #006600;">chooseFiles</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;

<span style="color: #000066; font-weight: bold;">for</span> each <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> u <span style="color: #000066; font-weight: bold;">in</span> uploads<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
u.<span style="color: #006600;">onreadystatechange</span>=doSomething; <span style="color: #009900; font-style: italic;">//callback</span>
<span style="color: #009900; font-style: italic;">//this <acronym title="Uniform Resource Locator">URL</acronym> is constrained the origin server to prevent <acronym title="Cross-site scripting">XSS</acronym></span>
u.<span style="color: #006600;">beginHttpPost</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'http://example.com/upload'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></code></pre>
<p>After this, the user could close the tab or leave the page, and the browser would upload the files in the background, perhaps with a progress bar appearing within the Downloads window. Note that it could queue the files rather than uploading them all at once, depending on user settings. The Javascript, and indeed the user, should be able to request that an upload is aborted. The Javascript should also be able to query the upload, using the object reference provided.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/01/23/file-uploads/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Atom and RDF</title>
		<link>http://blog.mauveweb.co.uk/2007/01/17/atom-and-rdf/</link>
		<comments>http://blog.mauveweb.co.uk/2007/01/17/atom-and-rdf/#comments</comments>
		<pubDate>Wed, 17 Jan 2007 01:39:37 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[RDF]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/01/17/atom-and-rdf/</guid>
		<description><![CDATA[I'm annoyed with Atom.
I was hoping to use Atom to describe a range of things within Mauvespace, such as blogs, logs and so on, but it appears that even though there is a mapping from Atom to RDF, there is no inverse mapping from that RDF vocabulary to Atom, because it is not universally possible [...]]]></description>
			<content:encoded><![CDATA[<p>I'm annoyed with Atom.</p>
<p>I was hoping to use Atom to describe a range of things within Mauvespace, such as blogs, logs and so on, but it appears that even though there is <a href="http://bblfish.net/work/atom-owl/2006-06-06/AtomOwl.html">a mapping from Atom to <acronym title="Resource Description Framework">RDF</acronym></a>, there is no inverse mapping from that <acronym title="Resource Description Framework">RDF</acronym> vocabulary to Atom, because it is not <em>universally</em> possible to convert in that direction.</p>
<p>For example, the <code><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;atom</span>:author<span style="font-weight: bold; color: black;">&gt;</span></span></code> element mandates exactly one child element <code><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;atom</span>:name<span style="font-weight: bold; color: black;">&gt;</span></span></code>. Even if an <acronym title="Resource Description Framework">RDF</acronym> reasoner can assume an author has a name, it does not necessarily know what it is. Also, if you pull Atom data from two feeds written under different pseudonyms into an <acronym title="Resource Description Framework">RDF</acronym> model and then claim that two authors are the same, the model stops being able to distinguish which name each feed was written under, unless you add a vocabulary to subclass Atom authors as pseudonyms of <acronym title="Friend Of A Friend">FOAF</acronym> people.</p>
<p>These may seem like gripes about the mapping, but it's more serious than that. It means that there is no bijection between an arbitrary <acronym title="Resource Description Framework">RDF</acronym> model and a valid Atom 1.0 document.</p>
<p>I can see a few options:</p>
<ul>
<li>Map <acronym title="Resource Description Framework">RDF</acronym> to Atom only. Construct a mapping from any sensible <acronym title="Resource Description Framework">RDF</acronym> model structure to Atom. That this would not be bijective means that the software could not import from Atom. An alternative <acronym title="Resource Description Framework">RDF</acronym> version would have to be provided to import triples.</li>
<li>Work instead with <acronym title="Really Simple Syndication">RSS</acronym> 1.0, which is pure <acronym title="Resource Description Framework">RDF</acronym> but is widely considered deprecated and isn't as expressive as Atom anyway. Trivially, however, this is bijective.</li>
<li>Map Atom to <acronym title="Resource Description Framework">RDF</acronym> only. Create a separate Atom store and map into <acronym title="Resource Description Framework">RDF</acronym> only temporarily when I need to reason upon it or style it with the <acronym title="Resource Description Framework">RDF</acronym> template code. Lack of bijection means the store could not invariably re-export Atom intact. Synchronising updates bidirectionally between Atom and triple store becomes an issue.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/01/17/atom-and-rdf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

