<?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 Design</title>
	<atom:link href="http://blog.mauveweb.co.uk/category/web-design/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>Bubble Background Animation</title>
		<link>http://blog.mauveweb.co.uk/2008/10/11/bubble-background-animation/</link>
		<comments>http://blog.mauveweb.co.uk/2008/10/11/bubble-background-animation/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 14:44:31 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Artwork]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/?p=182</guid>
		<description><![CDATA[I was pondering concepts for interesting web designs when the idea occurred to me that an animated bubble effect might lend a peaceful ambience to a webpage. I experimented with placing a Javascript-controlled SVG animation into the background of a page. You might like to judge for yourself whether this is successful or not (SVG-enabled [...]]]></description>
			<content:encoded><![CDATA[<p>I was pondering concepts for interesting web designs when the idea occurred to me that an animated bubble effect might lend a peaceful ambience to a webpage. I experimented with placing a Javascript-controlled <acronym title="Scalable Vector Graphics">SVG</acronym> animation into the background of a page. You might like to <a href="http://mauveweb.co.uk/bubbles/">judge for yourself</a> whether this is successful or not (<acronym title="Scalable Vector Graphics">SVG</acronym>-enabled browser required and a reasonably fast CPU recommended).</p>
<p>If you were around at the dawn of dynamic <acronym title="HyperText Markup Language">HTML</acronym> you will probably have stumbled across amateur websites who thought it was really rather stylish to add a Javascript snow or bubble effect over the top of the page content.</p>
<p>Fortunately, those days are gone. By and large, it seems that amateur webmasters today know that just a nice colour scheme and a consistent, simple style trump a jumble of styles, javascript effects and stock animated GIFs that we all remember too well. Nice graphic design is done for you if you just install a blog and browse existing themes. Some may not even remember effects like <a href="http://www.dynamicdrive.com/dynamicindex3/bubble.htm">this</a> (Warning: Not safe for work or indeed any other time you require functioning eyeballs).</p>
<p>It's well-known that animations draw the user's attention in webpages. That doesn't mean we always want to avoid them: sometimes we want to direct the user's attention in one direction or another, particularly when the page is being updated dynamically with Javascript. This is not one of those special cases. Since the goal of this experiment is to build a fully-animated webpage, we will have to ignore that inconvenient little fact. However, this suggests we need to keep the animation as unintrusive as possible. Keeping it nice and slow may help, and it should certainly be in the background and not the foreground.</p>
<p><acronym title="Scalable Vector Graphics">SVG</acronym> is useful for this kind of effect because it has a feature (&lt;svg:use&gt;) for manipulating independent clones of a symbol. It is therefore simple to draw the original shape using an <acronym title="Scalable Vector Graphics">SVG</acronym> editor, and the Javascript merely needs to manage instances of the clones.</p>
<p>Using Inkscape, I drew up a bubble looks like this:</p>
<div style="background-color: #2771a1; padding: 5px; text-align: center;"><img src="http://blog.mauveweb.co.uk/wp-content/uploads/2008/10/bubble.png" alt="Bubble" /></div>
<p>There's a certain knack to drawing bubbles like this, of course. Air bubbles in water are colourless, but they are reflective due to total internal reflection. The amount of reflection increases as the angle of incidence increases, up to the critical angle, at which all light is reflected. At a water-air boundary the critical angle is 48.6° so actually the bubble should appear totally reflective from about 75% of the radius.</p>
<p>If this sends you into a bit of a panic as you struggle to remember your school physics lessons, don't worry. I'm not recommending a mathematically accurate implementation of <a href="http://en.wikipedia.org/wiki/Fresnel_equations">Fresnel's Equations</a>. With a lot of art (not just on computers), an appreciation of the physics can go a long way towards adding realism. But a 100% accurate simulation is not necessary for an effect to seem convincing &#8211; trial and error is much easier. The gradient as I've drawn it is not accurate but looks alright. Similarly, bubbles have two specular highlights corresponding to the water-air boundary and the air-water boundary.</p>
<p>As an aside, one day it may be possibly to depict fully reflective and refractive bubbles. Using <acronym title="Scalable Vector Graphics">SVG</acronym>'s incredible feDisplacementMap filter, you could distort the background using a pre-computed "lens" image. But that is unlikely to run at interactive speeds today, even if the filters required were fully and accurately supported, which they are not. The bubbles I've drawn are intended to be a compromise between rendering simplicity and attractiveness.</p>
<p>The bubble system (really just <a href="http://mauveweb.co.uk/bubbles/bubbles.svg">the <acronym title="Scalable Vector Graphics">SVG</acronym> on its own</a>) animates 20 clones of the bubble symbol. Again, this is based on some physical principles. The smaller bubbles are subject to less drag so have a higher terminal velocity, bubbles grow slightly as they rise and the pressure decreases and so on. One of the most effective things is that the bubbles drift with a random walk: they can randomly drift to one side or the other. They don't go straight up nor do they oscillate sinusoidally like the classic DynamicDrive script. For the most effective animation, bubbles would drift with the currents but this is simpler and reasonably effective.</p>
<p>I am quite pleased with the results. To really rid ourselves of the legacy of Javascript-animated <acronym title="Graphics Interchange Format">GIF</acronym> images, it would be important for this effect to tie in with the graphic design of the page, which I haven't shown.</p>
<p>I don't think this is realistically ready for production websites: Internet Explorer cannot display <acronym title="Scalable Vector Graphics">SVG</acronym>, for one thing, and the intensive CPU requirement is also a problem. But I do think that sharp <acronym title="Scalable Vector Graphics">SVG</acronym> graphics allow us to produce a wholly better standard of animation than what was possible before. With this, I think it's possible to make a bubble animation complement rather than detract from a web page.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2008/10/11/bubble-background-animation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tip: Rectangles With Rounded Corners</title>
		<link>http://blog.mauveweb.co.uk/2008/02/17/tip-rectangles-with-rounded-corners/</link>
		<comments>http://blog.mauveweb.co.uk/2008/02/17/tip-rectangles-with-rounded-corners/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 15:46:38 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2008/02/17/tip-rectangles-with-rounded-corners/</guid>
		<description><![CDATA[When in 1981 Steve Jobs said that "Rectangles with rounded corners are everywhere" he began a trend which today sees dozens of rounded rectangles on millions of PC screens almost all the time.
On the web the situation is even more desperate. Bound by the available technology, and aiming towards intuitive and usable HCI, designers often [...]]]></description>
			<content:encoded><![CDATA[<p>When in 1981 Steve Jobs said that "Rectangles with rounded corners are everywhere" he began a trend which today sees dozens of rounded rectangles on millions of <acronym title="Personal Computer">PC</acronym> screens almost all the time.</p>
<p>On the web the situation is even more desperate. Bound by the available technology, and aiming towards intuitive and usable <acronym title="Human-Computer Interaction">HCI</acronym>, designers often draw on rounded rectangles to make functional layouts appear more friendly and personal. More than that, using rounded rectangles is perhaps the simplest way to design a site that isn't just boxy and dull.</p>
<p>In <acronym title="Cascading Style Sheets">CSS</acronym>, there are two well-known approaches. The fluid-width approach is to stick small graphics of rounded corners into each corner of a box &#8211; these cover up the box's corners and make it appear round. The fixed-width approach is to have top and bottom images that comprise the corners, and a tiling background to blend between the two. <acronym title="Cascading Style Sheets">CSS3</acronym> offers an improved background model that will render these hacks unnecessary.</p>
<p style="text-align: center"><img src="http://blog.mauveweb.co.uk/wp-content/uploads/2008/02/rounded_rectangle_techniques.png" alt="Rounded rectangles in CSS2" /></p>
<p>Of course, it's not necessary to stick to plain rectangles: using the above approaches, it's possible to decorate them with drop shadows, highlights, stripes, cutouts or whatever else you'd like to. These aren't just techniques for cutting corners &#8211; they generalise to techniques for decorating web-based boxes.</p>
<p>There are some caveats with nested rounded rectangles that you should watch out for. This is how nested boxes with rounded corners should appear.</p>
<p style="text-align: center"><img src="http://blog.mauveweb.co.uk/wp-content/uploads/2008/02/rounded_corners_do3.png" alt="Rounded rectangles done right" /></p>
<p>The arcs for all the nested rounded boxes that share a corner should be arcs of concentric circles. In practice, this just means tweak the radii until they look right &#8211; so that they appear to focus on a point. Any square boxes should fall <strong>inside</strong> that focus.</p>
<p>Notice in the diagram below how square corners don't work unless they are inside the focus. Nesting rounded boxes inside square boxes is an <strong>absolute don't</strong>. A more common mistake is to use the same corner radius for an outer rounded rectangle as for a nested one. Most tools preserve the setting for corner radius, and that's not what you want. Notice how the outer box appears proud in the diagram below, right (cf. above, left)</p>
<p style="text-align: center" align="left"><img src="http://blog.mauveweb.co.uk/wp-content/uploads/2008/02/rounded_corners_dont1.png" alt="Rounded rectangle mistakes" /></p>
<p>Notice below how when the boxes don't share a corner, you can use the same corner radius, but the effect is slightly different. Using the above rule-of-thumb throughout will keep the design a little more down-to-earth.</p>
<p style="text-align: center"><img src="http://blog.mauveweb.co.uk/wp-content/uploads/2008/02/rounded_corners_exceptions.png" alt="When you can use rounded corners with the same radii" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2008/02/17/tip-rectangles-with-rounded-corners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Mock up your designs</title>
		<link>http://blog.mauveweb.co.uk/2008/01/03/tip-mock-up-your-designs/</link>
		<comments>http://blog.mauveweb.co.uk/2008/01/03/tip-mock-up-your-designs/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 11:38:18 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2008/01/03/tip-mock-up-your-designs/</guid>
		<description><![CDATA[A lot of hobbyist web designers start by creating the content for their web pages, then try to add graphics to "spice it up". This is a mistake. It's very hard to make a page look appealing in retrospect.
Start with a high-quality vector graphics tool &#8211; I recommend Inkscape &#8211; and properly design the website. [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of hobbyist web designers start by creating the content for their web pages, then try to add graphics to "spice it up". This is a mistake. It's very hard to make a page look appealing in retrospect.</p>
<p>Start with a high-quality vector graphics tool &#8211; I recommend <a href="http://www.inkscape.org/">Inkscape</a> &#8211; and properly design the website. To represent where to put content use <a href="http://lipsum.net/">Lorem Ipsum</a> or simply rectangles to represent individual paragraphs. Once you are satisfied with a design, recreate it in <acronym title="HyperText Markup Language">HTML</acronym>, exporting any graphical elements you need from the mockup.</p>
<p>You can use this approach even for sites that don't need graphics; it is beneficial for choosing colours, fonts and layouts as well as for creating fully graphical sites.</p>
<p>Be careful though &#8211; you need to design a mockup that you can successfully convert to <acronym title="HyperText Markup Language">HTML</acronym>. Graphics programs are <acronym title="What You See Is What You Get">WYSIWYG</acronym> but the web is not and this places constraints on what you can successfully produce. Beware in particular of how the site changes as your browser window or text size changes.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2008/01/03/tip-mock-up-your-designs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Misconfigure your browser</title>
		<link>http://blog.mauveweb.co.uk/2007/10/20/misconfigure-your-browser/</link>
		<comments>http://blog.mauveweb.co.uk/2007/10/20/misconfigure-your-browser/#comments</comments>
		<pubDate>Sat, 20 Oct 2007 13:54:05 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/10/20/misconfigure-your-browser/</guid>
		<description><![CDATA[Most mistakes web designers make stem from the assumption that the way they are seeing the site in their web browser is the way everyone else sees it. By using uncommon defaults in your web browser, you can ensure that you have left to the default only those aspects of a page which you had [...]]]></description>
			<content:encoded><![CDATA[<p>Most mistakes web designers make stem from the assumption that the way they are seeing the site in their web browser is the way everyone else sees it. By using uncommon defaults in your web browser, you can ensure that you have left to the default only those aspects of a page which you had intended. I call this "misconfiguring" because it is intentionally configuring a web browser to display pages <strong>wrongly</strong>. If the page looks correct with such settings it is probable nothing has been left to chance.</p>
<p>It is common practice to test a web site in various web browsers, but this testing can give a false impression of the compatibility regarding different default settings. This is because almost all browsers have settled on a common out-of-the-box set of defaults. The user is allowed to override these defaults. Fail to anticipate this and your website risks visual problems for some users (perhaps 1% or so, to take a wild guess). Problems include:</p>
<ul>
<li>Character set issues, such as Â£ or the opposite, a broken character symbol (the question mark diamond in Firefox) rather than £.</li>
<li>Specifying a font colour but not a background colour, causing clashes or even invisible text.  Perhaps 10% of websites fail to specify a page background colour but assume that it will default to white.</li>
<li>Linking images which are intended to composite onto white. This looks dreadful onto most other colours.</li>
<li>Copy looking illegible due to tiny serif fonts (sans-serif is more legible on low-resolution screens).</li>
<li>Body font clashing with  image-based buttons and titles: serif and sans-serif fonts rarely mix.</li>
<li>Pale-coloured boxouts. What appears pale is in fact a function of the background colour. A light pink box appears pale on a white background, but very bright on a black background, for which the corresponding effect would be a dark red box.</li>
</ul>
<p>The browser defaults which you may want to change include</p>
<ul>
<li>Character set</li>
<li>Background colour</li>
<li>Text colour</li>
<li>Font style</li>
<li>Font size, although in theory you should avoid specifying this for accessibility reasons.</li>
</ul>
<p>Misconfiguring a web browser is an art. It is perfectly acceptable to use the defaults a user specifies, as long as all of them are respected. While you should feel free to wholly b0rk a browser which you use purely for testing, it is more beneficial to misconfigure the web browser that you use for primary development. For me, this is the same web browser that I use for everything else, Firefox. Therefore the misconfiguration has to be something that isn't wholly unusable to me. More importantly, the new defaults have to be ones that I would be unlikely to use for a website, otherwise I could still rely on my defaults.</p>
<p>Because I tend to use sans-serif fonts, white backgrounds and black, grey or blue text, and <acronym title="Unicode Transformation Format">UTF</acronym>-8 character set, my browser is set to default to serif, coppery-orange text on a mid-grey background. I'm experimenting with <acronym title="International Organization for Standardization">ISO</acronym>-8859-11 (Thai) as my default character set, because this isn't compatible with <acronym title="Unicode Transformation Format">UTF</acronym>-8 nor <acronym title="International Organization for Standardization">ISO</acronym>-8859-15 for the most common problem area: £ and € symbols. It is compatible for <acronym title="American Standard Code for Information Interchange">ASCII</acronym>-range symbols, so try <acronym title="Unicode Transformation Format">UTF</acronym>-16 if you are aiming for perfect incompatibility. I don't specify font-size but I Ctrl-roll my mousewheel on occasion to watch how the site changes at different font sizes.</p>
<p style="border: 1px solid black; padding: 1em; color: #996633; background-color: #cccccc; font-family: serif">So my default browser settings look like this. If I ever see these styles on a page, I know I've failed to specify something.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/10/20/misconfigure-your-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Accessible Calendar</title>
		<link>http://blog.mauveweb.co.uk/2007/10/11/the-accessible-calendar/</link>
		<comments>http://blog.mauveweb.co.uk/2007/10/11/the-accessible-calendar/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 22:35:12 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/10/11/the-accessible-calendar/</guid>
		<description><![CDATA[For most of us, visualising date and time comes very naturally. I'm sure if we surveyed how people visualise date and time there would be some similarity among a plethora of different answers. However, one form stands alone for its ubiquity: a year-planner-style calendar. Twelve grids of numbers, each seven columns wide, four to six [...]]]></description>
			<content:encoded><![CDATA[<p>For most of us, visualising date and time comes very naturally. I'm sure if we surveyed how people visualise date and time there would be some similarity among a plethora of different answers. However, one form stands alone for its ubiquity: a year-planner-style calendar. Twelve grids of numbers, each seven columns wide, four to six rows deep. Click on a number to do something with that date.</p>
<p>Calendars are so simple for me and &#8211; statistically &#8211; you that it's easy to forget that a server-generated calendar like this is actually not accessible at all. The issue here is linearisation: flattening out the days of the calendar to a script that can be read &#8211; aloud, in braille&#8230; or by a search engine. A calendar in this form linearises to a script that reads like this:</p>
<blockquote><p><strong>January.</strong> One. Two. Three. Four. Five. Six. Seven. Eight. Nine. Ten. Yawn. Zzz. Snore&#8230; <strong>February.</strong> One. Two&#8230;</p></blockquote>
<p>And so on. It's not useful to read out 365 numbers (366 next year)  and expect users to just wait to respond when the day of the year they are looking for comes up.</p>
<p>What is the accessible version? Well, the approach to take is to work out the linearisation we would like first. For example,</p>
<blockquote><p>The following periods are currently available: the fifteenth of October to the twenty-ninth of November, then the eleventh of December to the seventeenth. Which date are you interested in?</p></blockquote>
<p>Now, for a web page we might not expect to follow this pattern exactly, but the model is clear: list the calendar information, then query for a date. It looks something like this:</p>
<blockquote>
<h3>Periods Available</h3>
<ul>
<li>15th October &#8211; 29th November</li>
<li>11th &#8211; 17th December</li>
</ul>
<p><label for="example_date">What date are you interested in?</label></p>
<input id="example_date" /></blockquote>
<p>This is not bad even in a graphical user agent; describing calendars as schedules is not hard to visualise. Note that it would be perfectly possible to use Javascript to convert this calendar to a visual representation. Whether using Javascript in this way is accessible is open to debate. There is no reason screen readers can't execute Javascript. Some, I believe, already do. But there is a trend for graphical browsers to provide Javascript and for non-graphical browsers not to.</p>
<p>I'd suggest if you are willing to forgo an approach that caters ideally to non-visual users, it's possible to do better. We can cheat the system, almost, by using alt attributes in images and image maps to provide the schedule version as above, but for the images and maps to supply the visual layout. In my latest project, I'm also using line boxes full of images rather than a table. This allows a single &lt;a&gt; tag to span a whole month worth of dates. But what it saves on the semantics, it loses on file size. A cheaper approach might be client-side image maps, especially of the lesser-known form involving &lt;a shape=""&gt; tags rather than &lt;area shape=""&gt; elements, or similar features in <acronym title="Scalable Vector Graphics">SVG</acronym>.</p>
<p>However, even with the approaches I've explored above, this is one area where I suspect there may not be a very solution that does equally well for visual and non-visual users. 365 dates worth of information is  difficult to represent in a concise form. That's why we use calendars.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/10/11/the-accessible-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big World Travelog</title>
		<link>http://blog.mauveweb.co.uk/2007/01/03/big-world-travelog/</link>
		<comments>http://blog.mauveweb.co.uk/2007/01/03/big-world-travelog/#comments</comments>
		<pubDate>Wed, 03 Jan 2007 10:58:06 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Artwork]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2007/01/03/big-world-travelog/</guid>
		<description><![CDATA[I finished updated my brother's blog over New Year, and I'm now quite happy with it. I spent ages on a graphical title block in Inkscape. I'm not totally satisfied with the caricatures who are a little more cartoony than I would have liked. The new theme is based on K2, which I do think [...]]]></description>
			<content:encoded><![CDATA[<p>I finished updated <a href="http://worldtour.echit.co.uk/">my brother's blog</a> over New Year, and I'm now quite happy with it. I spent ages on a graphical title block in Inkscape. I'm not totally satisfied with the caricatures who are a little more cartoony than I would have liked. The new theme is based on K2, which I do think is pretty.</p>
<p>I had a strange bug with the Google Maps on the gallery which I found after a bit of searching was caused by Google Maps not supporting embedding within <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>. But I'm pleased that the thumbnailing/unthumbnailing works so well. Previously the map enlarged and reduced; this is much less intrusive in either state.</p>
<p>I did have to disable all of K2's shiny Javascript features to make it work with my Javascript (for map markers) <img src='http://blog.mauveweb.co.uk/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  But they were a <acronym title="User Interface">UI</acronym> disaster anyway. One of the advantages to <acronym title="JavaScript">JS</acronym> over Flash is that it allows us not to create horrific new <acronym title="User Interface">UI</acronym> paradigms. So going to great lengths to do so is missing the point.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2007/01/03/big-world-travelog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Theme Ideas</title>
		<link>http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/</link>
		<comments>http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/#comments</comments>
		<pubDate>Mon, 13 Nov 2006 22:28:02 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Artwork]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/</guid>
		<description><![CDATA[The other day I doodled some ideas for themes for this blog. Not really based around web design. Just interesting concepts, hopefully.
  ]]></description>
			<content:encoded><![CDATA[<p>The other day I doodled some ideas for themes for this blog. Not really based around web design. Just interesting concepts, hopefully.</p>
<p><a id="p36" rel="attachment" class="imagelink" title="Chocolate" href="http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/chocolate/"><img width="150" height="104" id="image36" alt="Chocolate" src="http://blog.mauveweb.co.uk/wp-content/uploads/2006/11/chocolate.png" /></a> <a id="p37" rel="attachment" class="imagelink" title="Tentacles" href="http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/tentacles/"><img width="132" height="188" id="image37" alt="Tentacles" src="http://blog.mauveweb.co.uk/wp-content/uploads/2006/11/tentacles.png" /></a> <a id="p38" rel="attachment" class="imagelink" title="Chocohellic" href="http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/chocohellic/"><img width="132" height="188" id="image38" alt="Chocohellic" src="http://blog.mauveweb.co.uk/wp-content/uploads/2006/11/tentacle_chocolate.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2006/11/13/new-theme-ideas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data mining with AJAX</title>
		<link>http://blog.mauveweb.co.uk/2006/10/27/data-mining-with-ajax/</link>
		<comments>http://blog.mauveweb.co.uk/2006/10/27/data-mining-with-ajax/#comments</comments>
		<pubDate>Fri, 27 Oct 2006 15:37:50 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2006/10/27/data-mining-with-ajax/</guid>
		<description><![CDATA[Just had an idea: how about using Javascript to record client-side usage of your website?
The principle is this:

Register Javascript listeners which construct a list of events, particularly mouse, scroll and click events, along with the time that the event was fired.
Register an unload event which posts the information as XML with AJAX to a script [...]]]></description>
			<content:encoded><![CDATA[<p>Just had an idea: how about using Javascript to record client-side usage of your website?</p>
<p>The principle is this:</p>
<ol>
<li>Register Javascript listeners which construct a list of events, particularly mouse, scroll and click events, along with the time that the event was fired.</li>
<li>Register an <code>unload</code> event which posts the information as <acronym title="eXtensible Markup Language">XML</acronym> with <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> to a script on the server when the user leaves the page.</li>
<li>Browsing sessions can be collated on the server using cookies.</li>
<li>Create a player, which reads the events as <acronym title="eXtensible Markup Language">XML</acronym> and renders them using a <acronym title="Dynamic HyperText Markup Language">DHTML</acronym> 'cursor' and/or by firing events within the <acronym title="Document Object Model">DOM</acronym>. Could have a time slider and fast-forward controls, etc, depending on how complex you want to get.</li>
</ol>
<p>Voila &#8211; see exactly what people are doing with your site. I have knocked up a test which implements the first two steps, for <code>mousemove</code> events, and that much works, so the whole concept would be workable. I can imagine it would break down if your site uses plugins (or Javascript navigation, depending on how easy it is to replay the events accurately) but that's a limitation you would have to live with.</p>
<p>There are obviously privacy concerns but this is relatively mild as no personal data would be recorded. Perhaps it could pop up a Javascript <code>window.<span style="color: #000066;">confirm</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></code> dialog asking if it's OK to record your behaviour. But it would be a very useful tool for examining site usage, especially for commercial sites. This is the way modern marketing works. I leave it up to your conscience as to whether it's ethical.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2006/10/27/data-mining-with-ajax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Construction in Inkscape</title>
		<link>http://blog.mauveweb.co.uk/2006/09/25/construction-in-inkscape/</link>
		<comments>http://blog.mauveweb.co.uk/2006/09/25/construction-in-inkscape/#comments</comments>
		<pubDate>Mon, 25 Sep 2006 22:51:25 +0000</pubDate>
		<dc:creator>mauve</dc:creator>
				<category><![CDATA[Artwork]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mauveweb.co.uk/2006/09/25/construction-in-inkscape/</guid>
		<description><![CDATA[Sometimes &#8211; increasingly perhaps &#8211; I find myself using Inkscape for constructing program assets.
Program assets are a different beast to standalone artworks because you start to have to recombine artistic elements in new ways programmatically.
Most of the time, when web programming, you don't really need to generate completely original artwork on the fly, but you [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes &#8211; increasingly perhaps &#8211; I find myself using Inkscape for constructing program assets.</p>
<p>Program assets are a different beast to standalone artworks because you start to have to recombine artistic elements in new ways programmatically.</p>
<p>Most of the time, when web programming, you don't really need to generate completely original artwork on the fly, but you often need to composite some selection of pre-drawn assets. There are a variety of ways to do this, but Inkscape doesn't seem to make any of them very easy for me.</p>
<p><span id="more-17"></span><strong>Composition of minimal <acronym title="Portable Network Graphics">PNGs</acronym><br />
</strong></p>
<p>Export <acronym title="Portable Network Graphics">PNGs</acronym> from Inkscape and composite them elsewhere, using external data or hard-coding to get them all to composite in the right place. This involves working out offsets, either by trial and error or trying to read them off the rulers in Inkscape. But, madly, the rulers and coordinates in Inkscape <a href="http://sourceforge.net/tracker/index.php?func=detail&#038;aid=1560175&#038;group_id=93438&#038;atid=604306">have the <em>y</em>-axis inverted</a>.</p>
<p>You also have to build the document in Inkscape so that the various elements can be exported with the alpha channel &#8211; independently of shapes above and below the one you're trying to export. This means everything has to either be cloned off the page, or drawn on a seperate layer so that it can be independently hidden.</p>
<p>If you're actually attempting to composite <acronym title="Portable Network Graphics">PNGs</acronym> client-side in <acronym title="Internet Explorer">IE</acronym>, you need to use the <acronym title="Portable Network Graphics">PNG</acronym> alpha hack, which isn't universally applicable.</p>
<p><strong>Composition of padded <acronym title="Portable Network Graphics">PNGs</acronym><br />
</strong></p>
<p>Export <acronym title="Portable Network Graphics">PNGs</acronym> that are padded such that they can all be composited using one origin. This can be done in Inkscape, but it still isn't easy, because Inkscape only has the option to export the selection. The trick is to create completely transparent bounding rectangles and use these to store Inkscape's export settings. The resulting graphics are larger in filesize than they might otherwise be, and composition could also be slower.</p>
<p>This <a href="http://www.mauveweb.co.uk/clock/"><acronym title="Dynamic HyperText Markup Language">DHTML</acronym> clock</a> I wrote a while back mainly uses this method.</p>
<p><strong>Export <acronym title="Scalable Vector Graphics">SVG</acronym></strong></p>
<p>Export <acronym title="Scalable Vector Graphics">SVG</acronym> and write a program to import, modify/compose and potentially rasterise. Rasterisation is still tricky. It will be really useful when browsers get more widespread support for <acronym title="Scalable Vector Graphics">SVG</acronym>.</p>
<p>Still, this method requires painstaking care making sure that all the symbols are easy to recombine. It often means using a lot of svg:use elements (clones in Inkscape lingo), or, more easily, rewriting the xlink:href attribute to repoint the link to a different symbol. Doing it this way preserves the affine transform, but creating your own transforms (for a newly created clone, say) is still tricky.</p>
<p>The <a href="http://blog.mauveweb.co.uk/2006/09/18/svg-cities-with-greasemonkey/"><acronym title="Scalable Vector Graphics">SVG</acronym> Cities interface</a> I mentioned recently uses this method.</p>
<p><strong>Draw out all the permutations</strong></p>
<p>Generate lots and lots of permutations using Inkscape, perhaps using a script to accelerate exporting them. This only works if the number of permutations is small, if it's possible to use only a subset of them, or if they can be generated en masse using Inkscape's excellent <em>Tile Clones</em> tool.</p>
<p>This is the approach I'm about to take with this <acronym title="Dynamic HyperText Markup Language">DHTML</acronym> dice widget I'm working on. First I've drawn out my base dice, then I've cloned one face onto the sides of one die.<br />
<span class="imagelink"><img id="image19" alt="Web-based Dice (work in progress)" src="http://blog.mauveweb.co.uk/wp-content/uploads/2006/09/dice_under_development.png" /></span></p>
<p>Now I can align the 5 currently unused faces over the 5-side, then modify the links using Inkscape's <acronym title="eXtensible Markup Language">XML</acronym> editor:<br />
<span class="imagelink"><img id="image20" alt="One complete die" src="http://blog.mauveweb.co.uk/wp-content/uploads/2006/09/dice_under_development2.png" /></span></p>
<p>Some of the problems I've come across in Inkscape when used for this kind of work include:</p>
<ul>
<ol>
<li>As mentioned, the <em>y</em> coordinates are all wrong so any coordinates you read off the UI have to be mapped y -> (document height &#8211; y)</li>
<li>Inkscape doesn't offer any way to make symbols more invariant. Ungrouping and regrouping works, but is time-consuming.</li>
<li>There isn't an easy way to manage which clones link where, or re-link clones on mass. In fact the only way to re-link clones is with the rather dire <acronym title="eXtensible Markup Language">XML</acronym> editor.</li>
<li>Inkscape doesn't let you group 1 primitive, even though this is both valid and useful.</li>
<li>Inkscape doesn't let you create offscreen symbols for use with clones.</li>
<li>Inkscape doesn't make it easy to set IDs for things.</li>
<li>All IDs generated by Inkscape are meaningless alphanumeric strings. Clones, for example, don't inherit any part of their parent symbol's ID.</li>
<li>Inkscape has a "label" as well as IDs. Label overrides ID in all of Inkscape's <acronym title="User Interface">UI</acronym>, even though they are also meaningless alphanumeric strings, useless in the programming, and they must be set independently of the ID.</li>
</ol>
<ul /></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.mauveweb.co.uk/2006/09/25/construction-in-inkscape/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

