<?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/"
xmlns:series="http://organizeseries.com/"
> <channel><title>SitePoint &#187; Accessibility</title> <atom:link href="http://www.sitepoint.com/category/accessibility-2/feed/" rel="self" type="application/rss+xml" /><link>http://www.sitepoint.com</link> <description>Learn CSS &#124; HTML5 &#124; JavaScript &#124; Wordpress &#124; Tutorials-Web Development &#124; Reference &#124; Books and More</description> <lastBuildDate>Mon, 13 May 2013 13:12:07 +0000</lastBuildDate> <language>en-US</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.5.1</generator> <item><title>Accessible Audio Descriptions for HTML5 Video</title><link>http://www.sitepoint.com/accessible-audio-descriptions-for-html5-video/</link> <comments>http://www.sitepoint.com/accessible-audio-descriptions-for-html5-video/#comments</comments> <pubDate>Mon, 29 Apr 2013 21:32:51 +0000</pubDate> <dc:creator>James Edwards</dc:creator> <category><![CDATA[Accessibility]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[Intermediate]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[HTML5 Dev Center]]></category> <category><![CDATA[HTML5 Tutorials & Articles]]></category> <category><![CDATA[video]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=65695</guid> <description><![CDATA[James describes a simple but surprisingly effective technique for synchronising multiple media sources in order to add accessible audio descriptions to an existing video.]]></description> <content:encoded><![CDATA[<p></p><p>A client recently asked me to produce an accessible video player, and one of the features she was very keen to have is <strong>audio descriptions</strong>. Audio descriptions are intended for people who are blind or have impaired vision, providing additional spoken information to describe important visual details.</p><p>Traditionally, audio-described videos have to be made specially, with the audio encoded in a separate track of the single video file. It takes pretty specialised video-editing equipment to encode these audio tracks, and that raises the bar for most content producers beyond a practical level.</p><p>All the audio-described content I&#8217;ve seen on the web is like this. For example, <a
href="http://www.bbc.co.uk/iplayer/">BBC iPlayer</a> has a <a
title="Audio Described programs on BBC iPlayer (bbc.co.uk)" href="http://www.bbc.co.uk/iplayer/tv/categories/audiodescribed">selection of such content</a>, but the video player doesn&#8217;t give you control over the relative volumes, and you can&#8217;t turn the audio-descriptions off — you can only watch separate described or non-described versions of the program.</p><h2>Enter HTML5</h2><p>The <a
title="The video element (whatwg.org)" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html">HTML5 video specification</a> does provide an <code><a
title="Media resources with multiple media tracks (whatwg.org)" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#media-resources-with-multiple-media-tracks">audioTracks</a></code> object, which would make it possible to implement an on/off button, and to control the audio and video volumes separately. But its browser support is virtually non-existent — at the time of writing, only <abbr
title="Internet Explorer 10">IE10</abbr> supports this feature.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>In any case, what my client wanted was <strong>audio descriptions in a separate file</strong>, which could be added to a video without needing to create a separate version, and which would be easy to make without specialised software. And of course, it had to work in a decent range of browsers.</p><p>So my next thought was to use a <a
title="Synchronising multiple media elements (whatwg.org)" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#synchronising-multiple-media-elements">MediaController</a>, which is a feature of <abbr
title="HyperText Markup Language Version 5">HTML5</abbr> audio and video that allows you to synchronise multiple sources. However browser support for this is equally scant — at the time of writing, only Chrome supports this feature.</p><p>But you know — even without that support, it&#8217;s clearly not a problem to <strong>start</strong> two media files at the same time, it&#8217;s just a case of <strong>keeping them in sync</strong>. So can we use existing, widely-implemented features to make that work?</p><h2>Video Events</h2><p>The video <abbr
title="Application Programming Interface">API</abbr> provides a number of events we can hook into, that should make it possible to synchronise audio playback with events from the video:</p><ul><li>The <code>"play"</code> event (which fires when the video is played).</li><li>The <code>"pause"</code> event (which fires when the video is paused).</li><li>The <code>"ended"</code> event (which fires when the video ends).</li><li>The <code>"timeupdate"</code> event (which fires continually while the video is playing).</li></ul><p>It&#8217;s the <code>"timeupdate"</code> event that&#8217;s really crucial. The <em>frequency</em> at which it fires is not specified, and practise it varies considerably — but as a rough, overall average, it amounts to 3–5 times per second, which is enough for our purposes.</p><p>I&#8217;ve seen a similar approach being tried to <a
title="Two videos in sync (html5demos.com)" href="http://html5demos.com/two-videos">synchronise two video files</a>, but it isn&#8217;t particularly successful, because even tiny discrepancies are very obvious. But audio descriptions generally don&#8217;t need to be so precisely in sync — a delay of <code>100ms</code> either way would be acceptable — and playing audio files is far less work for the browser anyway.</p><p>So all we need to do is use the video events we have, to lock the audio and video playback together:</p><ul><li>When the video is played, play the audio.</li><li>When the video is paused, pause the audio.</li><li>When the video ends, pause the video and audio together.</li><li>When the time updates, set the audio time to match the video time, if they&#8217;re different.</li></ul><p>After some experimentation, I discovered that the best results are achieved by comparing the time in whole seconds, like this:</p><pre class="brush: jscript; title: ; notranslate">
if(Math.ceil(audio.currentTime) != Math.ceil(video.currentTime))
{
  audio.currentTime = video.currentTime;
}
</pre><p>This seems counter-intuitive, and initially I had assumed we&#8217;d need as much precision as the data provides, but that doesn&#8217;t seem to be the case. By testing it using a literal audio copy of the video&#8217;s soundtrack (i.e. so the audio and video both produce identical sound), it&#8217;s easy to hear when the synchronisation is good or bad. Experimenting on that basis, I got much better synchronisation when rounding the figures, than not.</p><p>So here&#8217;s the final script. If the browser supports <code>MediaController</code> then we just use that, otherwise we implement manual synchronisation, as described:</p><pre class="brush: jscript; title: ; notranslate">
var video = document.getElementById('video');
var audio = document.getElementById('audio');
if(typeof(window.MediaController) === 'function')
{
  var controller = new MediaController();
  video.controller = controller;
  audio.controller = controller;
}
else
{
  controller = null;
}
video.volume = 0.8;
audio.volume = 1;
video.addEventListener('play', function()
{
  if(!controller &amp;&amp; audio.paused)
  {
    audio.play();
  }
}, false);
video.addEventListener('pause', function()
{
  if(!controller &amp;&amp; !audio.paused)
  {
    audio.pause();
  }
}, false);
video.addEventListener('ended', function()
{
  if(controller)
  {
    controller.pause();
  }
  else
  {
    video.pause();
    audio.pause();
  }
}, false);
video.addEventListener('timeupdate', function()
{
  if(!controller &amp;&amp; audio.readyState &gt;= 4)
  {
    if(Math.ceil(audio.currentTime) != Math.ceil(video.currentTime))
    {
      audio.currentTime = video.currentTime;
    }
  }
}, false);
</pre><p>Note that the <code>MediaController</code> itself is defined only through scripting, whereas it is possible to define a controller using the static <code>"mediagroup"</code> attribute:</p><pre class="brush: xml; title: ; notranslate">
&lt;video mediagroup=&quot;foo&quot;&gt; ... &lt;/video&gt;
&lt;audio mediagroup=&quot;foo&quot;&gt; ... &lt;/audio&gt;
</pre><p>If we did that, then it would work without JavaScript in Chrome. It would sync the media sources, but the user would have <strong>no control over the audio</strong> (including not being able to turn it off), because the browser <em>wouldn&#8217;t know what the audio represents</em>. This is the case in which it would be better to have the audio encoded into the video, because then it could appear in the <code>audioTracks</code> object, and the browser could recognise that and be able to provide native controls.</p><p>But since we have no <code>audioTracks</code> data, that&#8217;s rather a moot point! So if scripting is not available, the audio simply won&#8217;t play.</p><p><strong>Here&#8217;s the final demo</strong>, which will work in any recent version of Opera, Firefox, Chrome, Safari, or <abbr
title="Internet Explorer 9">IE9</abbr> or later:</p><ul><li><strong><a
href="http://jspro.brothercake.com/audio-descriptions/">Audio Descriptions Demo</a></strong></li></ul><p>This is just a simple proof-of-concept demo, of course — there&#8217;s no initial feature detection, and it only has the basic controls provided by the native <code>"controls"</code> attribute. For a proper implementation it would need custom controls, to provide (among other things) a button to switch the audio on and off, and separate volume sliders. The interface should also be accessible to the keyboard, which is not the case in some browsers&#8217; native controls. And it would need to handle buffering properly — as it is, if you seek past the point where the video has preloaded, the audio will continue to play freely until the video has loaded enough to bring it back into sync.</p><p>I might also mention that the descriptions themselves are hardly up to professional standards! That&#8217;s my voice you can hear, recorded and converted using <a
title="Audacity is a free audio editor and recorded" href="http://audacity.sourceforge.net/">Audacity</a>. But such as it is, I think it makes an effective demonstration, of how low the technical barrier-to-entry is with this approach. I didn&#8217;t have to edit the video, and I made the audio in an hour with free software.</p><p>As a proof of concept, I&#8217;d say it was pretty successful — and I&#8217;m sure my client will be very pleased!</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/accessible-audio-descriptions-for-html5-video/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Global Accessibility Awareness Day</title><link>http://www.sitepoint.com/global-accessibility-awareness-day/</link> <comments>http://www.sitepoint.com/global-accessibility-awareness-day/#comments</comments> <pubDate>Tue, 09 Apr 2013 00:00:02 +0000</pubDate> <dc:creator>Ricky Onsman</dc:creator> <category><![CDATA[Accessibility]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=65240</guid> <description><![CDATA[Global Accessibility Awareness Day (GAAD) is on May 9, and it aims to get web developers, designers and other web professionals talking, thinking and learning about digital accessibility. ]]></description> <content:encoded><![CDATA[<p></p><p>On May 9, you are invited to participate in Global Accessibility Awareness Day (GAAD). The purpose of the day is to get people talking, thinking and learning about digital (web, software, mobile, etc.) accessibility and users with different disabilities.</p><p>The target audience of GAAD is the design, development, usability, and related communities who build, shape, fund and influence technology and its use. Yep, that&#8217;s us.</p><p>Our recent articles touching on web accessibility have made it apparent there are plenty of SitePoint readers interested in the topic of making technology accessible and usable by persons with disabilities, but they&#8217;re not always clear on why, or how, or where to start.</p><p>Awareness comes first. Read the blog post by Joe Devon that inspired GAAD <a
href="http://mysqltalk.wordpress.com/2011/11/27/challenge-accessibility-know-how-needs-to-go-mainstream-with-developers-now">http://mysqltalk.wordpress.com/2011/11/27/challenge-accessibility-know-how-needs-to-go-mainstream-with-developers-now</a>.</p><p>I figure most of our readers will be coming at this from one of two perspectives:</p><p><strong>1) I&#8217;m experienced with web accessibility issues, and I want to help others devs and designers get on board.</strong></p><p>If this is you, consider holding a free talk/gathering/Meetup, organizing hands-on demos, or planning other activities that bring attention to some aspect of digital accessibility. You can make it big or small, virtual or in-person, formal, or less so. You can arrange something at work/school, or open it up to your local community. Get your event listed on the GAAD website so that others can join in.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p><strong> 2) I&#8217;m keen to embrace web accessibility, but I&#8217;m not sure where to start.</strong></p><p>On May 9, seek out a local public event or find a virtual GAAD activity and get involved. In addition to events, for an hour on that day, people are invited to experience digital accessibility by unplugging the mouse for an hour and using the keyboard alone, or turning on mobile devices’ accessibility features and surfing the web or using favorite mobile apps.</p><p>Ideas from last year’s GAAD and resources are on the event’s website. Full details are at <a
href="http://www.globalaccessibilityawarenessday.org/">http://www.globalaccessibilityawarenessday.org</a>.</p><p>Other ways you can show support and keep up with developments are by Liking and Sharing the event&#8217;s <a
href="http://www.facebook.com/globalaccessibilityawarenessday">Facebook</a> page, and/or by following <a
href="https://twitter.com/gbla11yday">@gbla11yday</a> on Twitter and tweet using the #GAAD hashtag.</p><p>You can reach Joe Devon and Jennison Asuncion, co-founders of this global effort at <a
href="mailto:globala11yawarenessday@gmail.com">globala11yawarenessday@gmail.com</a>.</p><p>We&#8217;ll try to point out some of the more interesting events here closer to May 9.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/global-accessibility-awareness-day/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Don&#8217;t Hijack My Browser</title><link>http://www.sitepoint.com/dont-hijack-my-browser/</link> <comments>http://www.sitepoint.com/dont-hijack-my-browser/#comments</comments> <pubDate>Mon, 25 Mar 2013 11:03:44 +0000</pubDate> <dc:creator>Mike Ritter</dc:creator> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Usability]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=64764</guid> <description><![CDATA[Mike Ritter asks web developers to not implement functionality that prevents people with disabilities from being able to use their sites. ]]></description> <content:encoded><![CDATA[<p></p><p>As a person with a disability I find navigating most websites fairly straightforward. I can use the keyboard or a mouse to scroll up and down to view content. With just the space bar I can scroll the page a frame at a time.</p><p>Until my browser is hijacked by elements on the page. Then I have to use my mouse to get control of the experience.</p><p>Here are four frustrating ways websites hijack my browser.</p><h2>Search Bar</h2><p>Hey Google (and now Yahoo!), I&#8217;m talking to you!</p><p>I get that you want to make it easy for someone to get going on that search, but does my cursor <em>really</em> have to jump to the search box as soon as the page loads?!</p><p>You can set up the tab order using <code>tabindex</code> to take the cursor to the box on the tab click.</p><p><code>&lt;input type="text" id="search" tabindex="1"&gt;</code></p><p>I get that Google has built this into their system and it&#8217;s the expected behavior, but it is a nuisance for people like myself who navigate with our keyboards.</p><p>First, it interrupts the browsing flow because I am unable to follow my keyboard shortcut (just backspace on <em>most</em> browsers) to go back a page.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>Second, when I start pressing the space bar and want to scroll the page I&#8217;m just filling in the search bar. It just doesn&#8217;t work.</p><h2>Confirmation Alert Box</h2><p>Every now and then I&#8217;m surfing the Web and end up on a site with a confirmation box. Sometimes the box pops up on arrival, other times it pops up when I try to leave the page.</p><p>I know enough about programming to recognize an opportunity to insert malware. So I never click the confirmation. I don&#8217;t know if pressing <strong>okay</strong> will close the tab or take me to russianhotties.xxx.</p><p>My remedy is shutting down my browser then reopening it and tromping through history to the sites I had open.</p><h2>Popup Ads</h2><p>This one drives me <strong><em>crazy</em></strong> and I&#8217;ll wager most developers are guilty of this one.</p><p>Attractive popup ads are no longer an annoyance, but part of the business model of many websites. I&#8217;m left to watch the popup obscure my content. I get it. The company has to generate revenue. But the ad should get out of my way.</p><p>The standard was to timeout the popup years ago. Some ads creatively move to the sidebar in a static ad. Regardless of the technology, this is available functionality. Another former standard was to tie a keyboard shortcut like <strong>esc</strong> or <strong>x</strong> to a close function on the popup. But rarely do I see a popup that I don&#8217;t have to click an action item or a tiny close link in the top corner with the mouse.</p><h2>Static Navbar</h2><p>Finally, there&#8217;s the static navigation bar across the top of the page. Sometimes these are three or four lines tall. They <em>are</em> convenient, giving users easy access to site information.</p><p>But go back to scrolling.</p><p>When I tap <strong>space bar</strong> on a typical webpage the window scrolls down one frame. This is such a convenient way to quickly browse a page. As I pointed out above, hijacking my cursor gets in the way. But so do those fancy navigation bars.</p><p><em>Some</em> websites account for the navbar adding padding to accommodate the bar across the top. However, plenty of popular websites are oblivious. As the content scrolls, several lines are obscured by the handy bar.</p><h2>Am I Just a Curmudgeon?</h2><p>Our lives as developers are already full of <abbr
title="user experience">UX</abbr> demands.</p><p><em>Another accommodation now from this guy who just wants to click his spacebar to scroll is not floating to the top of my list.</em></p><p>I get it. But imagine how all of the little tweaks you build into your workflow save you steps and then having to do away with them because somebody else just changed the way things are done. Look at recent decisions by <a
href="http://www.sitepoint.com/adobe-shuts-browserlab/">Adobe</a> and <a
href="http://www.sitepoint.com/goodbye-google-reader/">Google</a> to shut down services, for example.</p><p>For people with mobility impairments, added obstacles to the content are a real barrier. Just getting a mouse cursor in the precise spot can be a chore.</p><p>But thoughtful design and graceful transitions can give the browser back to users like myself to enjoy our convenient web experience.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/dont-hijack-my-browser/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Introducing the New HTML5 &lt;main&gt; Element</title><link>http://www.sitepoint.com/html5-main-element/</link> <comments>http://www.sitepoint.com/html5-main-element/#comments</comments> <pubDate>Fri, 08 Feb 2013 15:24:17 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Accessibility]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Web standards]]></category> <category><![CDATA[HTML5 Dev Center]]></category> <category><![CDATA[HTML5 Tutorials & Articles]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=63334</guid> <description><![CDATA[There's a new HTML5 element for you to play with. Craig looks at what the &#60;main&#62; tag will do for you and your pages.]]></description> <content:encoded><![CDATA[<p></p><p>When was the last time we received a new element? HTML5 introduced just nine new structural tags and they&#8217;ve been stable for several years: <code>section</code>, <code>article</code>, <code>aside</code>, <code>hgroup</code>, <code>header</code>, <code>footer</code>, <code>nav</code>, <code>figure</code> and <code>figcaption</code>. There are another 20 or so content elements including <code>video</code>, <code>audio</code>, <code>canvas</code>, <code>progress</code> etc.</p><p>Today, we have a new structural element to learn: &lt;main&gt; According to the <a
href="http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-element">recent W3C specification</a>:</p><blockquote><p> The main element represents the main content of the body of a document or application. The main content area consists of content that is directly related to or expands upon the central topic of a document or central functionality of an application.</p><p>Authors must not include more than one main element in a document.</p><p>Authors must not include the main element as a child of an article, aside, footer, header or nav element.</p></blockquote><p><code>main</code> marks the meaty content within your page, i.e. the target of a <em>&#8220;skip to&#8221;</em> link. You&#8217;ll probably use <code>main</code> where you had a content wrapper before; it will replace tags such as <code>&lt;div id=&quot;main&quot;&gt;</code>, <code>&lt;div id=&quot;page&quot;&gt;</code> or <code>&lt;div id=&quot;wrapper&quot;&gt;</code>. If you&#8217;re using ARIA, you&#8217;d use it for the element where <code>role=&quot;main&quot;</code> is defined&hellip;</p><pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot; /&gt;
&lt;title&gt;Using main&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;header&gt;My page&lt;/header&gt;
	&lt;nav&gt;
		&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;
	&lt;/nav&gt;
	&lt;main&gt;
		&lt;article&gt;
			&lt;h1&gt;My article&lt;/h1&gt;
			&lt;p&gt;Content&lt;/p&gt;
		&lt;/article&gt;
		&lt;aside&gt;
			&lt;p&gt;More information&lt;/p&gt;
		&lt;/aside&gt;
	&lt;/main&gt;
	&lt;footer&gt;Copyright 2013&lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre><h2>Browser Support</h2><p>While <code>main</code> is new, most browsers support unrecognized tags. However, you will need to apply a block style in your CSS, i.e.</p><pre><code>main
{
	display: block
}
</code></pre><p>This is may become unnecessary as browsers evolve (<code>main</code> is supported in Chrome and Firefox nightly builds), but there&#8217;s little harm retaining it.</p><p>The element&#8217;s also been added to the <a
href="https://github.com/aFarkas/html5shiv">html5shiv</a> so it will work in IE6, 7 and 8. You may need to download the new version if you&#8217;re using a locally-hosted file.</p><h2>Can you use &lt;main&gt; today?</h2><p>The element has been surprisingly controversial. It&#8217;s been argued that it&#8217;s unnecessary and pages should permit more than one <code>main</code> tag. But it&#8217;s here to stay and I think it will be useful. Just ensure you&#8217;ve thoroughly tested your new site prior to going live!</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/html5-main-element/feed/</wfw:commentRss> <slash:comments>33</slash:comments> </item> <item><title>CAPTCHA: Inaccessible to Everyone</title><link>http://www.sitepoint.com/captcha-inaccessible-to-everyone/</link> <comments>http://www.sitepoint.com/captcha-inaccessible-to-everyone/#comments</comments> <pubDate>Thu, 07 Feb 2013 13:44:19 +0000</pubDate> <dc:creator>Gian Wild</dc:creator> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Usability]]></category> <category><![CDATA[Web security]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=63309</guid> <description><![CDATA[Expert web accessibility consultant Gian Wild explains that CAPTCHAs are both unusable and inaccessible. So why does everyone keep using them?]]></description> <content:encoded><![CDATA[<p></p><h2>What’s a CAPTCHA?</h2><p>CAPTCHA stands for Completely Automated Public Turing test to tell Computers and Humans Apart.</p><p>On the webpage, a CAPTCHA is a security measure designed to keep out robots by asking the user to key in characters displayed in a box.</p><p>Yes, that&#8217;s the one: where you have to decipher some squiggly words and enter them in a field before you can submit an online form.And often do it three or four times before you&#8217;re successful.</p><p>For example:</p><p><img
class="alignnone size-full wp-image-63310" alt="CAPTCHAs" src="http://www.sitepoint.com/wp-content/uploads/1/files/2013/02/figure42.png" width="600" height="412" /></p><p>For more information on definitions, see the comprehensive <a
href="http://en.wikipedia.org/wiki/CAPTCHA">Wikipedia article on CAPTCHAs</a>.</p><p>As far as the real world goes, there are some real doozies out there, like the <a
href="http://api.addthis.com/oexchange/0.8/forward/email/offer?url=http://picturesofyou.com.au/&amp;username=tacweb&amp;title=TAC%20-%20Pictures%20of%20You">moving CAPTCHA</a> we found recently in an audit (we’re rebuilding the site so it won’t be there long!)</p><p>John Foliot found some <a
href="http://john.foliot.ca/not-the-blog-post-i-was-going-to-write-today/">inexpressibly confusing CAPTCHAs</a>, an article which is worth a read – please note there is a lot of movement in the article (and no it doesn’t fail the flickering accessibility requirements even if it looks like it)!<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><h2>Why are there so many CAPTCHAs?</h2><p>Really, the world would be a much easier place without CAPTCHAs. They are confusing and difficult and we are all time-poor. And surely people want us to use their web site / submit their form / sign up to their newsletter?</p><p>The reason that there are so many CAPTCHAs is that there is so much spam in the world. They are perceived as an effective way to prevent robots from, for example, posting comment spam on blogs.</p><p>Another common use is to prevent robots with more criminal intent from logging into online bank accounts and the like.</p><p>The CAPTCHA is, in reality, a reverse Turing test – performed by a machine to make sure the person filling out the form is, well, a person.</p><p>This is also why they are often difficult to interpret. If they were easy to read, then machines could read them, and that would defeat the point.</p><h2>What about accessibility?</h2><p>Not only are CAPTCHAs difficult for anyone to use, they are notoriously inaccessible to people with some types of disabilities.</p><p>In fulfilling their designated brief of keeping out machines, they keep out people using assistive technologies such as screen readers, thereby closing the door on millions of blind people. So, if you&#8217;re blind, use a screen reader and want to log into your CAPTCHA-protected bank account, well &#8230; bad luck. Isn&#8217;t there a law against that? There ought to be.</p><p>There is even a specific section in the Web Content Accessibility Guidelines, Version 2.0 about CAPTCHA, in which their inaccessibility is acknowledged, but the WCAG Working Group feel they can&#8217;t be too hard-line about it:</p><blockquote><p><acronym>CAPTCHAs</acronym> are a controversial topic in the accessibility community. As is described in the paper <a
href="http://www.w3.org/TR/turingtest/">Inaccessibility of CAPTCHA</a>, CAPTCHAs intrinsically push the edges of human abilities in an attempt to defeat automated processes. Every type of CAPTCHA will be unsolvable by users with certain disabilities. However, they are widely used, and the Web Content Accessibility Guidelines Working Group believes <b><i>that if CAPTCHAs were forbidden outright, Web sites would choose not to conform to WCAG rather than abandon CAPTCHA</i></b>. This would create barriers for a great many more users with disabilities. For this reason the Working Group has chosen to structure the requirement about CAPTCHA in a way that meets the needs of most people with disabilities, yet is also considered adoptable by sites. Requiring two different forms of CAPTCHA on a given site ensures that most people with disabilities will find a form they can use.</p><p>Because some users with disabilities will still not be able to access sites that meet the minimum requirements, the Working Group provides recommendations for additional steps. Organizations motivated to conform to WCAG should be aware of the importance of this topic and should go as far beyond the minimum requirements of the guidelines as possible. Additional recommended steps include:</p><ol><li>Providing more than two modalities of CAPTCHAs</li><li>Providing access to a human customer service representative who can bypass CAPTCHA</li><li>Not requiring CAPTCHAs for authorized users”</li></ol></blockquote><p
align="right"><a
href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/text-equiv-all.html">http://www.w3.org/TR/UNDERSTANDING-WCAG20/text-equiv-all.html</a></p><p
style="text-align: left;" align="right">The emphasis in the above quote is mine. When they talk about &#8220;two different forms of CAPTCHA&#8221;, they mean one that requires sight to complete plus one that relies on audio and should therefore be accessible to people with impaired vision. They then acknowledge that still won&#8217;t make it accessible to everyone.</p><p
style="text-align: left;" align="right">In reality, the ones that rely on vision are so difficult to use for fully sighted people, while the audio versions use sounds so distorted that no-one can make them out.</p><p>So basically they are inaccessible, but the Working Group decided that if people had to choose between CAPTCHAs and WCAG2 they would choose CAPTCHAs, so they allowed for it anyway.</p><p>I believe there are some effective unique and most importantly, accessible, alternatives to CAPTCHA, but I’ll talk about that in a later article.</p><h2>What about reCAPTCHA – it’s accessible isn’t it?</h2><p>In a word, no.</p><p><img
class="alignnone size-full wp-image-63311" alt="recaptcha" src="http://www.sitepoint.com/wp-content/uploads/1/files/2013/02/recaptcha.png" width="310" height="163" /></p><p>I’m always asked about reCAPTCHA, or what about Accessible CAPTCHA? I have tested numerous CAPTCHAs and <b>I have never come across an accessible CAPTCHA</b>. Feel free to prove me wrong.</p><p>But I am also yet to find a CAPTCHA that complies to WCAG2 either.</p><p>There is a fundamental disconnect in intent that means it is highly unlikely that a universally accessible CAPTCHA, or even a set of different CAPTCHAs will ever be devised.</p><p>CAPTCHAs are, by definition, exclusive: they are are there to keep baddies out. Their way of testing &#8220;badness&#8221; does not allow for the legitimate use of machines. So they will tend to be inaccessible.</p><p>To understand how this becomes a negative spiral, you only have to look at the Google Account Sign Up process. In order to make it &#8220;accessible&#8221;, Google provide an audio version. A group of hackers was able to prove that it could pass the audio test robotically (read more about it in the article <a
href="http://arstechnica.com/security/2012/05/google-recaptcha-brought-to-its-knees/">Google recaptcha brought to its knees</a>).</p><p>Did Google concede the CAPTCHA was a failure and should be replaced by something more accessible? Not a bit of it. Instead, they made the audio more distorted so that a machione couldn&#8217;t possibly interpret it correctly &#8211; and nor could any human. Seriously. Try the <a
href="https://accounts.google.com/SignUp?service=mail&amp;continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&amp;ltmpl=default&amp;hl=en">Google CAPTCHA</a> yourself.</p><p>One of the hackers pinpointed out the problem:</p><blockquote><p>While the changes stymied the Stiltwalker attack, Adam said his own experience using the new audio tests leaves him unconvinced that they are a true improvement over the old system.</p><p>&#8220;I could only get about one of three right,&#8221; he said. &#8220;Their Turing test isn&#8217;t all that effective if it thinks I&#8217;m a robot.&#8221;</p></blockquote><p>Couldn’t have said it better myself.</p><p>In my next article, I&#8217;ll explore how to replace CAPTCHAs with accessible options, while maintaining security and preventing spam.</p><div></div><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/captcha-inaccessible-to-everyone/feed/</wfw:commentRss> <slash:comments>43</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Database Caching 37/55 queries in 0.075 seconds using memcached
Object Caching 1012/1078 objects using memcached

Served from: www.sitepoint.com @ 2013-05-13 15:45:16 --