<?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>Learning the World &#187; JavaScript</title>
	<atom:link href="http://learningtheworld.eu/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://learningtheworld.eu</link>
	<description></description>
	<lastBuildDate>Tue, 06 Nov 2012 00:17:33 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.1</generator>
	<item>
		<title>Accessibility Day in Vienna</title>
		<link>http://learningtheworld.eu/2008/atag08/</link>
		<comments>http://learningtheworld.eu/2008/atag08/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 12:00:45 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[aria]]></category>
		<category><![CDATA[Artur Ortega]]></category>
		<category><![CDATA[atag08]]></category>
		<category><![CDATA[Chris Heilmann]]></category>
		<category><![CDATA[Christian Heilmann]]></category>
		<category><![CDATA[European Commission]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[legislation]]></category>
		<category><![CDATA[Maria Putzhuber]]></category>
		<category><![CDATA[procurement]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[tenders]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[Vienna]]></category>
		<category><![CDATA[wai-aria]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/?p=398</guid>
		<description><![CDATA[Last week I talked at the Vienna Accessibility Day (&#8220;<strong lang="de" xml:lang="de">A-Tag</strong>&#8221;) about the emerging <acronym title="World Wide Web Consortium">W3C</acronym> standard for <strong>Accessible Rich Internet Applications</strong> (<acronym>ARIA</acronym>). I half expected a crowd of suits as the event was co-organized by the Austrian Ministry of Health, Family and Youth, instead there were many young faces and a fair percentage of women.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Last week I talked at the <a href="http://atag.accessiblemedia.at" hreflang="de">Vienna Accessibility Day</a> (&ldquo;<strong lang="de" xml:lang="de">A-Tag</strong>&rdquo;) about the emerging <acronym title="World Wide Web Consortium">W3C</acronym> standard for <a href="http://www.w3.org/TR/wai-aria/"><strong>Accessible Rich Internet Applications</strong></a> (<acronym>ARIA</acronym>). The presentation went well as I included code fragments and <a href="http://flickr.com/photos/martin-kliehm/sets/72157610155705200/detail/" title="Screencasts at flickr.com">screencasts of <acronym>ARIA</acronym> demos</a>, though I lost the audience a little when I started to speak about the JavaScript that is required to add keyboard access to more complex widgets. <img src="http://learningtheworld.eu/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" />  So I revised that slide and added another one pointing to tab navigation widgets in various JavaScript frameworks as <a href="http://www.wait-till-i.com/2008/11/23/liberated-accessibility-at-a-tag-in-vienna/">Christian Heilmann</a> suggested.</p>

<p>You can see and download the <a href="http://www.slideshare.net/kliehm/aria-presentation">slides at Slideshare</a> (German). As I promised to write a detailed post about <acronym>ARIA</acronym> enhanced tab navigation for the <a href="http://webkrauts.de">Webkrauts</a> web standards advent calendar (think of a German version of <a href="http://24ways.org/">24 ways</a>) you will be able to enjoy an English tutorial soon. Never mind the references to Chris in the slides&nbsp;&mdash; I had to choose an example from my flickr pictures, and I believe there are too many presentations already with kittens.</p>

<p>The conference was surprisingly innovative: I half expected a crowd of suits as the event was co-organized by the Austrian Ministry of Health, Family and Youth, instead there were many young faces and a fair percentage of women. Things I have learned (and <a href="http://twitter.com/kliehm">tweeted</a> about)</a> include:</p>

<ul>
<li>As of January 2009, websites sponsored by the Austrian Ministry of Health will <strong>only receive funding when they are accessible</strong>. That doesn&rsquo;t come as a surprise as a European Ministerial Declaration in 2006 announced that accessibility and best practices <a href="http://europa.eu/rapid/pressReleasesAction.do?reference=IP/06/769">could become mandatory in public procurement</a> in 2010.</li>
<li>Artur Ortega showed examples of <a href="http://blog.ginader.de/">Dirk Ginader</a>&rsquo;s accessibility features for Yahoo! Finance, including two input fields where the <strong>labels were dynamically updated</strong> after a currency was chosen. So a screenreader read &ldquo;convert pound sterling to euros&rdquo; instead of &ldquo;convert currency to currency.&rdquo;</li>
<li>One reason for <strong>JavaScript enhanced <acronym>HTML</acronym> controls for Flash</strong> objects like Yahoo! video is that the Flash object cannot get tab focus when the <code>wmode</code> param is set to <code>opaque</code> or <code>transparent</code>. Still without that param it is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=413749">impossible to tab into a Flash object</a> in Firefox&nbsp;3. Or did I overlook something?</li>
<li>Designer <a href="http://www.slideshare.net/slidemarie/screendesign-und-webaccessibility-presentation">Maria Putzhuber</a> quoted an <a href="http://www.idea.org/find-information.html">interesting delusion</a>: 70% of designers believe that visitors are almost always able to <strong>maintain orientation</strong> while in fact just 10% of the visitors are able to achieve this. What do <em>you</em> think is the reason?</li>
</ul>

<p><a href="http://blog.namics.com/2008/11/atag08.html" hreflang="de" xml:lang="de" lang="de">Deutsche Fassung</a></p>

<div>
<object type="application/x-shockwave-flash" width="425" height="355" data="http://static.slideshare.net/swf/ssplayer2.swf?doc=atagariakliehm20081121ms-1227565045326955-9&amp;stripped_title=aria-presentation">
<param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=atagariakliehm20081121ms-1227565045326955-9&amp;stripped_title=aria-presentation" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always"/>
View SlideShare <a href="http://www.slideshare.net/kliehm/aria-presentation?type=powerpoint" title="ARIA on SlideShare">presentation</a>
</object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2008/atag08/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accessible Drop-Down Menus</title>
		<link>http://learningtheworld.eu/2008/accessible-drop-down-menus/</link>
		<comments>http://learningtheworld.eu/2008/accessible-drop-down-menus/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 08:00:09 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[ageing]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[aria]]></category>
		<category><![CDATA[arrow keys]]></category>
		<category><![CDATA[assistive technologies]]></category>
		<category><![CDATA[AT]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[blur]]></category>
		<category><![CDATA[buffer]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[drop-down]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[event delegation]]></category>
		<category><![CDATA[fly-out]]></category>
		<category><![CDATA[focus]]></category>
		<category><![CDATA[Hick's Law]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[image replacement]]></category>
		<category><![CDATA[internationalization]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[keyboard access]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[menulist]]></category>
		<category><![CDATA[multi-level menus]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[pull-down]]></category>
		<category><![CDATA[role]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[screen reader]]></category>
		<category><![CDATA[screenreader]]></category>
		<category><![CDATA[sIFR]]></category>
		<category><![CDATA[tab order]]></category>
		<category><![CDATA[text resize]]></category>
		<category><![CDATA[WCAG]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/?p=171</guid>
		<description><![CDATA[A few days ago a co-worker asked if <strong><acronym title="Dynamic HTML">DHTML</acronym> drop-down menus pose a problem with accessibility</strong>. Since the Web Content Accessibility Guidelines 1.0 (<acronym>WCAG</acronym>) declared all JavaScript <em>evil</em> in 1999, assistive technologies (<acronym>AT</acronym>) have made significant progress. So we cannot condemn pull-down menus altogether, but there are various reasons to keep an eye on them buggers.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A few days ago a co-worker asked if <strong><acronym title="Dynamic HTML">DHTML</acronym> drop-down menus pose a problem with accessibility</strong>. Since the Web Content Accessibility Guidelines 1.0 (<acronym>WCAG</acronym>) declared all JavaScript <em>evil</em> in 1999, assistive technologies (<acronym>AT</acronym>) have made significant progress. So we cannot condemn pull-down menus altogether, but there are various reasons to keep an eye on them buggers:</p>

<ol>
<li id="ageing"><p><strong>Older people</strong> have difficulties with drop-down and <a href="http://www.w3.org/TR/wai-age-literature/">multi-level menus</a>, because their manual dexterity, eye-hand coordination and space perception decreases. Also some move the mouse when clicking, or tremble, hence it&#8217;s more likely they slip off the menu. Hell, that happens to <em>me</em> frequently!</p>
<p>However, did you notice the Windows Start Menu is more forgiving when you slip off an item? There&#8217;s a little delay before the secondary level is hidden. Perhaps we need an event-capturing script tolerating a slip from the menu rather than the immediate reaction of the <code>mouseout</code> event.</p></li>
<li id="hicks-law"><p>Nested menus are <strong>more complex</strong>. According to <a href="http://en.wikipedia.org/wiki/Hick%27s_law">Hick&#8217;s Law</a> orientation in a multi-level menu can take longer than multiple clicks in a flat menu with good information architecture. See an <a href="http://learningtheworld.eu/2007/usability-analysis/#hicks-law">earlier article</a> for the math.</p></li>
<li id="keyboard-access"><p>The navigation must be <strong>accessible by keyboard alone</strong>. The result should be the same, whether you hover over an item or tab to it. So check for the <code>focus</code> event and <acronym title="Cascading Style Sheets">CSS</acronym> pseudo-class. Don&#8217;t forget to test backwards tabbing (<kbd>shift tab</kbd>). By the way, mobile devices have no mouse either&hellip;</p>
<p>The <strong>tab order</strong> should be consistent and logical, <abbr>i.e.</abbr> not jumping around on a page. Also the focused item should be visible, for example highlighted with the default 1px dotted border some browsers draw around it. Some people think this is ugly and remove the default border. That is a no-no.</p>
<p>And if you <em>really</em> want desktop behavior, add support for the <strong>arrow keys</strong> (<code>event.keyCode</code> 37-40). Keep in mind though that screen readers have predefined functions for the arrow keys in combination with the <kbd>ctrl</kbd>, <kbd>shift</kbd>, or <kbd>alt</kbd> keys. In JavaScript those keys can be detected with the <code>event.ctrlKey</code>, <code>event.altKey</code>, and <code>event.shiftKey</code> properties. Also <strong>crossbrowser event delegation</strong> for <code>focus</code> or <code>blur</code> events can be a bitch, thankfully <a href="http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html"><acronym title="Peter-Paul Koch">PPK</acronym> has a solution</a>.</p></li>
<li id="skip-content"><p>Users of <acronym>AT</acronym> should have means to <strong>skip content</strong>. That&#8217;s possible with semantic markup: a menu as (nested) list(s) enables them to jump to the next block. Also there should be <em>a few</em> skip links at the beginning of the code pointing to important sections on the page, such as content, navigation, or search. Mobile users also profit from that technique (try surfing eBay with Opera Mini <img src="http://learningtheworld.eu/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" />  ).</p></li>
<li id="links"><p><strong>Pages never link to themselves.</strong> When I click on a link (the menu being no exception) I expect to land on a <em>different</em> page. Therefore it&#8217;s confusing to land on the same page. This happened to me recently when I was filling out a form on my mobile phone and got the same page with an error message. It took me a while to realize where I was. It&#8217;s the same whether you have a tiny screen or a low screen resolution to see things larger when you are visually impaired: you only see a small part of the page, so it&#8217;s hard to realize when something unexpected happens.</p></li>
<li id="aria"><p>You can add some semantic sugar with the <strong><acronym title="Accessible Rich Internet Applications">ARIA</acronym> <code>role</code></strong> property. In this case <code>&lt;ul role=&quot;navigation&quot;&gt;</code> would be appropriate. I strongly encourage you to use <acronym>ARIA</acronym> as it is widely supported by browsers and screen readers, enhances a disabled user&#8217;s experience, and doesn&#8217;t break old browsers. A most <a href="http://dev.opera.com/articles/view/introduction-to-wai-aria/">recent introduction</a> has been written by Gez Lemon for the Opera Developer Community.</p></li>
<li id="buffer"><p>If a second level navigation is initially hidden with <code>display:none</code> it won&#8217;t be in the <strong>screen reader buffer</strong>. Therefore off-screen positioning is a better idea, else you need to <a href="http://juicystudio.com/article/improving-ajax-applications-for-jaws-users.php">update the buffer</a> by writing random values into a hidden <code>input</code> field.</p></li>
<li id="scaling"><p>A common problem in menus is <strong>limited horizontal space</strong>. Text should be scalable, and it must not jut-out into other page elements when it is <strong>enlarged</strong>. Even normal text can break a narrow menu when you think of internationalization. In German there are many composite words. While building a website for a competing brand I came across a menu item on the Philips website for &ldquo;male grooming.&rdquo; The German word &bdquo;<span xml:lang="de" lang="de">Körperhaarpflegesystem</span>&rdquo; is guaranteed to blow every menu! <img src="http://learningtheworld.eu/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> </p>
<p>Another common problem that prevents scaling in menus are <strong>text graphics</strong>. I know marketing just <em>loves</em> to see the corporate font in the main menu, but text in images can&#8217;t be scaled, people with visual impairments can&#8217;t change text and background colors for higher contrast, and <strong>Flash Image Replacement</strong> like sIFR still has <a href="http://virtuelvis.com/archives/2005/04/i-hate-sifr">accessibility issues</a>, is known to <a href="http://www.456bereastreet.com/archive/200712/choose_an_accessible_image_replacement_method/#comment26">distort fonts</a>, is <a href="http://www.mezzoblue.com/archives/2004/10/26/sifr/">CPU intensive and slow</a>. The bottom line is: don&#8217;t use text as images, make textual information text.</p></li>
</ol>

<p id="technical-issues">So much for accessibility. Besides there are a few <strong>technical issues</strong> to consider: mobile devices often have problems with JavaScript or with layers. Some proxies in large companies <a href="http://www.robertnyman.com/2006/04/25/an-important-lesson-learned-about-ajax-and-accessibility/">filter JavaScript</a> for security reasons, so you can&#8217;t rely on the ubiquitous availability, your script has to be unobtrusive, and you can&#8217;t rely on <code>noscript</code> either. Don&#8217;t even think of creating a menu from JavaScript arrays.</p>

<p>Moreover there&#8217;s a well-known bug in <acronym title="Internet Explorer">IE</acronym>6 responsible for showing <code>select</code> lists always in front of any layers (like your second level menu), regardless of a <code>z-index</code>. Thankfully there are plugins like <a href="http://brandonaaron.net/docs/bgiframe/">bgiframe</a> for jQuery to solve this. Multi-level menus can bloat the code, event handling can be CPU intensive (use <a href="http://icant.co.uk/sandbox/eventdelegation/">event delegation</a>). And if large amounts of menu code is at the beginning, the real content gets further behind and less relevant for search engines.</p>

<p>In <strong>conclusion</strong>, for an alleged quicker entry you pay with many disadvantages. Often drop-down menus just conceal a poorly planned information architecture. I would reconsider their usage.</p>

<p>Did I forget something? What&#8217;s your opinion on drop-down menus? Love them or hate them?</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2008/accessible-drop-down-menus/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Crowdsourcing YouTube Video Captioning</title>
		<link>http://learningtheworld.eu/2008/captioning-youtube-with-dfxp/</link>
		<comments>http://learningtheworld.eu/2008/captioning-youtube-with-dfxp/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 20:34:45 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[captioning]]></category>
		<category><![CDATA[Chris Heilmann]]></category>
		<category><![CDATA[Christian Heilmann]]></category>
		<category><![CDATA[deafness]]></category>
		<category><![CDATA[dfxp]]></category>
		<category><![CDATA[Ed Eliot]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MAGpie]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Yahoo! Video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/?p=97</guid>
		<description><![CDATA[When Chris Heilmann had the splendid idea to add <strong>captioning to YouTube videos</strong> with Google&#8217;s JavaScript <acronym title="Application Programming Interface">API</acronym>, I asked myself if there wasn&#8217;t a better way. There is, but to my surprise neither <em>YouTube</em> nor <em>Yahoo! Video</em> take advantage of that capability.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Oh, I just <em>love</em> <a href="http://www.wait-till-i.com/">Christian Heilmann&rsquo;s blog</a>! He&rsquo;s one of the most skilled JavaScript developers I know, so I can still learn tricks from him and his colleagues at Yahoo! But he also <strong>does everything with JavaScript</strong>, and every time when this happens, it inspires me to mull over how it could be done <strong>without</strong>! You know, because restrictive company proxies filter JavaScript, or just to provide a graceful alternative, or because I&rsquo;m so old-fashioned. <img src="http://learningtheworld.eu/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </p>

<p>So when Chris mentions JavaScript badges for del.icio.us, I think of Ed Eliot&rsquo;s <a href="http://www.ejeliot.com/projects/php-delicious">PhpDelicious</a> or how to get <a href="http://learningtheworld.eu/2008/wordpress-goodies-with-inlinerss/">similar results</a> in WordPress. Naturally when he had the splendid idea to add <strong>captioning to YouTube videos</strong> with <a href="http://www.wait-till-i.com/2008/03/12/video-captioning-made-easy-with-the-youtube-javascript-api/">Google&rsquo;s JavaScript <acronym title="Application Programming Interface">API</acronym></a>, I asked myself if there wasn&rsquo;t a better way. There is, but to my surprise neither <em>YouTube</em> nor <em>Yahoo! Video</em> take advantage of that capability:</p>

<ol><li>It&rsquo;s common practice to implement <strong>text content in Flash via <acronym title="Extensible Markup Language">XML</acronym></strong>.</li>
<li><a href="http://www.w3.org/TR/ttaf1-dfxp/"><strong><acronym title="Distribution Format Exchange Profile">DFXP</acronym></strong></a> is a <acronym title="World Wide Web Consortium">W3C</acronym> <strong><acronym>XML</acronym> standard</strong> for captioning videos.</li>
<li>There are <a href="http://www.adobe.com/accessibility/products/flash/captioning_tools.html">free tools</a> like <a href="http://ncam.wgbh.org/webaccess/magpie/">MAGpie</a> for creating captions, and they all support <strong><acronym>DFXP</acronym></strong>.</li>
<li>If <em>YouTube</em> or <em>Yahoo! Video</em> would allow users to <strong>upload and attach a <acronym>DFXP</acronym> file</strong> to a video, it would become dead easy for anybody to caption it. Not only for the filmmaker, captioning could be <strong>crowdsourced</strong>!</li></ol>

<p>Just anticipating <a href="http://joeclark.org">Joe Clark&rsquo;s</a> inevitable (and justifiable) objection: of course captioning is not an easy thing that anybody can do, to do it right it requires people with special training. But considering the number of videos on those platforms the only affordable and practical solution to provide any captioning at all is crowdsourcing. That can also be applied to the control of quality, accuracy, or reporting abuse.</p>

<p>Of course this would enhance primarily accessibility, but the <acronym>XML</acronym> files would further help search engines to <strong>index video content</strong>. And their marketing people would love such a feature for the positive <acronym>PR</acronym>!</p>

<p>Well, I submitted the suggestion both to Google and Yahoo!, you can <a href="http://suggestions.yahoo.com/detail/?prop=ydn&#038;fid=80528">vote on the Yahoo! Developer Network</a> for it (Google is more closed-lipped). I&rsquo;m curious who will be the first to offer that feature&nbsp;&hellip;</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2008/captioning-youtube-with-dfxp/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Foreground Sprites</title>
		<link>http://learningtheworld.eu/2007/foreground-sprites/</link>
		<comments>http://learningtheworld.eu/2007/foreground-sprites/#comments</comments>
		<pubDate>Thu, 26 Jul 2007 13:00:55 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[css sprites]]></category>
		<category><![CDATA[DOM scripting]]></category>
		<category><![CDATA[foreground sprites]]></category>
		<category><![CDATA[hover]]></category>
		<category><![CDATA[image swapping]]></category>
		<category><![CDATA[img element]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mouseover]]></category>
		<category><![CDATA[rollover]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2007/foreground-sprites/</guid>
		<description><![CDATA[Most rollovers have become obsolete because they can be performed on background images with <strong><acronym title="Cascading Style Sheets">CSS</acronym> sprites</strong>. However, there are those rare cases when there is just an icon without text, like a &#8220;play&#8221; or &#8220;pause&#8221; button. This article discusses how to apply <acronym>CSS</acronym> sprites for foreground images.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="alert"><ins datetime="20080626T200000">Please consider a better solution with <a href="/2008/better-foreground-sprites/">Better Foreground Sprites</a>.</ins></p>

<p>Most rollovers have become obsolete because they can be performed on background images with <strong><a href="http://www.alistapart.com/articles/sprites/"><acronym title="Cascading Style Sheets">CSS</acronym> sprites</a></strong>. If there are hover effects today, they usually come as text on a button background image, or as a text link with an icon next to it.</p>

<p>However, there are those rare cases when there is <strong>just an icon without text</strong>, like a &ldquo;play&rdquo; or &ldquo;pause&rdquo; button, or a magnification glass on an image to signal it can be enlarged. If you want to swap images when the element receives focus or on mouseover, traditionally you are stuck with two options:</p>

<ol>
<li>JavaScript to change the image source, or</li>
<li><acronym>CSS</acronym> sprites to change the position of a background image behind a transparent <code>gif</code> image.</li>
</ol>

<p>I like neither. Using JavaScript and two images with pre-loading seems like a waste of resources when it can be done with <acronym>CSS</acronym> and one image only. Transparent gifs are <em>so</em> 1998, besides the background usually doesn&rsquo;t get printed. So what we need on these occasions are <strong><acronym>CSS</acronym> sprites for foreground images</strong>.</p>

<p>Until recently I thought that can&rsquo;t be done, but then I stumbled upon some code for <a href="http://download.dojotoolkit.org/release-0.9.0beta/dojo-0.9.0beta/dijit/tests/form/test_Checkbox.html">checkbox widgets in Dojo</a>. Naturally they use a lot of JavaScript for the task. Anyway I like my default checkboxes and don&rsquo;t have any urge to make them prettier (I have no doubt our design overlords would enforce <em>aqua</em> icons everywhere), but that made me think. Here&rsquo;s a suggestion:</p>

<p>First a simple sprite which is 50px wide: <img src="/examples/img/icon-enlarge.gif" width="50" height="15" alt="Two icons of a magnification glass" class="example sprite" /></p>

<p>The <acronym title="Hypertext Markup Language">HTML</acronym> code uses the dimensions of a <em>single</em> icon for width and height to allow fast page rendering without reflow:</p>

<ol class="code">
<li><code>&lt;a href=&quot;/big/&quot; class="icon"&gt;</code></li>
<li class="indent"><code>&lt;img src=&quot;/img/icon-enlarge.gif&quot; id=&quot;magnifier&quot; <strong>width=&quot;19&quot; height=&quot;15&quot;</strong> alt=&quot;enlarge image&quot; /&gt;</code></li>
<li><code>&lt;/a&gt;</code></li>
</ol>

<p>The corresponding <acronym>CSS</acronym> sets the link to <code>display: block</code>, uses the single icon dimensions for the container, prevents overflow, and resets the image dimensions to <code>auto</code> to prevent distortion. The actual image swapping is achieved by a negative left margin on hover.</p>

<ol class="code">
<li><code>a.icon {</code></li>
<li class="indent"><code><strong>display: block;</strong></code></li>
<li class="indent"><code><strong>width: 19px;</strong></code></li>
<li class="indent"><code><strong>height: 15px;</strong></code></li>
<li class="indent"><code><strong>overflow: hidden;</strong></code></li>
<li><code>}</code></li>
<li><code>a.icon img {</code></li>
<li class="indent"><code><strong>width: auto;</strong></code></li>
<li class="indent"><code><strong>height: auto;</strong></code></li>
<li class="indent"><code>border: none;</code></li>
<li><code>}</code></li>
<li><code>a.icon:hover img, a.icon:focus img, a.icon img.hover {</code></li>
<li class="indent"><code><strong>margin-left: &minus;31px;</strong></code></li>
<li><code>}</code></li>
</ol>

<p>For the sake of simplicity I ignored how the link would be floated or positioned. Also borders, a background color, or padding to increase the clickable area can be added to the parent element.</p>

<p>For simplicity I chose a link in the example, but the same can be done with a <code>div</code> surrounding an <code>&lt;input type=&quot;image&quot;&nbsp;/&gt;</code>. Then of course you need to define <code>cursor: pointer</code>, and for anything below <acronym title="Internet Explorer">IE</acronym>7 bind the <acronym title="Document Object Model">DOM</acronym> event to the hovering element (<a href="/examples/js/foreground-sprites-ie6.js" type="text/javascript" title="JavaScript source code to fix Internet Explorer">get the source</a>):</p>

<ol class="code">
<li><code>&lt;!--[if lt IE 7]&gt;</code></li>
<li><code>&lt;script type=&quot;text/javascript&quot;&gt;</code></li>
<li><code>oIcon = {</code></li>
<li class="indent"><code>setHoverClass : function() {</code></li>
<li class="indent"><code><span class="indent"><strong>this.className = &#x27;hover&#x27;;</strong></span></code></li>
<li class="indent"><code>},</code></li>
<li class="indent"><code>resetHoverClass : function() {</code></li>
<li class="indent"><code><span class="indent"><strong>this.className = &#x27;&#x27;;</strong></span></code></li>
<li class="indent"><code>}</code></li>
<li><code>};</code></li>
<li><code>var elm = document.getElementById(&#x27;magnifier&#x27;);</code></li>
<li><code>if (elm) {</code></li>
<li class="indent"><code>elm.onmouseover = elm.onfocus = oIcon.setHoverClass;</code></li>
<li class="indent"><code>elm.onmouseout = elm.onblur = oIcon.resetHoverClass;</code></li>
<li><code>}</code></li>
<li><code>&lt;/script&gt;</code></li>
<li><code>&lt;![endif]--&gt;</code></li>
</ol>

<p><strong>Here is a working example</strong>. You know how to adjust the code if you need more than one class on the image.</p>

<p><a href="#" class="icon"><img src="/examples/img/icon-enlarge.gif" id="magnifier" width="19" height="15" alt="enlarge image" /></a></p>

<p>That was nice and easy. It&rsquo;s tested in Firefox&nbsp;2, Opera&nbsp;9, Internet Explorer 5+, and Safari&nbsp;2. Screen readers should be okay with the <code>alt</code> text.</p>

<h3>Discussion</h3>

<p>The trouble begins when people <strong>start turning off browser features</strong>.</p>

<p>People with <strong>disabled images</strong> won&rsquo;t be able to read the alternative text because the visible area is limited by the parent container. That can be detected by comparing the known sprite size with the <code>alt</code> text size. Then the class is set to anything but <code>icon</code> so that the parent container expands.</p>

<p>More severe is when people <strong>disable style sheets</strong> because then they will see a squeezed image with multiple icons. If you are hyper-correct, you could replace the crushed multi-icon image with the correct single icon (you could use the <code>class</code> or <code>rel</code> attribute to define the icon type), but nobody wants to slice images. As a compromise I would suggest to replace the icon with its <code>alt</code> text.</p>

<p>See the <a href="/examples/js/foreground-sprites-access.js" type="text/javascript" title="JavaScript source code for accessibility">script</a> to detect disabled images or <acronym>CSS</acronym>. (Note: it isn&rsquo;t implemented here because I couldn&rsquo;t test it properly on <acronym>IE</acronym>6 with stuff turned off.)</p>

<p>If JavaScript is unavailable, the user is stranded with what we gave him. Also <strong>icons without text are inherently evil</strong> because they can&rsquo;t be enlarged by zoom readers. Did I forget any politically correct disclaimer for obscure use scenarios?</p>

<p>So we ended up with a <acronym>CSS</acronym> only version, but still some JavaScript is needed for the extra effort to provide the same experience to users of <acronym>IE</acronym> 5-6, and some more for certain user scenarios. Wouldn&rsquo;t it be easier to slice and swap foreground images the old way? But then again slicing is a pain, and people already start using background images. <strong>Do people actually turn off <acronym>CSS</acronym> and images?</strong> Or is that another remnant of <acronym title="Web Content Accessibility Guidelines">WCAG</acronym> 1.0 from 1999?</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2007/foreground-sprites/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Website Performance Tweaks, Part Two</title>
		<link>http://learningtheworld.eu/2007/performance-2/</link>
		<comments>http://learningtheworld.eu/2007/performance-2/#comments</comments>
		<pubDate>Sun, 24 Jun 2007 14:20:19 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[@media]]></category>
		<category><![CDATA[atmedia]]></category>
		<category><![CDATA[atmedia07]]></category>
		<category><![CDATA[atmedia2007]]></category>
		<category><![CDATA[book:ean=9780596529307]]></category>
		<category><![CDATA[book:isbn=0596529309]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[energy efficiency]]></category>
		<category><![CDATA[etag]]></category>
		<category><![CDATA[expires header]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[http-request]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Nate Koechley]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[steve souders]]></category>
		<category><![CDATA[tenni theurer]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yslow]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2007/performance-2/</guid>
		<description><![CDATA[Nate Koechley presented the research results of the Yahoo! Exceptional Performance Team two weeks ago in London. The traditional focus of <strong>performance optimization</strong> has been on the backend, i.e. system efficiency. But comparing a number of high profile websites, the Yahoo! team found that frontend performance is responsible for 80-98% of the perceived response time. Therefore doubling the frontend performance gains more than doubling the backend performance. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="vcard"><a href="http://www.flickr.com/photos/drewm/538822354/in/set-72157600330136671/" title="See larger version on flickr"><img alt="Nate Koechley" src="/wp-content/uploads/2007/07/nate-koechley" width="240" height="160" class="floatleft photo" /></a> <strong><a href="http://nate.koechley.com" class="fn url" rel="co-worker met acquaintance">Nate Koechley</a></strong> presented the <a href="http://nate.koechley.com/blog/2007/06/12/high-performance-web-sites">research results</a> of the Yahoo! Exceptional Performance Team two weeks ago in London (<a href="http://www.htmldog.com/atmedia2007/highperformancewebpages.mp3" type="audio/mp3">podcast</a>). Like Yahoo! shares I would like to share that knowledge with you for those who couldn&rsquo;t attend.</p>

<p>The traditional focus of <strong>performance optimization</strong> has been on the backend, i.e. system efficiency. But comparing a number of high profile websites, the Yahoo! team found that frontend performance is responsible for 80-98% of the perceived response time. Therefore doubling the frontend performance gains more than doubling the backend performance. In case studies <em>Yahoo! Search</em> became 40-50% faster, the <em>Yahoo! Mail</em> web application gained 70-100%. Of course there are ways to increase backend performance without throwing in more hardware, but better frontend performance reduces traffic and saves resources.</p>

<p>Saving resources on the <em>client</em> side, particularly <strong>CPU usage</strong>, also pays off in speed. <a href="http://icant.co.uk/sandbox/eventdelegation/">Event delegation</a> is faster than a large number of event handlers. Likewise we know that <a href="/2007/performance/">reducing the number of HTTP requests</a> through techniques like CSS sprites, sliding doors, or file aggregation increases speed. The reason is the limit of two parallel requests <em>per host</em> imposed by HTTP 1.1. That results in a download queue of two requests at a time, increasing the perceived response time of a page. By configuring additional host aliases for your server you can <a href="http://yuiblog.com/blog/2007/04/11/performance-research-part-4/">increase the number of parallel requests</a>&nbsp;&mdash; but more than 2-4 also increase DNS lookups resulting in higher CPU usage and slower response times.</p>

<p>I wonder when Yahoo! will present us another impressive calculation <strong>how many gigawatts have been preserved</strong> by reducing CPU usage in client PCs and in their <a href="http://www.technewsworld.com/story/55792.html" title="Study: Data Center Power Usage Exploding">data</a> <a href="http://brand.yahoo.com/forgood/environment/energy_conservation.html" title="Yahoo! Energy Conservation Program">centers</a>, as one participant asked in the <acronym title="questions and answers">Q&amp;A</acronym> part. <a href="http://www.ecologee.net">Energy efficient servers</a> are the next big thing, but are there any concrete suggestions for <a href="http://www.addsimplicity.com/adding_simplicity_an_engi/2007/01/compute_power_i.html">greener programming</a>? Is <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> destroying the ozone layer? <img src="http://learningtheworld.eu/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </p>

<p>Environmental issues aside, here&rsquo;s the <strong><a href="http://developer.yahoo.com/performance/rules.html">list of rules</a></strong>. I&rsquo;ll keep it short where I have written about it in <a href="/2007/performance/">my previous article</a>. See the <a href="http://stevesouders.com/hpws/">examples and testcases</a> by Steve Souders.</p>

<ol>
<li id="rule-1"><strong>Make <a href="/2007/performance/">fewer HTTP requests</a>:</strong> This also affects <a href="http://yuiblog.com/blog/2007/03/01/performance-research-part-3/">cookies</a>. Eliminate unnecessary cookies, keep them small, set them at granular domain levels (e.g. <code>finance.yahoo.com</code> instead of <code>.yahoo.com</code>), and set an appropriate Expires date.</li>
<li id="rule-2"><strong>Use a content distribution network (<acronym>CDN</acronym>)</strong> like <a href="http://www.akamai.com">Akamai</a> where your (static) content is served from distributed data centers located nearer to your client. Even if your website is not as big as Google you can profit from faster response times by using the <a href="http://yuiblog.com/blog/2007/02/22/free-yui-hosting"><acronym title="Yahoo! User Interface">YUI</acronym> library&rsquo;s own <acronym>CDN</acronym></a>.</li>
<li id="rule-3"><strong>Add an Expires header</strong> not just <a href="/2007/performance/#enforce-caching" title="Enforce image caching">for images</a>, but also for JavaScript and stylesheet files.</li>
<li id="rule-4"><strong>Enable gzip:</strong> 90%+ of browsers support compression, and <code>gzip</code> is better supported and compresses more than <code>deflate</code>. Gzip <acronym title="Hypertext Markup Language">HTML</acronym> files, <acronym title="Cascading Stylesheets">CSS</acronym>, scripts, <acronym title="Extensible Markup Language">XML</acronym>, <acronym title="JavaScript Object Literal Notation">JSON</acronym>&nbsp;&mdash; <em>no</em> images or <acronym title="Portable Data Format">PDF</acronym>s.</li>
<li id="rule-5"><strong>Put <acronym>CSS</acronym> at the top</strong>, avoid <code>@import</code> as it loads <em>last</em>, even <em>after</em> the images!</li>
<li id="rule-6"><strong>Move scripts to the bottom</strong> as they block parallel downloads even across hostnames and block rendering of any code below them.</li>
<li id="rule-7"><strong>Avoid <acronym>CSS</acronym> expressions</strong> as they execute many times and cost CPU.</li>
<li id="rule-8">
<p><strong>Use external JavaScript and <acronym>CSS</acronym> files.</strong> <a href="/2007/performance/#inline-css">Inline <acronym>CSS</acronym></a> is apparently faster for a user&rsquo;s start page, but not on subsequent pages. After the page has finished loading, use the time to <strong>preload scripts</strong> to speed up secondary pages.</p>
<ol class="code">
<li><code>window.onload = downloadComponents;</code></li>
<li><code>function downloadComponents() {</code></li>
<li class="indent"><code>var elem = document.createElement(&quot;script&quot;);</code></li>
<li class="indent"><code>elem.src = &quot;http://.../file1.js&quot;;</code></li>
<li class="indent"><code>document.body.appendChild(elem);</code></li>
<li><code>}</code></li>
</ol></li>
<li id="rule-9"><strong>Reduce <acronym title="Domain Name Server">DNS</acronym> lookups</strong> for the reasons stated above. Use 1-4 hosts and the <code>keep alive</code> setting.</li>
<li id="rule-10"><strong><a href="/2007/performance/#file-aggregation">Minify JavaScript</a></strong> with JSMin&nbsp;&mdash; inline scripts, too.</li>
<li id="rule-11"><strong>Avoid redirects</strong> as they are the worst form of blocking. Set Expires headers for redirects to enable caching.</li>
<li id="rule-12"><strong>Remove duplicate files:</strong> this is self-explanatory, but it can happen in large teams with many scripts and stylesheets.</li>
<li id="rule-13"><p><strong>Mind the <acronym title="Entity Tag">ETag</acronym>:</strong> Now this was something I never paid attention to. ETags are unique identifiers to distinguish files that share a <acronym title="Uniform Resource Identifier">URI</acronym>. They are transmitted in the HTTP header. The default server setting uses the <a href="http://en.wikipedia.org/wiki/Inode">INode</a>, the bytesize and the modification date of a file to calculate a unique ID. Unless servers in a cluster are identical, ETags differ, therefore the files are <strong>not cached</strong>. Fortunately <a href="http://httpd.apache.org/docs/2.0/mod/core.html#fileetag">ETags can be configured</a> in Apache, so it should be possible to match them across different servers.</p><ol class="code"><li><code>FileETag MTime Size</code></li></ol>
<p>Note that the ETag is also <strong>relevant for <acronym title="Really Simple Syndication">RSS</acronym> feeds</strong>. For example, currently the <a href="http://www.w3.org/2004/08/TalkFiles/Talks.rss" type="application/rss+xml"><acronym title="World Wide Web Consortium">W3C</acronym> talks feed</a> is more or less unusable: some feed readers and services apparently regard the ETag, the feed is mirrored on many servers, so the same news entry from a different server is shown as new and unread multiple times every day&hellip;</p>
</li>
<li id="rule-14"><strong>Make <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> cacheable and small</strong>. Some data like a user&rsquo;s address book or buddy list change infrequently and should be requested via GET, cached, and set with a <code>Last-modified</code> timestamp and gzipped.</li>
</ol>

<p><img src="/wp-content/uploads/2007/06/book-high-performance-web-sites" alt="Book cover: High Performance Web Sites" width="120" height="158" class="floatleft book" /> These are a lot of rules, and they will be published in a O&rsquo;Reilly book by Steve Souders and Tenni Theurer in September 2007. Anyway, don&rsquo;t be overwhelmed by their mass, instead you can start with the easy things: <strong>&ldquo;<q>harvest the low hanging fruit</q>.&rdquo;</strong> Enable caching with the Expire date setting and reduce the number of HTTP requests. You can deal with the rest later.</p>

<p>Finally Nate Koechley announced a Yahoo! performance tool called <strong><a href="http://developer.yahoo.com/yslow/">YSlow</a></strong> as a plugin for the indespensible <a href="http://www.getfirebug.com">Firebug</a> extension. He also recommended the commercial <a href="http://alphaworks.ibm.com/tech/pagedetailer">IBM Page Detailer</a>, and <a href="http://livehttpheaders.mozdev.org">LiveHTTPHeaders</a> to visualize what&rsquo;s happening in your browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2007/performance-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.htmldog.com/atmedia2007/highperformancewebpages.mp3" length="26276424" type="audio/mpeg" />
		</item>
		<item>
		<title>My @media 2006 Day Two</title>
		<link>http://learningtheworld.eu/2006/atmedia-day-two/</link>
		<comments>http://learningtheworld.eu/2006/atmedia-day-two/#comments</comments>
		<pubDate>Mon, 26 Jun 2006 07:00:04 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[@media]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[atmedia]]></category>
		<category><![CDATA[atmedia2006]]></category>
		<category><![CDATA[book:isbn=0321509021]]></category>
		<category><![CDATA[book:isbn=1590598148]]></category>
		<category><![CDATA[Cameron Moll]]></category>
		<category><![CDATA[Dan Cederholm]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[Eric Meyer]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jeremy Keith]]></category>
		<category><![CDATA[Jon Hicks]]></category>
		<category><![CDATA[london]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Molly Holzschlag]]></category>
		<category><![CDATA[Nate Koechley]]></category>
		<category><![CDATA[Robin Christopherson]]></category>
		<category><![CDATA[Tantek Çelik]]></category>
		<category><![CDATA[uk]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2006/atmedia-day-two/</guid>
		<description><![CDATA[Day two of the @media conference included talks about microformats, Yahoo!&#8217;s new technical strategies, browser memory leaks and performance tweaks, some information about accessibility, the mobile web, and meeting Molly Holzschlag.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Day two of the @media conference included</strong> talks about microformats, Yahoo!&rsquo;s new technical strategies, browser memory leaks and performance tweaks, some information about accessibility, the mobile web, and meeting Molly&reg; Holzschlag.</p>

<h3>In this post:</h3>

<ul class="toc">
    <li><a href="#cederholm">Dan Cederholm: Bulletproof web design</a></li>
    <li><a href="#christopherson">Robin Christopherson: Beyond a code audit</a></li>
    <li><a href="#moll">Cameron Moll: Mobile web design</a></li>
    <li><a href="#koechley">Nate Koechley: Yahoo! <abbr title="versus">vs.</abbr> Yahoo! <abbr>vs.</abbr> Yahoo!</a></li>
    <li><a href="#tantek">Tantek Çelik: Microformats: evolving the web</a></li>
    <li><a href="#hot-topics">&ldquo;Hot topics&rdquo; panel</a></li>
    <li><a href="#presentations">More presentations</a></li>
</ul>

<p>The <strong>evening:before</strong> featured another get-together in a fancy work:after club, which can be summed up like this: Sweden won against Paraguay, and it was hard to talk to others because some notorious <acronym title="title">DJ</acronym> wouldn&rsquo;t turn down the volume. He desperately tried to get somebody on the dance floor switching from house music to <acronym title="Rhythm &amp; Blues">r&amp;b</acronym> pop, but didn&rsquo;t realize that was not what the audience wanted.</p>

<h3 id="Cederholm">Bulletproof web design</h3>

<p class="vcardInComments">If there was an award for <a href="http://simplebits.com/publications/speak/atmedia/bpwd-atmedia2006.pdf" title="Dan Cederholm&rsquo;s slides as PDF (20 Megabyte)" type="application/pdf">best presentation</a>, <a href="http://www.simplebits.com" class="url fn">Dan Cederholm</a> would get my vote! His slides were so well-designed, so clean, and the special effects (not seen in the <acronym title="Portable Document Format">PDF</acronym> version) contributed to clarify the scope.</p>

<p>It was like <a href="/2006/atmedia-day-one/#keith">Jeremy Keith&rsquo;s presentation</a> the day before, where you knew all the things he was talking about, still <strong>something made &ldquo;click&rdquo; and shifted your perception</strong> &mdash; and if it&rsquo;s only that you think <em>&ldquo;that&rsquo;s what I always needed to show to my designers!&rdquo;</em></p>

<p class="floatleft">
    <img class="floatleft" src="/wp-content/uploads/2006/06/2006-06-16-dig-dug-text-test" alt="Scene from the computer game Dig Dug" width="200" height="125" />
    <span class="caption">Scene from the early computer game Dig Dug (Atari 1983), where you pump up monsters until they explode</span>
</p>

<p>His example for thinking ahead showed a photo of a new warehouse in San Francisco, where the windows had been inserted to be <strong>future proof</strong>, but cemented over for the current use. So think ahead, because content amount and text size may vary, content changes and needs to be maintained, and because the environment can change. Take something off, like images, <acronym title="Cascading Style Sheets">CSS</acronym>, or JavaScript, and make sure the website still functions.</p>

<blockquote cite="http://simplebits.com/publications/speak/atmedia/bpwd-atmedia2006.pdf">
    <p class="last">&ldquo;The journey begins by letting go of control, and becoming flexible.&rdquo;</p>
</blockquote>

<p class="cite"><cite>John Allsopp, &ldquo;<a href="http://www.alistapart.com/articles/dao/">A Dao of Web Design</a>&rdquo;</cite></p>

<p>A lot of his examples worked by setting a 50% value for the horizontal or vertical <code>background-position</code> in combination with overlapping images, and he introduced the term <strong><q>&ldquo;Dig Dug Text Test&rdquo;</q></strong> as a metaphor for pumping up text and assuring the design is still not destroyed. <em>Reminder to self:</em> add more references to early 1980&rsquo;s games in presentations, they are <em>so</em> cool!</p>

<h3 id="christopherson">Beyond a code audit</h3>

<p class="vcard"><a href="http://www.abilitynet.org.uk" class="url fn">Robin Christopherson</a>&rsquo;s bad karma was that he relied on the unreliable wireless network in the conference center, therefore a few examples from the web refused to work.</p>

<p>But by struggling with the technical constraints he set a real-world example for the attending web developers. Robin is blind, and he did not notice the Windows <acronym>XP</acronym> bubbles popping up once in a while trying to alert him that the network was unavailable. He was unable to login on the <acronym title="Queen Elizabeth II Conference Center">QE2CC</acronym> screen, because it was inaccessible and refreshed too often. Also most people I spoke with were deeply impressed by the <strong>incredible speed his screen reader was set to</strong>.</p>

<p>He had also prepared a couple of educational films about challenges on the web for people beyond the visually impaired, like a woman with <strong>learning disabilities</strong> who didn&rsquo;t understand the word &ldquo;disclaimer,&rdquo; or a quadriplegic with a mouthstick and a <strong>voice recognition</strong> system, which was useless when the <code>alt</code> text in images or Flash applications did not match the displayed text. I know what a tremendous amount of work the production of such little films is, and I&rsquo;m looking forward to access them on Robin&rsquo;s site. Also check his <a href="http://www.abilitynet.org.uk/content/oneoffs/media2006.htm" title="Speaker&rsquo;s notes for &ldquo;Beyond the code audit&rdquo;">speaker&rsquo;s notes</a>.</p>

<h3 id="moll">Mobile web design</h3>

<p class="vcard"><a href="http://flickr.com/photos/martin-kliehm/171504415/in/set-72157594172244478/" title="Larger version of the Cameron Moll photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-16-cameron-moll-small" alt="Cameron Moll presenting @media conference" width="200" height="150" /></a> <a href="http://www.cameronmoll.com" class="url fn">Cameron Moll</a> mentioned a few times that he had held this presentation a year ago. Therefore it was very professional, very slick, but a little unemotional and in my opinion not quite up to date.</p>

<p>Okay, there are more mobile phones than computers, more mobiles than landline connections, but he didn&rsquo;t stress the <a href="http://opengardensblog.futuretext.com/archives/2006/03/mobile_web_20_a_2.html" title="The head of Oxford University&rsquo;s &ldquo;Next Generation Mobile Applications Panel&ldquo; about Ajax on handhelds">incredible impact the wide adoption of Opera</a> supporting <a href="http://www.opera.com/products/mobile/platform/" title="Opera mobile platform website">JavaScript on cellphones</a> will have. That&rsquo;s finally a <em>common platform</em> for web applications using <acronym>Ajax</acronym>, as opposed to hundreds of different implementations of Java which are almost impossible to test. That&rsquo;s a most remarkable development with the potential of revolutionizing mobile applications &mdash; Cameron hardly mentioned it, although this became public in November 2005.</p>

<p>Of course <acronym title="Wireless Markup Language">WML</acronym> is dead, long live <a href="http://www.openmobilealliance.org/tech/affiliates/wap/wap-277-xhtmlmp-20011029-a.pdf" type="application/pdf" title="XHTML Mobile Profile specification"><acronym title="eXtensible Markup Language Mobile Profile">XHTML MP</acronym></a>! You should serve content from a <em><abbr title="dot">.</abbr>mobi</em> domain and concentrate on the contextually relevant information: People might check their eBay watchlist on their cellphone, but they don&rsquo;t upload items to sell, so ignore features like that when developing for mobile devices.</p>

<p>Also my question about <strong>Vodafone and other carriers inserting invalid code</strong> in the pages they serve through their proxy might not have been clear enough, because Cameron replied it&rsquo;s up to the carriers and the browsers how to interpret pages, while developers can control the code.</p>

<p>Unfortunately that&rsquo;s untrue when carriers compress images more and insert JavaScript to get the original images with higher resolutions with a key combination. One script is inserted with the deprecated <code>language</code> attribute in the header, while the other comes <em>after</em> the closing <code>&lt;/html&gt;</code> tag, thus <strong>rendering your valid <acronym title="eXtensible Hypertext Markup Language">XHTML</acronym> strict code to tag soup</strong>. The problem not only manifests on mobile browsing devices, but also when you surf with a regular notebook using your mobile access. Therefore a <code>@media handheld</code> <acronym>CSS</acronym>, browser sniffing, or serving the MIME type depending on the <acronym title="Hypertext Transfer Protocol">HTTP</acronym> accept header are all doomed. And there&rsquo;s no way to prevent the carriers from doing such evil.</p>

<h3 id="koechley">Yahoo! <abbr title="versus">vs.</abbr> Yahoo! <abbr>vs.</abbr> Yahoo!</h3>

<p class="vcard"><a href="http://www.flickr.com/photos/martin-kliehm/171521325/in/set-72157594172244478/" title="Larger version of the Nate Koechley photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-16-nate-koechley-s" alt="Nate Koechley" width="200" height="150" /></a> I went to this <a href="http://nate.koechley.com/blog/2006/07/12/my_atmedia_2006_slides/" title="Nate Koechley&rsquo;s presentation slides">presentation</a> because <cite><a href="http://nate.koechley.com/blog/" class="url fn">Nate Koechley</a></cite> recently published his smart concept paper about <a href="http://developer.yahoo.com/yui/articles/gbs/gbs.html">graded browser support</a>, which we immediately adopted. What I didn&rsquo;t expect was a most impressive roller coaster trip through browser performance!</p>

<p>Yahoo! has a beta version out for their new portal, also <em>Yahoo! Photos</em> and <em>Yahoo! Mail</em> is under development. All of them make more or less <strong>heavy use of <acronym title="Dynamic HTML">DHTML</acronym> and <acronym title="Asynchronous JavaScript and XML">Ajax</acronym></strong>. Yahoo&rsquo;s goals were increasing performance by 300%, adding interactivity (vulgo: drag &amp; drop), and supporting web standards.</p>

<p>For a <strong>fast response</strong> they used techniques like <a href="http://www.alistapart.com/articles/sprites"><acronym>CSS</acronym> sprites</a>, or memory management. In Nate&rsquo;s words browsers are still <q class="italic">&ldquo;a pain in the ass,&rdquo;</q> and <q class="italic">&ldquo;the web is the most hostile software engineering environment imaginable.&rdquo;</q> <strong><acronym>DHTML</acronym> leaks memory like a sieve</strong>, so for each constructor use a destructor. Instead of adding events to thousands of email objects Yahoo! used the existing <code>document.onmousemove</code> event and checked if the mouse was over an object or white space, then passed the event to that object or drew a rectangular choice box. Key concepts are conservation, destruction, and recycling iFrames (<code>about:blank</code>). Use <a href="http://sourceforge.net/projects/ieleak" title="Drip and IE Sieve leak detectors">Drip</a> as a tool for measuring <a href="http://msdn.microsoft.com/library/en-us/IETechCol/dnwebgen/ie_leak_patterns.asp" title="Microsoft developer network about Internet Explorer memory leak patterns">memory leaks</a>, test extreme object counts, test long interactions, and test extensive navigation.</p>

<p>Also their developers <strong>prefer <a href="http://www.json.org"><acronym title="JavaScript Object Notation">JSON</acronym></a> over <acronym title="eXtensible Markup Language">XML</acronym></strong> because parsing <acronym>XML</acronym> degrades performance greater than linear as <acronym>XML</acronym> size increases.</p>

<p>They have identified <strong><a href="http://yuiblog.com/blog/2006/11/28/performance-research-part-1/"><acronym>HTTP</acronym> requests</a> as a main performance killer</strong>. Browsers still only process two or four <acronym>HTTP</acronym> requests at a time, especially start pages are not cached as effectively as they imagined, and parsing JavaScript freezes the browser. Therefore they rather serve a single large file with <acronym>CSS</acronym> in the header, and JavaScript as close to the <code>&lt;/body&gt;</code> tag as possible.</p>

<p>Regarding browsers it is faster to <strong>develop for standards, than patch</strong>. Browser support must not be binary, and it does not mean &ldquo;the same.&rdquo;</p>

<blockquote>
    <p class="last">Expecting two users using different browser software to have an identical experience fails to embrace or acknowledge the heterogenous essence of the Web.</p>
</blockquote>

<p>There are more <acronym title="Internet Explorer">IE</acronym>5 browsers out there than <acronym>IE</acronym>&nbsp;5.5, and <acronym>IE7</acronym> &ldquo;already moved the needle.&rdquo;</p>

<p>With all the <acronym>DHTML</acronym> and <acronym>Ajax</acronym> I was <strong>concerned about accessibility</strong>, but in a sidenote I almost missed Nate mentioned the <a href="http://developer.mozilla.org/en/docs/Accessible_DHTML">IBM contribution for <acronym>DHTML</acronym> accessibility</a>. Wonderful!</p>

<h3 id="tantek">Microformats: evolving the web</h3>

<p class="vcard"><a href="http://flickr.com/photos/martin-kliehm/171526392/in/set-72157594172244478/" title="Larger version of the Tantek &Ccedil;elik photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-16-tantek-celik-s" alt="Tantek &Ccedil;elik" width="200" height="150" /></a> When microformats are even on the radar of <a href="http://microformats.org/blog/2006/03/20/bill-gates-at-mix06-we-need-microformats/" title="Bill Gates at Mix06 conference">Bill Gates</a>, how could I ignore them? I had no clue before <a href="http://www.tantek.com" class="fn url">Tantek &Ccedil;elik</a>&rsquo;s <a href="http://tantek.com/presentations/2006/06/microformats-evolution/" title="Tantek&rsquo; presentation about microformats">presentation</a> @media 2006, and now I&rsquo;m implementing them in this post. Microformats are virulent.</p>

<p>Basically you insert a few class names into your code, like</p>

<ol class="code">
    <li><code>&lt;p <strong>class=&quot;vcard&quot;</strong>&gt;</code></li>
    <li class="indent"><code>&lt;a <strong>class=&quot;url fn&quot;</strong><br />href=&quot;http://tantek.com&quot;&gt;<span class="codeSpace">&nbsp;</span>Tantek &Ccedil;elik&lt;/a&gt;</code></li>
    <li><code>&lt;/p&gt;</code></li>
</ol>

<p>There are microformats for <a href="http://microformats.org/wiki/hcard" title="The hcard microformat">contact cards</a>, <a href="http://microformats.org/wiki/hcalendar" title="The hcalendar microformat">calendars</a>, reviews, geo information, and many more. Even the Creative Commons license and the <acronym title="Platform for Internet Content Selection">PICS</acronym> label implemented in this page count as microformats. <acronym title="XHTML Friends Network">XFN</acronym> and <a href="http://microformats.org/wiki/xoxo" title="The XOXO microformat"><acronym title="Extensible Open XHTML Outlines">XOXO</acronym></a>, too.</p>

<p>You can parse this page through a <a href="http://feeds.technorati.com/contacts/http://www.learning-the-world.eu/2006/atmedia-day-two/">Technorati contacts feed service</a> or use a tool like the <a href="https://addons.mozilla.org/firefox/2240/">Tails extension for Firefox</a>, and voilÃ , there&rsquo;s a <em>vcard</em> you could import into your address book (if there wasn&rsquo;t this Thunderbird bug which prevents exactly this). With the <em>hcalendar</em> microformat you synchronize your calendar with event schedules on a website accordingly.</p>

<p>There are a few issues I ran into when I implemented hcards, and the documentation could have more examples, but they are on Tantek&rsquo;s to-do list. Also sometimes it means extra, non-semantic markup, but as microformats increase semantic meaning, I assume it gets Tim Berners-Lee&rsquo;s blessing. So go for it, microformats are definitely among the web&rsquo;s next big things!</p>

<h3 id="hot-topics">&ldquo;Hot topics&rdquo; panel</h3>

<p><a href="http://flickr.com/photos/martin-kliehm/171521326/in/set-72157594172244478/" title="Larger version of the panels photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-16-panel-small" alt="Hot topics panel with Molly Holzschlag, Jon Hicks, Jeremy Keith, Eric Meyer, and Tantek &Ccedil;elik" width="200" height="150" /></a> I had the pleasure to meet <span class="vcard"><a href="http://www.molly.com" class="url fn" rel="met colleague">Molly Holzschlag</a></span> earlier in a coffee break, and while I was sorry I couldn&rsquo;t attend her session <a href="http://www.w3.org/blog/International/2006/06/19/internationalization_awakening_the_sleep" title="Molly Holzschlag&rsquo;s presentation"><acronym title="Internationalization">I18N</acronym>, awakening the sleeping giant</a>, I&rsquo;m confident I didn&rsquo;t miss much information as I am pretty familiar with her old articles in her regular column in <em>WebTechniques</em> and the current activity of the <acronym title="World Wide Web Consortium">W3C</acronym> <acronym title="internationalization">I18N</acronym> group, where she is a member.</p>

<p><a href="http://www.grochtdreis.de/weblog/index.php?id=P1049">Jens Grochtdreis</a> reports in his blog about the passionate presentation she gave earlier, and although there is more <a href="http://www.webtechniques.com/archives/2000/09/schwartz/" title="Howard Schwartz: Going Global &mdash; Hungry for New Markets">technical experience</a> and awareness in Europe with <a href="http://www.webtechniques.com/archives/2000/09/yunker/" title="John Yunker: Speaking in Charsets &mdash; Building a Multilingual Web Site">multilingual websites</a>, rarely they pay respect to <a href="http://www.webtechniques.com/archives/2000/09/lagon/" title="Olin Lagon: Culturally Correct Site Design">cultural differences</a>, like the meaning of <a href="http://www.webtechniques.com/archives/2000/09/desi/" title="Molly Holzschlag: Color My World">colors</a>. Molly gives everything to educate on <acronym>I18N</acronym> and promote web standards, she is also a member of <acronym title="The Web Standards Project">WaSP</acronym>. I&rsquo;m glad she seems to have found a way to get some help and support, as she is an outstanding, but sensitive person.</p>

<p>Anyway, she was part of the &ldquo;hot topics&rdquo; panel, where <a href="http://adactio.com/journal/1144/" title="Jeremy Keith about the panel">questions from the audience</a> where considered by a group of experts: Molly, Jon Hicks, Jeremy Keith, Eric Meyer, and Tantek &Ccedil;elik. They had a lot of fun and agreed <strong><acronym>CSS</acronym> has become more mainstream</strong> in the last year, as you don&rsquo;t have to defend <acronym>CSS</acronym> against table layout anymore. Well, reading the discussions in German forums and reviewing the code of other websites, there&rsquo;s still a lot of educational work to be done. Also they talked about the accessibility of <acronym>Ajax</acronym>, and mashups as the next big thing, but you can read a decent <a href="http://muffinresearch.co.uk/archives/2006/06/16/media2006-notes-hot-topics-panel/">transcript of the session</a> in Stuart&rsquo;s blog over at Muffinresearch.</p>

<h3 id="conclusions">Conclusions</h3>

<p>If you have followed me this far, you can see <strong>@media was a big inspiration</strong>, it was a lot of fun, especially the after event on Saturday, and I can only recommend the conference! There are endless <a href="http://flickr.com/search/?q=atmedia">flickr pictures</a> and quite a few <a href="http://technorati.com/search/atmedia">blog entries on Technorati</a> if you need further impressions. Um, and never mind the British food&nbsp;&hellip;</p>

<h3 id="presentations">More presentations</h3>

<p>Here are the presentations in the parallel track I couldn&rsquo;t attend. Also there will be <a href="http://learningtheworld.eu/2006/atmedia-slides/">pod- and videocasts</a> available soon.</p>

<ul>
    <li><a href="http://www.mezzoblue.com/presentations/2005/wdw/type/">Dave Shea: Fine typography on the web</a></li>
    <li><a href="http://www.andybudd.com/atmedia2006/bugs.pdf" type="application/pdf">Andy Budd: Bug hunting</a></li>
    <li><a href="http://simon.incutio.com/archive/2006/06/26/libraries"><abbr title="Document Object Model">DOM</abbr> Scripting: The Next Level</a></li>
    <li><a href="http://www.stuffandnonsense.co.uk/downloads/transcendingcss.pdf" type="application/pdf">Andy Clarke: The fine art of web design</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2006/atmedia-day-two/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My @media 2006 Day One</title>
		<link>http://learningtheworld.eu/2006/atmedia-day-one/</link>
		<comments>http://learningtheworld.eu/2006/atmedia-day-one/#comments</comments>
		<pubDate>Wed, 21 Jun 2006 10:22:05 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[@media]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[atmedia]]></category>
		<category><![CDATA[atmedia2006]]></category>
		<category><![CDATA[book:isbn=0321472667]]></category>
		<category><![CDATA[book:isbn=0596527330]]></category>
		<category><![CDATA[Chris Wilson]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM scripting]]></category>
		<category><![CDATA[Eric Meyer]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[Jan Eric Hellbusch]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jeffrey Veen]]></category>
		<category><![CDATA[Jens Grochtdreis]]></category>
		<category><![CDATA[Jeremy Keith]]></category>
		<category><![CDATA[london]]></category>
		<category><![CDATA[Tomas Caspers]]></category>
		<category><![CDATA[uk]]></category>
		<category><![CDATA[WCAG 2.0]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2006/atmedia-day-one/</guid>
		<description><![CDATA[@media is a web conference in London with a focus on web standards and accessibility, and impossible to google. I missed last year&#8217;s conference, thus I was looking forward to finally meet all the people whose articles, web publications and more recently blogs provided my literature and inspiration for the past seven years or so.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong><a href="http://www.vivabit.com/atmedia2006/">@media</a> is a web conference in London with a focus on web standards and accessibility, and impossible to google.</strong> I missed last year&rsqou;s conference, thus I was looking forward to finally meet all the people whose articles, web publications and more recently blogs provided my literature and inspiration for the past seven years or so.</p>

<h3>In this post:</h3>

<ul class="toc">
    <li><a href="#meyer">Eric Meyer: Keynote</a></li>
    <li><a href="#keith">Jeremy Keith: Using <acronym title="Document Object Model">DOM</acronym> scripting to plug the holes in <acronym>CSS</acronym></a></li>
    <li><a href="#wilson">Chris Wilson: <acronym title="Microsoft Internet Explorer">IE</acronym>: 7 and beyond</a></li>
    <li><a href="#wcag">The new accessibility guidelines: <acronym title="Web Content Accessibility Guidelines">WCAG</acronym>&nbsp;2.0</a></li>
    <li><a href="#veen">Jeffrey Veen: Designing the next generation of web <abbr title="Applications">apps</abbr></a></li>
</ul>

<h3 id="geek-life">Introducing geeks to a social life</h3>

<p><a href="http://flickr.com/photos/tomascaspers/168221986/in/set-72157594170010626/" title="Larger version of the Johansson/Caspers photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-14-johansson-caspers" alt="Roger Johansson &amp; Tomas Caspers" width="200" height="110" /></a> There was some socializing the evening before the conference where I met with a couple of Germans, like <span class="vcard"><a href="http://blog.grochtdreis.de" class="url fn" hreflang="de">Jens Grochtdreis</a></span> who initiated the German web standardista group &ldquo;<a href="http://www.webkrauts.de" hreflang="de">Webkrauts</a>&rdquo;, <span class="vcard"><a href="http://www.barrierefreies-webdesign.de" class="url fn" hreflang="de"><span class="given-name">Jan Eric</span> <span class="family-name">Hellbusch</span></a></span> whose website I had noticed before for some master theses about accessibility, or <span class="vcard"><span class="fn">Tomas Caspers</span> who is a member of <acronym title="Web Standards Project">WaSP</acronym> and the mastermind behind the accessibility portal <a href="http://www.einfach-fuer-alle.de" class="url" hreflang="de" xml:lang="de" lang="de">Einfach für alle</a>. Actually I wasn&#8217;t the only one to notice he looks like the lost fifth member of the German punk band &ldquo;Die Toten Hosen&rdquo;?&hellip;</span> Also that&rsquo;s where I met <span class="vcard"><a href="http://www.456bereastreet.com" class="url fn">Roger Johansson</a></span>, whose technical blog <em>456&nbsp;Berea Street</em> is a must-read for <acronym title="Cascading Style Sheets">CSS</acronym> and accessibility aware coders.</p>

<p>So my <strong>first day on @media</strong> began with a walk through polluted London air along surveillance cameras and anti-tank barriers along the Houses of Parliament over to the queue in front of the Queen Elizabeth <abbr title="the second">II</abbr> Conference Center (QE2CC) where we got nice bags and name tags. I would suggest <em>shawls</em> with the @media logo for next year to stand a chance against the bloody cold air conditioning while it was 28&deg;&nbsp;<abbr title="Celsius">C</abbr> outside. <img src="http://learningtheworld.eu/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /> </p>

<h3 id="meyer">Eric Meyer: Keynote</h3>

<p class="vcard"><a href="http://www.flickr.com/photos/chrisjennings/169037394/in/set-72157594168773966/" title="Larger version of the Eric Meyer photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-15-eric-meyer" alt="Eric Meyer" width="200" height="150" /></a> The conference started with a keynote by <a href="http://meyerweb.com" class="url fn">Eric Meyer</a> with his personal impressions of the last ten years of the web. Quite interesting since I&rsquo;ve been reading his articles on <a href="http://meyerweb.com/eric/writing.html">Web Review</a>, where he published among other things the famous <acronym title="Cascading Style Sheets">CSS</acronym> browser compatibility chart, a great companion in my struggle with 4th generation browsers.</p>

<p>Looking back, he realized the following truths:</p>

<ol>
    <li>Small groups of <strong>dedicated experts <em>can</em> change a lot</strong> (<abbr title="for example">e.g.</abbr> the <a href="http://archive.webstandards.org/css/members.html"><acronym>CSS</acronym> Samurai</a>, or <a href="http://www.tantek.com">Tantek Çelik</a> who introduced doctype switching).</li>
    <li><strong>Free information</strong> is an essential part of any new web technology&rsquo;s adoption.</li>
    <li>You don&rsquo;t hear much anymore from people or companies who kept information as a &ldquo;personal advantage.&rdquo;</li>
    <li>You might be the first who thought about a certain solution. Savour this moment, and then <strong>share it</strong>.</li>
</ol>

<h3 id="keith">Using <acronym title="Document Object Model">DOM</acronym> scripting to plug the holes in <acronym>CSS</acronym></h3>

<p class="vcard"><a href="http://www.flickr.com/photos/martin-kliehm/171514731/in/set-72157594172244478/" title="Larger version of the Jeremy Keith photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-15-jeremy-keith" alt="Jeremy Keith" width="200" height="150" /></a> As an example, <a href="http://adactio.com" class="url fn">Jeremy Keith</a> introduced the techniques of Buck Owens, the first musician to &ldquo;hack&rdquo; the tinny sound of early radios by replacing the bass with a regular guitar. So his tracks sounded better and got more airtime. Using <acronym>DOM</acronym> scripting to work around incomplete <acronym>CSS</acronym> implementations or to simulate <acronym>CSS</acronym>&nbsp;3 behavior is basically the same, as long as there aren&rsquo;t yet browsers with <q>&ldquo;great bass.&rdquo;</q></p>

<p>Okay, most of the stuff in his <cite><a href="http://domscripting.com/presentations/atmedia2006/slides/" title="Slides for Jeremy&rsquo;s DOM scripting presentation">presentation</a></cite> sounded familiar, and I&rsquo;d rather set zebra stripes on table row backgrounds server side. Still I got some inspiration how to do some things <em>better</em>. For example it never occurred to me to combine selectors like</p>

<ol class="code"><li><code>document.<strong>getElementById</strong>(&quot;id&quot;)<span class="codeSpace">&nbsp;</span>.<strong>getElementsByTagName</strong>(&quot;p&quot;)</code></li></ol>

<p>Or I never thought of using a universal selector in JavaScript:</p>

<p class="block"><code>document.getElementsByTagName(&quot;<strong>*</strong>&quot;)</code></p>

<p>Also the next time I&rsquo;m manipulating an object&rsquo;s class, I promise to do it by writing some reusable functions like</p>

<ol class="code">
    <li><code>document.<strong>getElementByClassName()</strong></code></li>
    <li><code>function <strong>addClass(</strong>element, className<strong>)</strong></code></li>
</ol>

<p>And after I <code>createElement</code> I should set more attributes by setting a <code>className</code> instead of adding each attribute separately.</p>

<p>When he mentioned <acronym>CSS</acronym>&nbsp;3, I learned that Safari is already capable of handling multiple background images. And I liked his introduction of the geeky Star Trek term of a <q>&ldquo;<a href="http://en.wikipedia.org/wiki/Kobayashi_Maru" title="Kobayashi Maru on Wikipedia">Kobayashi Maru scenario</a>&rdquo;</q> for a no-win situation, or his translation of object detection</p>

<ol class="code"><li><code>if (document.getElementById) { }</code></li></ol>

<p>with <q>&ldquo;you must be this high to ride.&rdquo;</q> Rather cool, and a very entertaining presentation.</p>

<h3 id="wilson"><acronym title="Microsoft Internet Explorer">IE</acronym>: 7 and beyond</h3>

<p class="vcard"><a href="http://www.flickr.com/photos/chrisjennings/169144799/in/set-72157594168773966/" title="Larger version of the Chris Wilson photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-15-chris-wilson-s" alt="Chris Wilson" width="200" height="150" /></a> <cite><a class="url fn" href="http://blogs.msdn.com/cwilso/">Chris Wilson</a></cite> worked on the Mosaic browser (that&rsquo;s, like, <em>Netscape&nbsp;1</em> &mdash; scary, isn&rsquo;t it?) and on <acronym>IE</acronym> ever since version&nbsp;2. Praise him for first implementing <acronym>CSS</acronym> in <acronym>IE</acronym>3, blame him for some nasty bugs he&rsquo;s personally responsible for in <acronym>IE</acronym>6. Also he&rsquo;s the one who wrote <a href="http://blogs.msdn.com/cwilso/archive/2006/05/11/595536.aspx" title="Chris Wilson&rsquo;s blog &ldquo;Microsoft, IE and the Web Standards Project&rdquo;">he will quit</a> (and probably become a professional surfer) the day he loses his passion or <acronym>IE</acronym> gets mothballed again.</p>

<p>After some blatant promotion for all the outstanding new features and fixes in <acronym>IE7</acronym>, things you can read about in the <a href="http://blogs.msdn.com/ie/"><acronym>IE</acronym>Blog</a> if you haven&rsquo;t yet, he came to the interesting facts:</p>

<p>First of all, they are planning the <strong>next two releases</strong> now, and it won&rsquo;t take another five years until <acronym>IE8</acronym> will emerge. Also <a href="http://blogs.msdn.com/ie/archive/2006/05/26/608255.aspx"><acronym>IE7+</acronym></a> for Windows Vista is only marketing speak, what counts is that it has the same features as <acronym>IE7</acronym> for Windows <acronym>XP</acronym>, except for some vista-only security and parental control. <strong><acronym>IE7</acronym> will ship</strong> in <q>&ldquo;second half 2006.&rdquo;</q> More precisely, the Malaysian Vista developer Jabez Gan disclosed earlier that <a href="http://www.msblog.org/?p=692" title="More on MSBlog">December 6</a> will be the release date.</p>

<p>Because of the deep interaction with the operating system they can&rsquo;t push it as a critical <strong>Windows update</strong>, but they will <q>&ldquo;strongly encourage people to update.&rdquo;</q> The <strong>new fonts</strong> won&rsquo;t be deployed with the update, more likely in a separate package, simply because with Unicode support some are too large.</p>

<p>On a technical side they are aware of developer&rsquo;s problems to test on <strong>multiple versions of <acronym>IE</acronym></strong>. Though it is technically hard to have a friendly co-existence of multiple <acronym>IE</acronym>s because they provide the operating system, it should be possible to create side-by-side versions of <em>the browser</em> only. Yay, that&rsquo;s what we want!</p>

<p>Also they would like to support the <strong><acronym title="eXtensible Hypertext Markup Language">XHTML</acronym> <acronym title="Multipurpose Internet Mail Extensions">MIME</acronym> type</strong>, but want to do it right, later. Same is true for <strong>advanced <acronym>DOM</acronym> support</strong>, or passing the <strong>Acid2 test</strong>. What&rsquo;s next for the web? <strong>Mashups</strong>, <strong><acronym title="Really Simple Syndication">RSS</acronym></strong>, <a href="/2006/atmedia-day-two/#tantek" title="See Tantek &Ccedil;elik&rsquo;s session for more information on microformats">microformats</a>, and <strong>XMLHttpRequest</strong> (did you know there&rsquo;s a <a href="http://www.w3.org/TR/XMLHttpRequest/" title="XMLHttpRequest Working Draft"><acronym title="World Wide Web Consortium">W3C</acronym> working draft</a>?). <strong>XForms</strong> is on their radar, but they need to coordinate efforts with other browser vendors.</p>

<p>Besides Chris recommended some tools like an expression finder to spot <acronym>CSS</acronym> hacks, or an application compatibility toolkit, stuff you can download as part of the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=D13EE10D-2718-47F1-AA86-1E32D526383D&#038;displaylang=en">Internet Explorer 7 Readiness Toolkit</a> from Microsoft with a genuine copy or from someplace else without.</p>

<h3 id="wcag">The new accessibility guidelines: <acronym title="Web Content Accessibility Guidelines">WCAG</acronym>&nbsp;2.0</h3>

<p>I had hoped that by visiting the panel about <acronym>WCAG</acronym> ['wu:k&aelig;g] I could avoid having to read <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/" title="Working Draft: Web Content Accessibility Guidelines 2.0">the unreadable</a> myself, but I was disappointed. You will read in <a href="/2006/to-hell-with-joe-clark/" title="To Hell With Joe Clark">another post</a> about it. Not much else to tell about that panel, except <acronym>WCAG</acronym>&nbsp;2.0 is probably not <a href="http://www.alistapart.com/articles/tohellwithwcag2" title="Joe Clark&rsquo;s article about WCAG 2.0 in A List Apart">as bad</a> as we have thought. There are <a href="http://accessify.com/2006/06/notes-about-our-media-wcag-20.php" title="Notes about the WCAG 2.0 panel">notes</a> and the <a href="http://accessify.com/presentations/" title="The slides for the WCAG 2.0 panel">slides</a> available on accessify.com.</p>

<h3 id="veen">Designing the next generation of web <abbr title="Applications">apps</abbr></h3>

<p class="vcard"><a href="http://www.flickr.com/photos/chimchim/168820983/in/set-72157594167975089/" title="Larger version of the Jeffrey Veen photo on flickr"><img class="floatleft photo" src="/wp-content/uploads/2006/06/2006-06-15-jeffrey-veen" alt="Jeffrey Veen in s suit with a presentation slide in the background and the words &ldquo;Generation Web Apps&rdquo;" width="200" height="132" /></a> <cite><a href="http://www.veen.com" class="url fn">Jeffrey Veen</a></cite> is the partner of Jesse James Garrett who gets all the attention for coining the term &ldquo;<acronym title="Asynchronous JavaScript and XML"><strong>Ajax</strong></acronym>.&rdquo; Anyway, <acronym>Ajax</acronym> is <em>so</em> going to change our world. Like the automobile, or the Great Depression. Some will get more mobile, some will get greatly depressed when the web becomes inaccessible.</p>

<p>In another panel the speakers agreed that <strong><acronym>Ajax</acronym></strong> can make live easier <strong>as an enhancement</strong> (Jeremy Keith calls it &ldquo;<a href="http://domscripting.com/presentations/xtech2006/" title="Slides by Jeremy Keith about Hijax">Hijax</a>&rdquo;), but shouldn&rsquo;t be a world of pain for the others. Actually I can see some of <a href="http://www.veen.com/nextgen.pdf" title="Jeffrey Veen&rsquo;s slides as PDF" type="application/pdf">Jeff&rsquo;s examples</a> (use Stuart Colville&rsquo;s <a href="http://muffinresearch.co.uk/archives/2006/06/16/media2006-notes-jeffrey-veen-designing-the-next-generation-of-web-apps/" title="Notes about Jeffrey Veen&rsquo;s presentation">notes</a> to understand the slides) as an enhancement. Like giving immediate feedback when input fields in a form validate, while degrading gracefully by giving feedback after a regular submit.</p>

<p>You can enhance understanding by coloring and visualizing rainfall values in a nicely designed table, or you can further enhance it by making it interactive with a fader to choose cities on a map. But I can&rsquo;t imagine how to have both.</p>

<p>In another example he showed a mashup of Google Maps with a Chicago crime database. Nice, but how can that be made accessible? So that people without JavaScript, or screen reader and braille display users <em>with</em> JavaScript can access the raw data table that lies under the visualization?</p>

<p>There was a lot of talk how <strong>today&rsquo;s websites will be tomorrow&rsquo;s web applications</strong>, but like <a href="/2006/atmedia-day-two/#koechley">Nate Koechley</a> put it: You can&rsquo;t just copy one aspect of desktop applications while ignoring the accessible alternatives. Desktop applications are accessible with multiple input devices, like a mouse or a keyboard. Screen readers can get the content. Don&rsquo;t you forget it when developing the <q>&ldquo;next generation off apps.&rdquo;</q> There&rsquo;s more than just good looks.</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2006/atmedia-day-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
