<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.yuiblog.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Yahoo! User Interface Blog » Design</title>
	
	<link>http://www.yuiblog.com/blog</link>
	<description>News and Articles about Designing and Developing with Yahoo! Libraries.</description>
	<lastBuildDate>Mon, 06 Jul 2009 22:28:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.yuiblog.com/yuiblog/design" type="application/rss+xml" /><item>
		<title>John Peloquin’s Multi-layer Calendar</title>
		<link>http://www.yuiblog.com/blog/2009/04/03/multi-layer-calendar/</link>
		<comments>http://www.yuiblog.com/blog/2009/04/03/multi-layer-calendar/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 22:41:57 +0000</pubDate>
		<dc:creator>Eric Miraglia</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[johnpeloquin whardyinteractive yui calendar]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2009/04/03/multi-layer-calendar/</guid>
		<description><![CDATA[
YUI contributor (and author of the Interval Selection Calendar example) John Peloquin of W. Hardy Interactive has released another excellent option for Calendar implementers: a layered navigation path for selecting years and months. The layered approach provides an alternative to the built-in navigator interface that ships with Calendar.
John describes the inspiration and thought process behind [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.whardy.com/john/2009/04/03/multi-layer-calendar/"><img src="http://yuiblog.com/assets/calendar-layer-20090403-152423.jpg" alt="John Peloquin's multi-layer calendar navigator." width="510" height="371" /></a></p>
<p>YUI contributor (and author of the <a href="http://developer.yahoo.com/yui/examples/calendar/intervalcal.html">Interval Selection Calendar example</a>) John Peloquin of W. Hardy Interactive has released another excellent option for <a href="http://developer.yahoo.com/yui/calendar/">Calendar</a> implementers: <a href="http://blogs.whardy.com/john/2009/04/03/multi-layer-calendar/">a layered navigation path for selecting years and months</a>. The layered approach provides an alternative to the built-in <a href="http://developer.yahoo.com/yui/examples/calendar/calnavigator.html">navigator interface</a> that ships with Calendar.</p>
<p>John describes the inspiration and thought process behind this implementation <a href="http://blogs.whardy.com/john/2009/04/03/multi-layer-calendar/">on his blog</a>, where you&#8217;ll also find  <a href="http://whardy.com/js/yui/multilayercalendar/docs/YAHOO.WHII.widget.MultiLayerCalendar.html"  title="Multi-Layer Calendar API documentation">API documentation</a> and <a href="http://whardy.com/js/yui/multilayercalendar/docs/multilayercalendar.js.html" title="Multi-Layer Calendar source code">source code</a>.</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=zCwgAqxG0UU:eAAoSKZuZss:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=zCwgAqxG0UU:eAAoSKZuZss:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=zCwgAqxG0UU:eAAoSKZuZss:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=zCwgAqxG0UU:eAAoSKZuZss:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=zCwgAqxG0UU:eAAoSKZuZss:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2009/04/03/multi-layer-calendar/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Survey: When is an Accordion not an Accordion?</title>
		<link>http://www.yuiblog.com/blog/2009/03/23/survey-when-is-an-accordion-not-an-accordion/</link>
		<comments>http://www.yuiblog.com/blog/2009/03/23/survey-when-is-an-accordion-not-an-accordion/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 05:20:03 +0000</pubDate>
		<dc:creator>Christian Crumlish</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[accordion]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[collapsible panels]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[rich interactions]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2009/03/23/survey-when-is-an-accordion-not-an-accordion/</guid>
		<description><![CDATA[I&#8217;m looking for feedback from people who have designed or built an interface using an &#8220;accordion&#8221; module (or are considering doing so). You see, I&#8217;ve been working on a design pattern for accordion modules, and I&#8217;d like to throw out a handful of open questions to the community via this brief survey. I&#8217;ll be listening [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.yuiblog.com/blog/wp-content/uploads/2009/03/accordion-pop.png" alt="example of an accordion" style="margin: 0pt 0pt 2px 8px; float: right" />I&#8217;m looking for feedback from people who have designed or built an interface using an &#8220;accordion&#8221; module (or are considering doing so). You see, I&#8217;ve been working on a design pattern for accordion modules, and I&#8217;d like to throw out a handful of open questions to the community via <a href="http://www.surveymonkey.com/s.aspx?sm=lGHKygw2YwMI8yoom00Tzg_3d_3d">this brief survey</a>. I&#8217;ll be listening elsewhere as well, on twitter (<a href="http://twitter.com/mediajunkie">@mediajunkie</a>) and on mailing lists where web designers and developers hang out.</p>
<p>(I realize this is not a scientific survey. I&#8217;m just interested in engaging the wider community in a discussion instead of trying to impose my view or Yahoo!&#8217;s view on the community as authoritative.)</p>
<p>Everywhere I go lately, it seems that interaction designers and web developers are talking about accordion widgets and debating about what makes an accordion an accordion. Not everyone working in this field has heard the term (some may simply refer to &#8220;stacked panels&#8221; or &#8220;collapsible panels&#8221;) but most get the gist fairly easily. Ironically, none of the UI elements described as accordions share the actual behavior of a real-world accordion (the musical instrument): namely, that stretching an accordion opens all the folds evenly.</p>
<p>Accordions have been an on-and-off topic of discussion <a href="http://www.ixda.org/search.php?tag=accordion">on the main IxDA mailing list</a>; we discussed them in our <a href="http://interaction09.crowdvine.com/talks/show/2574">Pattern Library</a> workshop in Vancouver earlier this month, and there&#8217;s been an ongoing discussion about accordions on our internal designer mailing list here at Yahoo!.</p>
<p>So I sat down with some folks from the YUI team (and Marco, the maker of an experimental <a href="http://yuiblog.com/blog/2008/07/25/accordionview/">YUI accordion widget</a>) a little while ago to sort through a draft of an accordion pattern that might help inform the development of an official YUI component.</p>
<p>Broadly speaking, most people agree on what we&#8217;re talking about when we talk about an accordion interface element. Everyone agrees that accordions are used to compress content into a limited space and that they consist of panels that can collapse or expand. Beyond this, there are a number of subtle nuances that not everyone agrees on.</p>
<p>One trend I&#8217;ve noticed is that front-end developers tend be agnostic about how the accordion should work, viewing it as really just a variant on a tree widget. Designers tend to be more prescriptive, saying that to be an accordion it must behave in thus and such a way (but not all designers agree on what these rules are).</p>
<p>In the end, the YUI folks will produce code that can be made to do just about anything. We aren&#8217;t going to try to impose our own taste or preferences in design through the functionality of the code itself. However, we will use the associated pattern to make suggestions and recommendations drawn from the experience of the entire design community, and we will probably lobby for default behaviors that match what most people expect.</p>
<p>So, if you&#8217;ve got a few minutes and an opinion, please <a href="http://www.surveymonkey.com/s.aspx?sm=lGHKygw2YwMI8yoom00Tzg_3d_3d">visit the survey</a> and let me know what you think!</p>
<p>I&#8217;ll close the survey on April 30.</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=piUIMo7GdgY:lKBEYHKHtcs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=piUIMo7GdgY:lKBEYHKHtcs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=piUIMo7GdgY:lKBEYHKHtcs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=piUIMo7GdgY:lKBEYHKHtcs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=piUIMo7GdgY:lKBEYHKHtcs:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2009/03/23/survey-when-is-an-accordion-not-an-accordion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>YUI Turns Three!</title>
		<link>http://www.yuiblog.com/blog/2009/02/18/yui-3rd-birthday/</link>
		<comments>http://www.yuiblog.com/blog/2009/02/18/yui-3rd-birthday/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 03:38:33 +0000</pubDate>
		<dc:creator>Jenny Han Donnelly</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2009/02/18/yui-3rd-birthday/</guid>
		<description><![CDATA[The YUI Library turned three years old this month and we&#8217;d like to invite you &#8212; our community of developers and implementers &#8212; to come out and celebrate! To celebrate our third birthday (and our 2.7.0 release),  we&#8217;ll be hosting a recession-chic happy hour at the Blue Chalk Cafe in downtown Palo Alto,  [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://yuiblog.com/assets/yui-3rd-birthday/three.png" width="170" height="245" align="right">The YUI Library turned three years old this month and we&#8217;d like to invite you &#8212; our community of developers and implementers &#8212; to come out and celebrate! To celebrate our third birthday (and our 2.7.0 release),  we&#8217;ll be hosting a recession-chic happy hour at the Blue Chalk Cafe in downtown Palo Alto,  Thursday, February 26 from 6:00 to 8:00 pm. Nothing too fancy,  but we&#8217;ll have fun goodies to give away and the first few rounds of drinks are on us (until the tab runs out). Details and signups are at <a href="http://upcoming.yahoo.com/event/1850956">Upcoming</a>. Hope to see you there!</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=-oJBE2OSl1A:cu3lRUBevD4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=-oJBE2OSl1A:cu3lRUBevD4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=-oJBE2OSl1A:cu3lRUBevD4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=-oJBE2OSl1A:cu3lRUBevD4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=-oJBE2OSl1A:cu3lRUBevD4:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2009/02/18/yui-3rd-birthday/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>YUI 2.7.0 Released</title>
		<link>http://www.yuiblog.com/blog/2009/02/18/yui-270/</link>
		<comments>http://www.yuiblog.com/blog/2009/02/18/yui-270/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 23:52:41 +0000</pubDate>
		<dc:creator>George Puckett</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2009/02/18/yui-270/</guid>
		<description><![CDATA[The YUI development team is pleased to release version 2.7.0 of the YUI Library. You can download YUI 2.7.0 from YUILibrary.com or configure your implementation using the YUI Configurator.
Version 2.7.0 introduces a new StyleSheet component, graduates three components out of &#8220;beta&#8221;, improves support for the upcoming release of IE8,  includes over 180 bug fixes [...]]]></description>
			<content:encoded><![CDATA[<p>The YUI development team is pleased to release <a href="http://developer.yahoo.com/yui/">version 2.7.0 of the YUI Library</a>. You can <a href="http://developer.yahoo.com/yui/download/">download YUI 2.7.0</a> from YUILibrary.com or configure your implementation using the <a href="http://developer.yahoo.com/yui/articles/hosting/">YUI Configurator</a>.</p>
<p>Version 2.7.0 introduces a new StyleSheet component, graduates three components out of &#8220;beta&#8221;, improves support for the upcoming release of IE8,  includes over 180 bug fixes and enhancements, and ships with more than <a href="http://developer.yahoo.com/yui/examples/">300 functional examples</a>.</p>
<h3 id="introducing-stylesheet">Introducing StyleSheet</h3>
<p>The <a href="http://developer.yahoo.com/yui/stylesheet/">YUI StyleSheet Utility</a>, developed by YUI engineer Luke Smith, provides a means to optimize the application of a style or changes to existing styles across multiple elements without incurring the cost of a page reflow for each element. Using the benefits of dynamic CSS,  the StyleSheet Utility allows the creation of new stylesheets and changes to existing stylesheets that can be applied to multiple elements without the need to loop through the elements in the DOM, thus maintaining an optimal experience for the end user of the page.</p>
<h3 id="component-updates">Updates to Existing Components</h3>
<h4 id="charts-enhancements">Charts Enhancements</h4>
<p><a href="http://developer.yahoo.com/yui/charts/" title="YUI Charts Control"><img src="http://yuiblog.com/assets/yui-270/charts-enhancements.png" alt="Enhancements to Charts Control include rotated labels, zero-gridline styling, and enhanced series styling"></a></p>
<p>The <a href="http://developer.yahoo.com/yui/charts/">Charts Control</a> benefits from several new additions in the 2.7.0 release made by Dwight &#8220;Tripp&#8221; Bridges. Charts can now be specified with rotated axis labels and titles. New series styles have been added which allow more control over the color and alpha settings of lines, borders, and fills for the series markers. A <code>zeroGridline</code> style has been added to be able to draw attention to a chart&#8217;s zero gridline when it appears beyond the origin. Several bugs have been addressed in the TimeAxis class, resulting in more accurate <code>majorUnit</code> and <code>minorUnit</code> calculations.</p>
<h4 id="dom-additions">Additions to the Dom Collection</h4>
<p>Matt Sweeney has been hard at work in both the 3.x and 2.x code lines of YUI. As an enhancement to 2.7.0, the work done in 3.x on <code>getXY()</code> and <code>setXY()</code> has been integrated into the <a href="http://developer.yahoo.com/yui/dom/">Dom Collection</a> for this release. The properties <code>height</code> and <code>width</code> are now available in Region; the <code>get()</code> method now supports Element instances; and several new methods have been added for this release, including <code>getComputedStyle()</code>, <code>getElementBy()</code>, <code>setAttribute()</code>, and <code>getAttribute()</code>.</p>
<h4 id="container-changes">Container Changes</h4>
<p>The <a href="http://developer.yahoo.com/yui/container/">Container family of components</a> has received a couple notable updates from YUI&#8217;s own Satyen Desai. Dialog now supports sending post data along with any data mined from the form for &#8220;async&#8221; post requests. It also provides the Connection object as the first argument to subscribers of the &#8220;asyncSubmit&#8221; event. Overlay&#8217;s &#8220;fixedcenter&#8221; support has been enhanced with the ability to optionally disable centering on scroll when the window size is not large enough to fully contain the Overlay. The Container README file included in the release contains full details on these items and a full list of changes for 2.7.0.</p>
<h4 id="updated-treeview">Updated Treeview</h4>
<p>Prolific YUI community member and developer Satyam has contributed a long list of enhancements and bug fixes to YUI&#8217;s <a href="http://developer.yahoo.com/yui/treeview/">TreeView Control</a> for this release. Node highlighting and selection has been added, including single and multi-node selection support as well as upward and downward propagation. There have been significant improvements to focus and event handling. The parsing in <code>buildTreeFromMarkup()</code> has been updated to read an HTML attribute called &#8220;yuiConfig&#8221; which can override any property read from the markup. It assembles an object literal that is then passed to <code>buildTreeFromObject()</code>. Several class names have been added to TreeView in order to make it easier to identify elements in the generated HTML. This is only a small sample of the changes to this component for 2.7.0. Refer to the TreeView README file for the full summary of changes in this release.</p>
<h4 id="ie8-support">Internet Explorer 8 Support</h4>
<p>The YUI team has put a great deal of effort into testing the library components with the pre-release versions of the new IE8 browser. There have been several changes made in the library to provide better compatibility with the new browser. Please note, at the time of the 2.7.0 release, IE8 is still a release candidate. Should any significant issues be found when IE8 is officially launched, we will work to post a timely YUI update.</p>
<h4 id="promotions">Promotion from Beta Status</h4>
<p>The following components have been promoted out of &#8220;beta&#8221; status in the YUI 2.7.0 release:</p>
<ul>
<li><a href="http://developer.yahoo.com/yui/element/">Element</a></li>
<li><a href="http://developer.yahoo.com/yui/profilerviewer/">ProfilerViewer</a></li>
<li><a href="http://developer.yahoo.com/yui/selector/">Selector</a></li>
</ul>
<h3 id="enhancements-and-bug-fixes">Over 180 Enhancements and Bug Fixes</h3>
<p>The information included above describes just a few of the updates in 2.7.0. Refer to the <a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/45305">README digest</a> or the individual README files for full details on changes in this release. YUI 2.7.0 also addresses over 180 defect reports and enhancement requests that have been submitted by the development community. A <a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/45305">comprehensive change log</a> has been provided for your reference.</p>
<h3 id="thanks">Thanks!</h3>
<p>The YUI Library has grown in functionality as well as quality as a result of the feedback and suggestions we get from all of you in the community. We hope you will enjoy using the 2.7.0 release of YUI, and we look forward to your continued feedback on the <a href="http://tech.groups.yahoo.com/group/ydn-javascript/">YUI mailing list and forum</a>. Please continue to log any enhancement requests you have for the library as well as defects you run into in your development at our new ticket repositories on <a href="http://yuilibrary.com/">YUILibrary.com</a>.</p>
<p>For all of your feedback and support, I extend a big thank you to everyone in the YUI community on behalf of the entire development team: Adam Moore, Dav Glass, Eric Miraglia, Jenny Han Donnelly, Luke Smith, Matt Sweeney, Nate Koechley, Satyen Desai, Thomas Sha, and Todd Kloots; and contributors: Allen Rabinovich, Caridy Pati&#241;o, Dwight &#8220;Tripp&#8221; Bridges, Gopal Venkatesan, Julien Lecomte, Matt Mlinac, Nicholas C. Zakas, Philip Tellis, and Satyam.</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=ZtNtCOThBXw:jIldaLCuKkE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=ZtNtCOThBXw:jIldaLCuKkE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=ZtNtCOThBXw:jIldaLCuKkE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=ZtNtCOThBXw:jIldaLCuKkE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=ZtNtCOThBXw:jIldaLCuKkE:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2009/02/18/yui-270/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Image Optimization, Part 4: Progressive JPEG…Hot or Not?</title>
		<link>http://www.yuiblog.com/blog/2008/12/05/imageopt-4/</link>
		<comments>http://www.yuiblog.com/blog/2008/12/05/imageopt-4/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 16:23:54 +0000</pubDate>
		<dc:creator>Stoyan Stefanov</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2008/12/05/imageopt-4/</guid>
		<description><![CDATA[

About the Author: Stoyan Stefanov is a Yahoo! web developer working for the Exceptional Performance team and leading the development of the YSlow performance tool. He also an open-source contributor, conference speaker and technical writer: his latest book is called Object-Oriented JavaScript.


This is part 4 in an ongoing series. You can read the other parts [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro">
<p><img src="http://yuiblog.com/assets/stoyan.jpg" alt="Stoyan Stefanov." align="right" hspace="10" vspace="5"><em><strong>About the Author:</strong><a href="http://www.phpied.com"> Stoyan Stefanov</a> is a Yahoo! web developer working for the <a href="http://developer.yahoo.com/performance/">Exceptional Performance</a> team and leading the development of the <a href="http://developer.yahoo.com/yslow/">YSlow</a> performance tool. He also an open-source contributor, conference speaker and technical writer: his latest book is called <a href="http://www.packtpub.com/object-oriented-javascript-applications-libraries/book">Object-Oriented JavaScript</a>.</em></p>
</div>
</div>
<p><em>This is part 4 in an ongoing series. You can read the other parts here:</em></p>
<ul>
<li><a href="http://yuiblog.com/blog/2008/10/29/imageopt-1/">Image Optimization Part 1: The Importance of Images</a></li>
<li><a href="http://yuiblog.com/blog/2008/11/04/imageopt-2/">Image Optimization Part 2: Selecting the Right File Format</a></li>
<li><a href="http://yuiblog.com/blog/2008/11/14/imageopt-3/">Image Optimization Part 3: Four Steps to File Size Reduction</a></li>
</ul>
<p>In the <a href="http://yuiblog.com/blog/2008/11/14/imageopt-3/">previous article</a>, the progressive JPEGs were briefly mentioned as a possible option when optimizing JPEGs. This post now diggs into this option a little deeper with the results of an optimization experiment involving over 10,000 images.</p>
<h3>Baseline vs. progressive JPEGs</h3>
<p>Baseline are the &#8220;normal&#8221; JPEGs, the type of JPEG that all image programs write by default. The browsers load them top-to-bottom as more of the image information comes down the wire.</p>
<p><a href="http://yuiblog.com/assets/5-base-example.jpg"><img src="http://yuiblog.com/assets/5-base-example-small.jpg" alt="Loading a baseline JPEG" /></a></p>
<p>Loading a baseline JPEG, click to enlarge</p>
<p>Progressive JPEGs are another type of JPEGs, they are rendered, as the name suggests, progressively. First you see a low quality version of the whole image. Then, as more of the image information arrives over the network, the quality gradually improves.</p>
<p><a href="http://yuiblog.com/assets/4-prog-example.jpg"><img src="http://yuiblog.com/assets/4-prog-example-small.jpg" alt="Loading a baseline JPEG" /></a></p>
<p>Loading a progressive JPEG, click to enlarge</p>
<p>From usability perspective, progressive is usually good, because the user gets feedback that something is going on. Also if you&#8217;re on a slow connection, progressive JPEG is preferable because you don&#8217;t need to wait for the whole image to arrive in order to get an idea if it is what you wanted. If not, you can click away from the page or hit the back button, without waiting for the (potentially large) high quality image.</p>
<p>A reason against progressive JPEGs I&#8217;ve heard is that they look a bit old school and that users might be underimpressed, if not irritated, by the progressive rendering. I am not aware of a user study that focuses on this issue, please comment if you have heard or conducted such a experiment.</p>
<p>There is controversial information in blogs and books whether progressive JPEGs are bigger or smaller than the baseline JPEGs in terms of file size. So, as part of the never-ending quest for smaler file sizes and lossless optimization, here is an experiment that attempts to answer this question.</p>
<h3>The experiment</h3>
<p>One of the <a href="http://developer.yahoo.com/everything.html">many free APIs</a> that Yahoo! provides is the <a href="http://developer.yahoo.com/search/image/V1/imageSearch.html">image search API</a>. I used it to find images that match a number of queries, such as &#8220;kittens&#8221;, &#8220;puppies&#8221;, &#8220;monkeys&#8221;, &#8220;baby&#8221;, &#8220;flower&#8221;, &#8220;sunset&#8221;.. 12 queries in total. Once having the image URLs, I downloaded all the images and cleaned up 4xx and 5xx error responses and non-jpegs (turned out sometimes sites host PNGs or even BMPs renamed as .jpg). After the cleanup there were 10360 images to work with, images of all different dimensions and quality, and best of all, real life images from live web sites.</p>
<p>Having the source images, I ran them through jpegtran twice with the following commands:</p>
<p><code>&gt; jpegtran -copy none -optimize source.jpg result.jpg</code></p>
<p>and</p>
<p><code>&gt; jpegtran -copy none -progressive source.jpg result.jpg</code></p>
<p>The first one optimizes the Huffman tables in the baseline JPEGs (details discussed in the previous article). The second command converts the source JPEGs into progressive ones.</p>
<p>Let&#8217;s see what the result file sizes turn out to be.</p>
<h3>Results</h3>
<blockquote><p>The Census report, like most such surveys, had cost an awful lot of money and didn&#8217;t tell anybody anything they didn&#8217;t already know &mdash; except that every single person in the Galaxy had 2.4 legs and owned a hyena. Since this was clearly not true the whole thing had eventually to be scrapped.</p></blockquote>
<p>Douglas Adams &mdash; &#8220;So Long, and Thanks for All the Fish&#8221;</p>
<p>The median JPEG returned in this experiment was 52.07 Kb, which is probably not the most useful statistic. The important thing is that the median saving when using jpegtran to optimize the image losslessly as a <strong>baseline JPEG is 9.04%</strong> of the original (the median image becomes 47.36 Kb) and when using a <strong>progressive JPEG, it&#8217;s 11.45%</strong> (46.11 Kb median).</p>
<p>So it looks like progressive JPEGs are smaller on average. But that&#8217;s only the average, it&#8217;s not a hard rule. In fact in more than 15% of the cases (1611 out of the 10360 images) the progressive JPEG versions were bigger. Since it&#8217;s difficult to predict when an image will be smaller as progressive by just looking at it (or for automated processing without even looking at it), an idea of how the image will perform based on its dimensions or file size would be really helpful.</p>
<p>Looking for a relationship, I plotted all the results on a graph where:</p>
<ul>
<li>Y is the difference in the savings &#8220;baseline minus progressive&#8221;, so negative numbers will mean cases when baseline is smaller</p>
<li>X is the file size of the original image</li>
</ul>
<p>The graph shows how the results are all over the place, but there seems to be a trend &mdash; the bigger the image, the better it is to save it as a progressive JPEG.</p>
<p><img src="http://yuiblog.com/assets/1-progressive-jpeg-overview.png" alt="Progressive vs baseline JPEG" /></p>
<p>&#8220;Zooming&#8221; into the area of smaller file sizes to see where progressive JPEGs get less effective, let&#8217;s only consider the images that are 30K and under. Then using the trendline feature of Excel, we can see where the line is drawn (for a clearer trendline mouse over or focus or click the image).</p>
<p><a href="http://yuiblog.com/assets/3-progressive-jpeg.png"><img<br />
    src="http://yuiblog.com/assets/2-progressive-jpeg.png"<br />
    id="progressive-jpeg-chart"<br />
    alt="Progressive vs baseline JPEG for smaller images"<br />
/></a><br />
<script type="text/javascript">
(function(){
new Image().src = 'http://yuiblog.com/assets/3-progressive-jpeg.png';
var i = document.getElementById('progressive-jpeg-chart');
var a = i.parentNode;
a.onmouseover = a.onfocus = function() {i.src = 'http://yuiblog.com/assets/3-progressive-jpeg.png';};
a.onmouseout  = a.onblur  = function() {i.src = 'http://yuiblog.com/assets/2-progressive-jpeg.png';};
})();
</script></p>
<h3>Summary</h3>
<p>The take-home messages after looking at the graphs above:</p>
<ul>
<li>when your JPEG image is under 10K, it&#8217;s better to be saved as baseline JPEG (estimated 75% chance it will be smaller)</li>
<li>for files over 10K the progressive JPEG will give you a better compression (in 94% of the cases)</li>
</ul>
<p>So if your aim is to squeeze every byte (and consitency is not an issue), the best thing to do is to try both baseline and progressive and pick the smaller one.</p>
<p>The other option is have all images smaller than 10K as baseline and the rest as progressive. Or simply use baseline for thumbs, progressive for everything else.</p>
<h3>IE and progressive JPEGs</h3>
<p>&#8220;Oh, not IE again!&#8221; is probably what you&#8217;re thinking, but it&#8217;s not so bad actually. It&#8217;s just that IE doesn&#8217;t render progresive JPEGs progressively. It displays the image just fine, but only when it arrives completely. So in IE, the baseline JPEGs display more progressively (top-to-bottom is still progress) than the progressive JPEGs.</p>
<h3>A word on ImageMagick</h3>
<p>ImageMagick is a an impressive set of command-line image tools, which you can also use to optimize files. Unlike most other image software, by default ImageMagick writes <strong>optimized</strong> baseline JPEGs (as if using the -optimize switch in jpegtran).</p>
<p>ImageMagick can also strip meta data and write progressive JPEGs, so I repeated the experiment outlined above but using ImageMagick instead of jpegtran. The commands used were:</p>
<pre>
&gt;convert -strip source.jpg result.jpg // baseline JPG
&gt;convert -strip -interlace Plane source.jpg result.jpg // progressive JPEG
</pre>
<p>Observations from the ImageMagick experiment:</p>
<ul>
<li>The baseline vs. progressive trendline is the same: images 10K or bigger are better optimized when using progressive encoding</li>
<li>The overall compression is better: the median is <strong>10.85% optimization for baseline JPEGs</strong> (jpegtran saved 9.04%) and <strong>13.25% for progressive JPEGs</strong> (11.45% with jpegtran)</li>
<li>There is some quality loss. ImageMagick doesn&#8217;t perform fully lossless operations. Inspecting random images visually I couldn&#8217;t tell any difference but using <a href="http://www.phpied.com/image-diff/">an image diff</a> utility shows that pixel information in the images has been modified.</li>
</ul>
<p>And the last set of stats gleaned from the experiment has to do with the speed of writing JPEGs. Here&#8217;s how jpegtran and ImageMagick performed while optimizing the 10k+ images on my laptop (Windows XP, 2GHz dual CPU, 500Mb RAM). From fastest to slowest:</p>
<ol>
<li>jpegtran baseline (11 images per second),</li>
<li>jpegtran progressive (9 images/s),</li>
<li>ImageMagick baseline (7 images/s),</li>
<li>ImageMagick progressive (5.5 images/s)</li>
</ol>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=PFCpU_eTqsc:9Ehf88REc4U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=PFCpU_eTqsc:9Ehf88REc4U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=PFCpU_eTqsc:9Ehf88REc4U:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=PFCpU_eTqsc:9Ehf88REc4U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=PFCpU_eTqsc:9Ehf88REc4U:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2008/12/05/imageopt-4/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Image Optimization Part 2: Selecting the Right File Format</title>
		<link>http://www.yuiblog.com/blog/2008/11/04/imageopt-2/</link>
		<comments>http://www.yuiblog.com/blog/2008/11/04/imageopt-2/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 17:16:42 +0000</pubDate>
		<dc:creator>Stoyan Stefanov</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2008/11/04/imageopt-2/</guid>
		<description><![CDATA[

About the Author: Stoyan Stefanov is a Yahoo! web developer working for the Exceptional Performance team and leading the development of the YSlow performance tool. He also an open-source contributor, conference speaker and technical writer: his latest book is called Object-Oriented JavaScript.


This is part 2 in an ongoing series. You can read the other parts [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro">
<p><img src="http://yuiblog.com/assets/stoyan.jpg" alt="Stoyan Stefanov." align="right" hspace="10" vspace="5"><em><strong>About the Author:</strong><a href="http://www.phpied.com"> Stoyan Stefanov</a> is a Yahoo! web developer working for the <a href="http://developer.yahoo.com/performance/">Exceptional Performance</a> team and leading the development of the <a href="http://developer.yahoo.com/yslow/">YSlow</a> performance tool. He also an open-source contributor, conference speaker and technical writer: his latest book is called <a href="http://www.packtpub.com/object-oriented-javascript-applications-libraries/book">Object-Oriented JavaScript</a>.</em></p>
</div>
</div>
<p><em>This is part 2 in an ongoing series. You can read the other parts here:</em></p>
<ul>
<li><a href="http://yuiblog.com/blog/2008/10/29/imageopt-1/">Image Optimization Part 1: The Importance of Images</a></li>
<li><a href="http://yuiblog.com/blog/2008/11/14/imageopt-3/">Image Optimization Part 3: Four Steps to File Size Reduction</a></li>
<li><a href="http://yuiblog.com/blog/2008/12/05/imageopt-4/">Image Optimization Part 4: Progressive JPEG…Hot or Not?</a></li>
</ul>
<p>This second installment of the image optimization series talks about file formats and how to chose the right one for the job. We&#8217;ll briefly discuss the popular GIF and JPEG formats and then move on to highlighting the rock star, PNG, hopefully helping correct some misconceptions about it.</p>
<h3>GIF</h3>
<p>GIF is a palette (also called &#8220;indexed&#8221;) type of image. It contains a palette of indexed colors, up to 256, and for every pixel of the image there is a corresponding color index. The format is no longer subject to patent issues, so you can create GIFs without the risk of going to jail. (For more on the history of the GIF format, <a href="http://www.cloanto.com/users/mcb/19950127giflzw.html">click here</a>.)</p>
<p>GIF is a <em>non-lossy</em> format, which means that when you modify the image and save it, you don&#8217;t lose quality.</p>
<p>GIF also support animations, which, in the dark Web 1.0 ages, resulted in a plethora of blinking &#8220;new&#8221; images, rotating @ signs, birds dropping &#8230; an email, and other annoyances. In the much more civilized Web 2.0 era, we still have &#8220;loading&#8230;&#8221; animations while we wait for the results of the next Ajax request to update the page, but there are also things like the good old shiny sparkles that people like to put in their social network profiles. Nevertheless, animation support is here if you need it.</p>
<p>GIF also supports transparency, which is a sort of boolean type of transparency. A pixel in a GIF image is either fully transparent or it&#8217;s fully opaque.</p>
<h3>JPEG</h3>
<p>JPEG doesn&#8217;t have the 256 colors restriction associated with GIFs; it can contain millions of colors and it has great compression. This makes it suitable for photos and, in fact, most cameras store photos in JPEG format. It&#8217;s a <em>lossy</em> format, meaning you lose quality with every edit, so it&#8217;s best to store the intermediate results in a different format if you plan to have many edits. There are, however, some operations that can be performed losslessly, such as cropping a part of the image, rotating it or modifying meta information, such as comments stored in the image file.</p>
<p>JPEG doesn&#8217;t support transparency.</p>
<h3>PNG</h3>
<p>PNGs is a <em>non-lossy</em> format that comes in several kinds, but for practical purposes, we can think of PNGs as being of two kinds:</p>
<ol>
<li>PNG8, and</li>
<li>truecolor PNGs.</li>
</ol>
<p>PNG8 is a palette image format, just like GIF, and 8 stands for 8 bits, or 2<sup>8</sup>, or 256, the number of palette entries. The terms &#8220;PNG8&#8243;, &#8220;palette PNG&#8221; and &#8220;indexed PNG&#8221; are used interchangeably. </p>
<p>How does PNG8 compare to GIF?</p>
<ul>
<li>Pros:
<ul>
<li>it usually yields a smaller file size</li>
<li>it supports alpha (variable) transparency</li>
</ul>
</li>
<li>Cons:
<ul>
<li>no animation support</li>
</ul>
</li>
</ul>
<p>The second type of PNGs, truecolor PNGs, can have millions of colors, like JPEG. You can also sometimes come across the names PNG24 or PNG32.</p>
<p>And how does truecolor PNG compare to JPEG? On the pros side, it&#8217;s non-lossy and supports alpha transparency, but on the cons side, the file size is bigger. This makes truecolor PNG an ideal format as an intermediate between several edits of a JPEG and also in cases where every pixel matters and the file size doesn&#8217;t matter much, such as taking screeenshots for a help manual or some printed material.</p>
<h3>Internet Explorer and PNG transparency</h3>
<p>We said that both PNG types support alpha transparency, but there are some browser eccentricities that affect both types and about which you should be aware.</p>
<p>With PNG8, whenever you have semi-transparent pixels they appear as fully transparent in IE (version 6 and lower). This is not ideal but it&#8217;s still useful and is the same behavior that you get from a GIF. So by using a PNG8, in the worst case (IE &lt; 7) you get the same user experience as with a GIF, while for other browsers (Firefox, Safari, Opera) you get a better experience. Below is an example that illustrates this, note how in IE6 the semi-transparent light around the bulb is missing (source: <a href="http://www.sitepoint.com/blogs/2007/09/18/png8-the-clear-winner/">SitePoint</a>):</p>
<p><img src="http://yuiblog.com/assets/png8-transparency.png" alt="PNG8 alpha transparency" /></p>
<p>For truecolor PNGs, the situation is a much less attractive compromise. All the semi transparent pixels appear grey in IE prior to version 7 (source: <a href="http://www.w3.org/Graphics/PNG/inline-alpha.html">W3C</a>).</p>
<p><img src="http://yuiblog.com/assets/png-transparency.png" alt="transparency in truecolor PNG" /></p>
<p>IE7 introduces proper native support for alpha transparency in both PNG8 and truecolor PNGs. For earlier IE versions you need to fix the truecolor PNG transparency issue using CSS and an AlphaImageLoader filter, which we&#8217;ll discuss in more details in a follow-up article. (Spoiler alert: <em>avoid AlphaImageLoader</em>.)</p>
<h3>&#8220;All we are saying is: Give PiNG a chance!&#8221;</h3>
<p>Although PNG8 should be the preferred of the PNGs, because it&#8217;s smaller in filesize and degrades well in early IEs without special CSS filters, there are still some use cases for truecolor PNGs:</p>
<ul>
<li><strong>When the 256 colors of the PNG8 are not enough, you may need a truecolor PNG.</strong> This is a case you should try to avoid. On one hand, if you have thousands and thousands of colors, this starts to look like a case where JPEG will be better suited and will give better compression. On the other hand, if the colors are around a thousand or so, you may try to convert this image to a PNG8 and see if it looks acceptable. Very often, the human eye is not sensitive enough to tell the difference between 200 and 1000 colors. That depends on the image, of course; often you can safely remove 1000 colors, but sometimes removing even 2 colors results in an unacceptable image. In any event, try your potential truecolor PNG candidate as PNG8 and as JPEG and see if you like the result in terms of quality and file size.</li>
<li><strong>When most of the image is semi-transparent.</strong> If only a small part of the image is semi-transparent, like around rounded corners, the GIF-like degradation of PNG8 is often OK. But if most of the image is translucent (think a PLAY button over a video thumbnail), you might not have a choice but to use the AlphaImageLoader hack.</li>
</ul>
<p>At the end, let&#8217;s summarize what was discussed in this article highlighting that:</p>
<ul>
<li>JPEG is the format for photos.</li>
<li>GIF is the format for animations.</li>
<li>PNG8 is the format for everything else &mdash; icons, buttons, backgrounds, graphs&#8230;you name it.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=pE7kkgqCjZ4:enCtMsOUrmg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=pE7kkgqCjZ4:enCtMsOUrmg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=pE7kkgqCjZ4:enCtMsOUrmg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=pE7kkgqCjZ4:enCtMsOUrmg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=pE7kkgqCjZ4:enCtMsOUrmg:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2008/11/04/imageopt-2/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>YUI 2.6.0 Released</title>
		<link>http://www.yuiblog.com/blog/2008/10/01/yui-260/</link>
		<comments>http://www.yuiblog.com/blog/2008/10/01/yui-260/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 19:55:31 +0000</pubDate>
		<dc:creator>Nate Koechley</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2008/10/01/yui-260/</guid>
		<description><![CDATA[The YUI development community is pleased to announce the release of version 2.6.0 of the YUI Library. You can download YUI 2.6.0 from SourceForge or configure your implementation using the updated YUI Configurator.
2.6.0 introduces a new Carousel Control, offers the Paginator Control for general use (it was previously bundled with DataTable), includes more than 450 [...]]]></description>
			<content:encoded><![CDATA[<p>The YUI development community is pleased to announce the release of <a href="http://developer.yahoo.com/yui">version 2.6.0 of the YUI Library</a>. You can <a href="http://developer.yahoo.com/yui/download/">download YUI 2.6.0</a> from SourceForge or configure your implementation using the updated <a href="http://developer.yahoo.com/yui/articles/hosting/">YUI Configurator</a>.</p>
<p>2.6.0 introduces a new <a href="http://developer.yahoo.com/yui/carousel">Carousel Control</a>, offers the <a href="http://developer.yahoo.com/yui/paginator">Paginator Control</a> for general use (it was previously bundled with DataTable), includes more than 450 total fixes, enhancements and optimizations, graduates eight components out of &#8220;beta,&#8221; and now ships with more than <a href="http://developer.yahoo.com/yui/examples/">290 functional examples</a>.</p>
<h3 id="new-components-260">New YUI Controls</h3>
<h4 id="carousel-260">The Carousel Control</h4>
<p><a href="http://developer.yahoo.com/yui/carousel">The YUI Carousel Control</a>, contributed by Gopal Venkatesan (and based on the Carousel originally created by former Yahoo Bill Scott), provides a widget for browsing among a set of like objects arrayed vertically or horizontally in an overloaded page region. Like most YUI controls, Carousel can consume content from page markup using progressive enhancement techniques or be created, configured, and populated entirely via script. It has built-in support for the lazy-loading of content via XMLHttpRequest (aka Ajax) using YUI&#8217;s <a href="http://developer.yahoo.com/yui/connection">Connection Manager</a>. And be sure to notice that <a href="http://developer.yahoo.com/yui/examples/carousel/carousel-ariaplugin.html">Carousel&#8217;s ARIA Plugin example</a> makes it easy to use the WAI-ARIA <a href="http://www.w3.org/TR/wai-aria/#role_model">Roles</a> and <a href="http://www.w3.org/TR/wai-aria/#supported">States</a> with the Carousel control.</p>
<p><img src="http://yuiblog.com/assets/2008/carousel-example-20080930-171839.png" alt="carousel-example"/></p>
<h4 id="paginator-260">The Paginator Control</h4>
<p><a href="http://developer.yahoo.com/yui/paginator">The YUI Paginator Control</a> addresses the navigation aspect of chunked content, offering a set of controls that it can render into your UI to allow users to navigate through logical sections of local or remote data. It&#8217;s a great tool for managing page load times by reducing the amount of markup or data needed per page. In combination with <a href="http://developer.yahoo.com/yui/connection">Connection Manager</a> or <a href="http://developer.yahoo.com/yui/datasource">DataSource</a>, paging through large sets of server side data is easy and can avoid the need for full page loads.</p>
<p>The simplicity of <a href="http://developer.yahoo.com/yui/examples/paginator/pag_getting_started.html">the getting started example</a> risks hiding Paginator&#8217;s power, so be sure to explore the choices for <a href="http://developer.yahoo.com/yui/examples/paginator/pag_configuration.html">configuring the Paginator</a>. Plus, it&#8217;s built on a UI component architecture that allows implementers to easily create custom Paginator controls that will work automatically.</p>
<p>The Paginator Control was introduced with DataTable in version 2.5.0, but it has been broken out as an optional dependency for general use as of version 2.6.0.</p>
<p><img src="http://yuiblog.com/assets/2008/paginator-shadow-20080929-155441.png" alt="paginator-shadow"/></p>
<h3 id="improvements-260">Over 450 Improvements</h3>
<p>You can view <a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/38553">2.6.0&#8217;s comprehensive change log</a> of fixed bugs and concatenated release notes for the entire library, or keep reading for highlights.</p>
<h4 id="treeview-260">TreeView</h4>
<p>Prolific YUI contributor (and <a href="http://yuiblog.com/blog/2008/02/27/community-awards/">YUI Community Awards</a> winner) Satyam has given <a href="http://developer.yahoo.com/yui/treeview/">TreeView</a> a significant overhaul with support for progressive enhancement, state retrieval, JSON-base construction, focus, keyboard navigation, and node editing. 2.6.0 should be fully backward-compatible with 2.5.2 and earlier implementations. More details in <a href="http://developer.yahoo.com/yui/treeview/#upgrade">the upgrade notes for TreeView</a>.</p>
<h4 id="calendar-260">Calendar</h4>
<p>Thanks to Satyen Desai, the <a href="http://developer.yahoo.com/yui/calendar">Calendar Control</a> received significant accessibility improvements in 2.6.0 including the addition of text to the previous-month, next-month, and close icons for improved screen-reader interaction.</p>
<h4 id="editor-260">Rich Text Editor</h4>
<p>Dav Glass added the often requested Undo and Redo capabilities to the <a href="http://developer.yahoo.com/yui/editor">Rich Text Editor</a> Control.</p>
<h4 id="dd-260">Drag &amp; Drop</h4>
<p>If you&#8217;ve struggled with making <a href="http://developer.yahoo.com/yui/dragdrop/">Drag &amp; Drop</a> work well over troublesome content such as iFrames, you&#8217;ll welcome the introduction of a hidden shim that now makes such traversals effortless.</p>
<h4 id="uploader-260">Uploader</h4>
<p><a href="http://developer.yahoo.com/yui/uploader">Uploader</a> has been updated to work with Flash Player 10, a sign of our continued commitment to emerging technologies. But because of security changes in the upcoming Flash Player 10, the UI for invoking the &#8220;Browse&#8221; dialog has to be contained within the Flash player. Because of that, this new version of the Uploader is NOT BACKWARDS COMPATIBLE with the code written to work with the previous version (it is, however, compatible with Flash Player 9). Do not upgrade to this version without carefully reading the documentation and reviewing the new examples.</p>
<h4 id="datatable-260">DataTable</h4>
<p>There has been significant work on <a href="http://developer.yahoo.com/yui/datatable">DataTable</a> in this 2.6.0 release. (See the <a href="http://developer.yahoo.com/yui/build/datatable/README">README</a> for the full manifest.) Amongst the changes, DataTable introduces the ScrollingDataTable and CellEditor classes, the <a href="http://developer.yahoo.com/yui/paginator">Paginator</a> widget is now offered as a standalone component, and significant changes have been applied to DataTable&#8217;s pagination and sorting architectures. While backward compatibility has been maintained whenever possible, the Paginator widget is now an optional dependency, and custom extensions to inline cell editing or server-side pagination and/or sorting will likely need to be updated to be compatible with the new models. Implementers who are upgrading from an earlier version are strongly advised to read the Upgrades Notes.</p>
<h4 id="autocomplete-260">AutoComplete</h4>
<p>As of the 2.6.0 release, <a href="http://developer.yahoo.com/yui/autocomplete">AutoComplete</a> has been migrated to use YAHOO.util.DataSource, which is now a new required dependency. The YAHOO.widget.DataSource class, which used to be packaged with the AutoComplete control has been removed. While backward compatibility has been maintained whenever possible, implementers who are upgrading from an earlier version are strongly advised to read the <a href="http://developer.yahoo.com/yui/autocomplete/#upgrade">Upgrades Notes</a> to smooth the transition.</p>
<h4 id="container-260">Container</h4>
<p>The <a href="http://developer.yahoo.com/yui/container">Container</a> family of controls have enhanced positioning, height, and modality support in 2.6.0 via new <a href="http://developer.yahoo.com/yui/docs/YAHOO.widget.Overlay.html#config_preventcontextoverlap"><code>preventcontextoverlap</code></a>, <a href="http://developer.yahoo.com/yui/docs/YAHOO.widget.Overlay.html#config_context"><code>context</code></a>, and <a href="http://developer.yahoo.com/yui/docs/YAHOO.widget.Overlay.html#config_autofillheight"><code>autofillheight</code></a> configuration properties.</p>
<h3 id="othernotes-260">Other Notes on 2.6.0</h3>
<h4 id="design-patterns">Yahoo! Design Pattern Library</h4>
<p>Concurrent with the initial YUI release in February 2006, Yahoo! released the Yahoo! Design Patterns Library. Design Patterns describe an optimal solution to a common problem within a specific context. Today we&#8217;re happy to strengthen the relationship between these two sibling libraries by offering YUI code for two existing patterns: The <a href="http://developer.yahoo.com/ypatterns/parent.php?pattern=pagination">Pagination Design Pattern</a> and the <a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=carousel">Carousel Design Pattern</a>.</p>
<h4 id="accessibility-260">Accessibility Improvements</h4>
<p>We&#8217;ve continued to work hard to make YUI accessible. The Carousel, Button, Menu, TabView, and Container all have enhanced accessibility support in addition to what&#8217;s otherwise noted in this blog post. We continue to count accessibility amongst our highest priorities; stay tuned for a few more blog posts on the topic in the coming days and weeks.</p>
<h4 id="graduation">Graduation Day</h4>
<p>The following seven YUI components have graduated from beta as of 2.6.0:</p>
<ul>
<li><a href="http://developer.yahoo.com/yui/cookie/">Cookie</a> Utility &#8211; with a new <code>removeSub()</code> method and two parsing improvements.</li>
<li><a href="http://developer.yahoo.com/yui/datasource/">DataSource</a> Utility &#8211; with significant backward-compatible refactoring, see the <a href="http://developer.yahoo.com/yui/build/datasource/README">README</a>.</li>
<li><a href="http://developer.yahoo.com/yui/resize/">Resize</a> Utility &#8211; with new support for a <code>useShim</code> config and a series of bug fixes.</li>
<li><a href="http://developer.yahoo.com/yui/yuiloader/">YUI Loader</a> Utility &#8211; with better timeout and combo handler support.</li>
<li><a href="http://developer.yahoo.com/yui/datatable/">DataTable</a> Control &#8211; significant improvements and bug fixes: check the <a href="http://developer.yahoo.com/yui/build/datatable/README">README</a>.</li>
<li><a href="http://developer.yahoo.com/yui/layout/">Layout Manager</a> &#8211; with new support for Ajax content retrieval and a series of bug fixes. </li>
<li><a href="http://developer.yahoo.com/yui/editor/">Rich Text Editor</a> &#8211; including lots of new custom events and the ability to customize the edit windows better, along with ~40 bug fixes.</li>
<li><a href="http://developer.yahoo.com/yui/profiler">Profiler</a> has been promoted out of beta unchanged.</li>
</ul>
<p>(Note that the ProfileViewer developer tools, the Element and Selector utilities, and the Carousel and ImageCropper controls remain designated as beta.)</p>
<h3 id="thanks-260">Thanks!</h3>
<p>We&#8217;re proud of this 2.6.0 release and want to thank the entire community for their contributions, guidance, and continued support. We hope you enjoy all the new power and easy of use reflected in 2.6.0, and we look forward to your feedback in the comments below and on the <a href="http://tech.groups.yahoo.com/group/ydn-javascript/">YUI mailing list</a>.</p>
<p>Thank you again on behalf of the entire development team, Adam Moore, Dav Glass, Eric Miraglia, George Puckett, Jenny Han Donnelly, Luke Smith, Matt Sweeney, Satyen Desai, Thomas Sha, and Todd Kloots; and contributors: Caridy Patiño, Dwight &#8220;Tripp&#8221; Bridges, Julien Lecomte, Matt Mlinac, Allen Rabinovich,  Satyam,  Gopal Venkatesan, and Nicholas C. Zakas</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=9BurJkEY9Xk:5_pSbzYBXMU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=9BurJkEY9Xk:5_pSbzYBXMU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=9BurJkEY9Xk:5_pSbzYBXMU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=9BurJkEY9Xk:5_pSbzYBXMU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=9BurJkEY9Xk:5_pSbzYBXMU:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2008/10/01/yui-260/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>What’s So Social about Sign-in?</title>
		<link>http://www.yuiblog.com/blog/2008/08/26/continuity/</link>
		<comments>http://www.yuiblog.com/blog/2008/08/26/continuity/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 21:51:12 +0000</pubDate>
		<dc:creator>Christian Crumlish</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[continuity]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[sign-in]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2008/08/26/continuity/</guid>
		<description><![CDATA[
Just recently I published a new pattern, Sign-in Continuity, to the Yahoo! Design Pattern Library. It could be filed under &#8220;Engagement,&#8221; a category we have internally but that hasn&#8217;t appeared yet here, but I decided to put it in the &#8220;Social&#8221; category instead.
The pattern is about making sure that a user&#8217;s momentum isn&#8217;t robbed when [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://developer.yahoo.com/ypatterns/pattern.php?pattern=continuity ' title='signing into Buzz'><img src='http://www.yuiblog.com/blog/wp-content/uploads/2008/08/continuity.png' alt='Signing into Buzz' /></a></p>
<p>Just recently I published a new pattern, <a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=continuity">Sign-in Continuity</a>, to the <a href="http://developer.yahoo.com/ypatterns/">Yahoo! Design Pattern Library</a>. It could be filed under &#8220;Engagement,&#8221; a category we have internally but that hasn&#8217;t appeared yet here, but I decided to put it in the &#8220;Social&#8221; category instead.</p>
<p>The pattern is about making sure that a user&#8217;s momentum isn&#8217;t robbed when they want to participate in a community and have to be challenged for their login credentials in order to sign their contribution. The crux of the pattern is to preserve context and make sure the user is inconvenienced as minimally as possible so that the <em>continuity</em> of the experience is preserved.</p>
<p>This raises a legitimate question: What&#8217;s &#8220;social&#8221; about sign-in? I have two reasons for classifying this pattern that way. </p>
<p>One is that signing-in is an act of claiming one&#8217;s identity in a shared space. Identity is an important social pattern &#8220;parent&#8221; and we have a number of patterns related to identity in the works.</p>
<p>The other is that social sites have evolved some new engagement patterns (some positive, some negative) having to do with invitation, sharing, organic growth, and levels of involvement, and in this context signing in to participate plays a role.</p>
<p>This was, by the way, what we like to call a &#8220;peeve-driven&#8221; pattern. I was trying to comment on a social object at Yahoo! site. (I won&#8217;t say which one because the problem has since been fixed.) I was challenged to sign in, which was fine, but once I presented my credentials, I was returned to the site&#8217;s home page instead of to the comment box I had been working on. Oh noes!</p>
<p>Sometimes, a poor user experience can help us identify an antipattern (in this case, sign-in </em>dis</em>continuity or in the original Latin, <em>participatio interruptus</em>) &mdash; and then the antipattern points the way to the positive solution.</p>
<p>I&#8217;d also like to mention that my summer intern, <a href="http://blog.chrishanrath.com/">Chris Hanrath</a>, completed this pattern and prepared it for publication. Chris also spent a lot of the summer working on the pattern library site redesign that I can&#8217;t wait to unveil. Stay tuned!</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=VO-VdjTRN88:x_tFSCc6kkw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=VO-VdjTRN88:x_tFSCc6kkw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=VO-VdjTRN88:x_tFSCc6kkw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=VO-VdjTRN88:x_tFSCc6kkw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=VO-VdjTRN88:x_tFSCc6kkw:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2008/08/26/continuity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Context Menus and Focus in Opera</title>
		<link>http://www.yuiblog.com/blog/2008/07/17/context-menus-and-focus-in-opera/</link>
		<comments>http://www.yuiblog.com/blog/2008/07/17/context-menus-and-focus-in-opera/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 00:46:21 +0000</pubDate>
		<dc:creator>Todd Kloots</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2008/07/17/context-menus-and-focus-in-opera/</guid>
		<description><![CDATA[ As a JavaScript toolkit developer, there are two features lacking in Opera that have frustrated me for a while: support for the contextmenu DOM event and the ability to override the default rendering of focus via CSS.  When Opera released version 9.5, I was disappointed to see that neither of these features were [...]]]></description>
			<content:encoded><![CDATA[<p> As a JavaScript toolkit developer, there are two features lacking in Opera that have frustrated me for a while: support for the <code>contextmenu</code> DOM event and the ability to override the default rendering of focus via CSS.  When Opera released version 9.5, I was disappointed to see that neither of these features were implemented. As frontend engineers, we spend a lot of time responding to decisions made by browser manufacturers, but we don&#8217;t get much opportunity to learn the specific thought process behind those decisions. After exchanging some emails with the Opera team, I now have some insight into their decisions and the perspective that perhaps withholding such features could be beneficial to the user.</p>
<h3>Background</h3>
<p> Although the capabilities of the browser have evolved significantly in recent years, the user&#8217;s perception of the browser hasn&#8217;t necessarily evolved with it.  After the launch of Yahoo! Photos 3.0, I remember a friend of mine emailing me because she was having trouble viewing the large version of her photos.  She was repeatedly clicking on each thumbnail without success.  Eventually she figured out that she needed to double click on the thumbnails to view the full size image.  Double clicking to open a folder or a file is, of course, a natural interaction on the desktop, but for years users were trained not to expect this interaction in the context of web applications. </p>
<p> Some users still don&#8217;t expect desktop-like interaction from web applications.  I remember logging into my Yahoo! Mail not long ago and seeing checkboxes next to each message.  I paused.  What were these checkboxes, these artifacts of Web 1.0, doing in my Web 2.0 application?  I had been using the new DHTML, Outlook-like version of Yahoo! Mail since its early beta and had become used to dragging and dropping in order to move and delete messages.  But the reappearance of these checkboxes was another sign that not every user&#8217;s expectations had evolved with the capabilities of the browser. </p>
<p> As the browser has matured it has evolved it into a platform for rich application development, making it possible to deliver applications with a level of interactivity and visual fidelity of those found on the desktop.  And while the browser is now a platform, it also continues to play its original Web 1.0 role of an application, a content viewer that enables users to surf all of the news sites, blogs, etc. scattered across the eclectic Web.  But as the browser now plays these dual roles of being an application and an application development and delivery platform, how does this duality impact the user in terms of usability and accessibility?  And what user-centric features and functionality can consumers expect of a browser, especially one battling with duality?  I suspect that Opera&#8217;s answer to these questions is that not all users understand the modern browser&#8217;s dual role, and that is it necessary to render some fundamental things consistently across experiences within the browser. </p>
<h3>Context Menus</h3>
<p> <a href="http://developer.yahoo.com/yui/examples/menu/contextmenu_source.html"><img src="http://yuiblog.com/assets/klootsopera/contextmenu.gif" alt="The YUI Menu Control's ContextMenu in Safari (top) and Opera (bottom); Opera does not allow developers to customize the context menu in web applications." width="280" height="300" hspace="10" vspace="5" align="right"></a></p>
<p>Consider context menu functionality. By not implementing the <code>contextmenu</code> event, Opera does not allow frontend engineers to override the<br />
default context menu provided by the browser; all other <a href="http://developer.yahoo.com/yui/articles/gbs/">A-Grade browsers</a> support this feature. What benefit could there be to not implementing the <code>contextmenu</code> event?</p>
<p>If some users  perceive everything inside the scope of the browser as a web page, that influences the user&#8217;s expectation of what functionality will be surfaced in a context menu.  Over the years many users have come to expect that raising a context menu in the scope of a browser will surface browser-centric functionality relative to HTML content (i.e. &#8220;Open Link in New Window&#8221;), rather than functionality of the web application running within the browser.  Therefore, providing a custom context menu for a web application might not be expected or seen as helpful for users who have come to rely on functionality in the browser&#8217;s context menu.</p>
<p>The downside is that, by not allowing the developer to provide custom context menu implementations (such as those provided by the <a href="http://developer.yahoo.com/yui/menu/">YUI Menu Control</a>), Opera is in a small way preventing the user from understanding the browser as a platform for rich application development. </p>
<h3>Focus</h3>
<p>Focus could be considered as sacred as the context menu. Knowing what element has focus is fundamental to keyboard accessibility. And while most modern browsers support customization of the rendering of focus, is it a good idea to do so?  The presentation and behavior is of HTML is now so completely customizable via CSS and JavaScript that the user experience can differ drastically across sites and applications on the web.  Keeping something as fundamental as focus consistent means one less thing the user has to re-learn when navigating the across the web.  Consider the following example: </p>
<h4><a href="http://yuiblog.com/sandbox/yui/v252/examples/button/example10.html#example-1">Example 1: Anchor Elements (The Good)</a></h4>
<table>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/anchor.png" height="25" width="51" alt="Screen capture of a focused anchor in Opera 9.5 for Mac"></td>
<td>Focused anchor in Opera 9.5 (Mac)</td>
</tr>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/link-button.png" height="34" width="69" alt="Screen capture of a focused anchor styled as a button in Opera 9.5 for Mac"></td>
<td>Focused anchor styled as a button in Opera 9.5 (Mac)</td>
</tr>
</table>
<p> This example illustrates how the focused state of an anchor element is rendered consistently in Opera regardless of how it is styled.  This consistency can be considered helpful to the user in that the familiarity of the focus outline conveys the element&#8217;s role.  Therefore, the user knows what to expect when the element is clicked regardless of how it is styled.  However, as illustrated in the following example, this benefit breaks down a little as the focus model for buttons isn&#8217;t the same as it is for anchor elements.</p>
<h4><a href="http://yuiblog.com/sandbox/yui/v252/examples/button/example10.html#example-2">Example 2: Buttons (The Bad)</a></h4>
<table>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/button-1.png" height="24" width="69" alt="Screen capture of a focused button in Opera 9.5 for Mac"></td>
<td>Focused, unstyled button in Opera 9.5 (Mac)</td>
</tr>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/button-2.png" height="26" width="70" alt="Screen capture of a focused, styled button in Opera 9.5 for Mac"></td>
<td>Focused, styled button in Opera 9.5 (Mac)</td>
</tr>
</table>
<p> This example illustrates a potential flaw in Opera&#8217;s rendering of focus in version 9.5: unlike anchor elements, unstyled and styled buttons get two different renderings of focus, both of which are completely different, and different from the focus style applied to anchor elements.  So, in Opera 9.5 there are three different focus implementations for the user to learn: the system default, the Wii-style focus and the dotted border.  Compare Opera&#8217;s focus implementation to that of Safari or Internet Explorer, where by default focus is rendered consistently across elements of various types. </p>
<table>
<thead>
<tr>
<th>Opera</th>
<th>Safari</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/anchor.png" height="25" width="51" alt="Screen capture of a focused anchor in Opera 9.5 for Mac"></td>
<td><img src="http://yuiblog.com/assets/klootsopera/anchor-safari.png" height="25" width="51" alt="Screen capture of a focused anchor in Safari for Mac"></td>
<td>Focused, unstyled acnhor</td>
</tr>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/link-button.png" height="34" width="69" alt="Screen capture of a focused anchor styled as a button in Opera 9.5 for Mac"></td>
<td><img src="http://yuiblog.com/assets/klootsopera/anchor-button-safari.png" height="34" width="69" alt="Screen capture of a focused anchor styled as a button in Safari for Mac"></td>
<td>Focused anchor styled as a button</td>
</tr>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/button-1.png" height="24" width="69" alt="Screen capture of a focused, unstyled button in Opera 9.5 for Mac"></td>
<td><img src="http://yuiblog.com/assets/klootsopera/button-safari.png" height="24" width="67" alt="Screen capture of a focused, unstyled button in Safari for Mac"></td>
<td>Focused, unstyled button</td>
</tr>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/button-2.png" height="26" width="70" alt="Screen capture of a focused, styled button in Opera 9.5 for Mac"></td>
<td><img src="http://yuiblog.com/assets/klootsopera/yuibutton-safari.png" height="34" width="81" alt="Screen capture of a focused, styled button in Safari for Mac"></td>
<td>Focused, styled button</td>
</tr>
</tbody>
</table>
<p> Since the default implementation of focus can be customized in other browsers, perhaps Opera users still fair better since learning Opera&#8217;s three, fixed focus models is ultimately better than having to learn potentially infinitely more.  That said, if Opera is going to prevent customization of focus in the interest of usability and accessibility, they could further improve the user experience by providing a consistent implementation of focus across elements. As it stands in Opera 9.5, the following mixed styles can appear together, presenting a  confusing set of visual cues:</p>
<h4><a href="http://yuiblog.com/sandbox/yui/v252/examples/button/example10.html#example-3">Example 3: Mixed types together (The Ugly)</a></h4>
<table>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/link-button.png" height="34" width="69" alt="Screen capture of a focused anchor styled as a button in Opera 9.5 for Mac"></td>
<td>Focused anchor styled as a button in Opera 9.5 (Mac)</td>
</tr>
<tr>
<td><img src="http://yuiblog.com/assets/klootsopera/button-4.png" height="26" width="70" alt="Screen capture of a focused, styled button in Opera 9.5 for Mac"></td>
<td>Focused, styled button in Opera 9.5 (Mac)</td>
</tr>
</table>
<p> As illustrated by the first and second examples, Opera has three different, yet fixed implementations of focus.  While Opera&#8217;s implementation of focus can be considered good insofar as the user only has a limited number of focus models to learn, it might also be considered bad in that it makes it harder to provide a consistent user experience within a single site or web application.  For example, if you wanted to place an anchor and button next to each other in a toolbar, but style them consistently so that they both look like buttons, each would still render focus differently in Opera, leaving the user to wonder how the difference is significant. </p>
<h3>Conclusion</h3>
<p> In Opera designers and developers lose a degree of customization, but the user gains a slightly more consistent browsing experience. In some ways this consistency benefits the user in that fundamental interactions like focus and context menus remain the same regardless of the site or web application in use.  However, by limiting certain types of customization designers and developers will find it just a bit harder to provide a consistent user experience within their site or application and to train the user to expect more from Web 2.0. </p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=msxEvNrS7Wc:eRSRFiPz-1U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=msxEvNrS7Wc:eRSRFiPz-1U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=msxEvNrS7Wc:eRSRFiPz-1U:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=msxEvNrS7Wc:eRSRFiPz-1U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=msxEvNrS7Wc:eRSRFiPz-1U:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2008/07/17/context-menus-and-focus-in-opera/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Patterns for Designing a Reputation System</title>
		<link>http://www.yuiblog.com/blog/2008/06/10/patterns-for-designing-a-reputation-system/</link>
		<comments>http://www.yuiblog.com/blog/2008/06/10/patterns-for-designing-a-reputation-system/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 00:15:28 +0000</pubDate>
		<dc:creator>Christian Crumlish</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[pattern library]]></category>
		<category><![CDATA[reputation]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[social design]]></category>
		<category><![CDATA[social design patterns]]></category>

		<guid isPermaLink="false">http://yuiblog.com/blog/2008/06/10/patterns-for-designing-a-reputation-system/</guid>
		<description><![CDATA[
Recently, we released a family of related Reputation patterns to the Yahoo Design Pattern Library, the first of several collections of social-design related patterns that we&#8217;re working on. These patterns are somewhat different from the typical UI or rich-interaction type of pattern. They don&#8217;t tell you how to lay out a page or where to [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://yuiblog.com/blog/2008/06/10/patterns-for-designing-a-reputation-system/reputation-patterns/' rel='attachment wp-att-213' title='Reputation patterns'><img src='http://www.yuiblog.com/blog/wp-content/uploads/2008/06/rep-patterns.jpg' alt='Reputation patterns' border='0' /></a></p>
<p>Recently, we released a family of related <a href="http://developer.yahoo.com/ypatterns/parent.php?pattern=reputation">Reputation patterns</a> to the Yahoo Design Pattern Library, the first of several collections of social-design related patterns that we&#8217;re working on. These patterns are somewhat different from the typical UI or rich-interaction type of pattern. They don&#8217;t tell you how to lay out a page or where to put an interactive widget. Instead, they address how to design a reputation system for your social software.</p>
<p>A key element in the Reputation family of patterns is one we call <a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=competitive">The Competitive Spectrum</a>:</p>
<p><a href='http://yuiblog.com/blog/2008/06/10/patterns-for-designing-a-reputation-system/competitive-spectrum-2/' rel='attachment wp-att-215' title='Competitive Spectrum'><img src='http://www.yuiblog.com/blog/wp-content/uploads/2008/06/competitive-spectrum1.jpg' alt='Competitive Spectrum' /></a></p>
<p>The Competitive Spectrum is the first pattern you should look at because it asks you to consider the degree of <em>competitiveness</em> in the community you are trying to build or foster. Are you aiming for a highly cooperative community, an arena for death-matches, or something in between? The answer to that question will inform which of the remaining Reputation patterns best apply to the design of your site or application.</p>
<p>The primary author of these patterns (and the creator of the sensitizing images) is <a href="http://soldierant.net/archives/2008/06/patterns_of_reputati.html">Bryce Glass</a>, a senior interaction designer on the Y! OS social team. Product manager Yvonne French deserves some of the credit as well. The patterns were developed for an internal reputation platform here at Yahoo! that was inspired and guided by online community guru <a href="http://www.fudco.com/habitat/archives/000076.html">Randy Farmer</a>. We&#8217;re very pleased to be able to share them with the wider web community now and as always we welcome feedback and suggestions for improvement.</p>
<p>UPDATE: I forgot to mention that Bryce gave a great talk about reputation design at the IA Summit this year: <a href="http://www.slideshare.net/soldierant/designing-your-reputation-system/">Designing Your Reputation System (in 10 Easy Steps)</a>.</p>
<div class="feedflare">
<a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=Y_E6kDKHHFA:i5QWFYx-YVI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=Y_E6kDKHHFA:i5QWFYx-YVI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=Y_E6kDKHHFA:i5QWFYx-YVI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.yuiblog.com/~ff/yuiblog/design?a=Y_E6kDKHHFA:i5QWFYx-YVI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/yuiblog/design?i=Y_E6kDKHHFA:i5QWFYx-YVI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2008/06/10/patterns-for-designing-a-reputation-system/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
