<?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.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><description>capcloud—a blog of sorts</description><title>Martin Polley</title><generator>Tumblr (3.0; @martinpolley)</generator><link>http://capcloud.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/capcloud" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="capcloud" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>This caught my eye this morning. This sign-up form for a daily...</title><description>&lt;img src="http://27.media.tumblr.com/tumblr_kyozezOrcV1qzcjwmo1_400.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;This caught my eye this morning. This sign-up form for a daily horoscope (in Hebrew) asks you to specify whether your device has a regular screen or a touch screen.
&lt;br/&gt;&lt;br/&gt;
Now I can’t be sure, but I suspect that this is so that they can tailor the experience depending on whether you have touch or not. Most likely so that things that rely on hover can be surfaced in different ways.
&lt;br/&gt;&lt;br/&gt;
I expect to see a lot more of this sort of thing.&lt;/p&gt;</description><link>http://capcloud.com/post/423652868</link><guid>http://capcloud.com/post/423652868</guid><pubDate>Wed, 03 Mar 2010 08:01:47 +0200</pubDate></item><item><title>Wow! I love the way they’ve used stop-motion to...</title><description>&lt;object type="application/x-shockwave-flash" width="400" height="300" data="http://vimeo.com/moogaloop.swf?clip_id=6678684&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF"&gt;&lt;param name="quality" value="best" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="scale" value="showAll" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6678684&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF" /&gt;&lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=6678684&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Wow! I love the way they’ve used stop-motion to demonstrate their product. Nice one!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://makedo.com.au/"&gt;http://makedo.com.au/&lt;/a&gt;&lt;/p&gt;</description><link>http://capcloud.com/post/417464215</link><guid>http://capcloud.com/post/417464215</guid><pubDate>Sun, 28 Feb 2010 14:21:47 +0200</pubDate></item><item><title>Wow. Just wow.</title><description>&lt;object width="400" height="336"&gt;&lt;param name="movie" value="http://www.youtube.com/v/h-8PBx7isoM&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/h-8PBx7isoM&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1" type="application/x-shockwave-flash" width="400" height="336" allowFullScreen="true" wmode="transparent"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Wow. Just wow.&lt;/p&gt;</description><link>http://capcloud.com/post/404426571</link><guid>http://capcloud.com/post/404426571</guid><pubDate>Mon, 22 Feb 2010 08:40:44 +0200</pubDate></item><item><title>Shouldn't it be the other way round?</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_kxnwf1dWhG1qzb1wu.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Wouldn’t it make more sense to have floor 0 (ground floor) at the bottom instead of the top?&lt;/p&gt;</description><link>http://capcloud.com/post/383193838</link><guid>http://capcloud.com/post/383193838</guid><pubDate>Thu, 11 Feb 2010 07:27:52 +0200</pubDate><category>observations</category></item><item><title>Flash Video vs HTML5 Video—An Experiment</title><description>&lt;p&gt;I played the same YouTube video in Safari (on Mac OS X), first using YouTube’s HTML5 video player, then using their Flash player. This is what the CPU monitor looked like:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://img.skitch.com/20100204-rfhk122ntbpictx3nk7hp73pmx.png"/&gt;&lt;/p&gt;

&lt;p&gt;Feel free to draw your own conclusions :)&lt;/p&gt;</description><link>http://capcloud.com/post/370287597</link><guid>http://capcloud.com/post/370287597</guid><pubDate>Thu, 04 Feb 2010 10:38:22 +0200</pubDate></item><item><title>Sugru—Looking Good So Far</title><description>&lt;p&gt;My &lt;a href="http://sugru.com"&gt;Sugru&lt;/a&gt; arrived yesterday. So this morning I set about fashioning some new feet for my aging PowerBook.
&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.flickr.com/photos/sagipolley/4324179523/" title="DSC01407 by sagipolley, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4062/4324179523_1ff5520f1f.jpg" width="400" height="300" alt="DSC01407"/&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;

I used the smallest sachet, 5 grams, but the feet only needed about 1 gram. What to do with the rest?
&lt;br/&gt;&lt;br/&gt;

I had a little scout around and found something that has been annoying me for ages—on my bike, my daughter’s bike seat is not attached at the back (and there’s no obvious way to attach it). It’s not dangerous, just annoying. So…
&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;
&lt;td&gt;
&lt;a href="http://www.flickr.com/photos/sagipolley/4324923940/" title="DSC01410 by sagipolley, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2748/4324923940_e3498f2ec0_m.jpg" width="180" height="240" alt="DSC01410"/&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;a href="http://www.flickr.com/photos/sagipolley/4324919324/" title="DSC01409 by sagipolley, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4016/4324919324_b20411664a_m.jpg" width="240" height="180" alt="DSC01409"/&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br/&gt;&lt;br/&gt;

Now I’ll just have to wait and see how it stands up to the rigors of everyday use.</description><link>http://capcloud.com/post/366685834</link><guid>http://capcloud.com/post/366685834</guid><pubDate>Tue, 02 Feb 2010 11:09:38 +0200</pubDate><category>sugru</category></item><item><title>iPhone and Nexus One</title><description>&lt;p&gt;I’ve finally figured out why I like the iPhone better than the Nexus One. It’s because the iPhone is truly innovative, while the Nexus One is a me-too product. &lt;/p&gt;

&lt;p&gt;Google is playing catch-up. They should be playing leapfrog.&lt;/p&gt;</description><link>http://capcloud.com/post/343885671</link><guid>http://capcloud.com/post/343885671</guid><pubDate>Wed, 20 Jan 2010 07:57:53 +0200</pubDate></item><item><title>Fitts's Law for Asymmetric Targets (Like Tabs)</title><description>&lt;p&gt;(Originally posted on my old blog on June 29th, 2009)&lt;/p&gt;


	&lt;p&gt;Since I started putting together &lt;a href="http://capcloud.com/mozconcept"&gt;my entry&lt;/a&gt; for the Mozilla Labs “Reinventing Tabs” challenge, I have been thinking about &lt;a href="http://en.wikipedia.org/wiki/Fitts%27s_law"&gt;Fitts’s Law&lt;/a&gt;. Here’s what I have been thinking: does the shape of the click target affect the ease of acquisition?&lt;/p&gt;

	&lt;p&gt;More simply put, is it easier or more difficult to acquire a rectangular target that is (say) three times as wide as it is high than a square target of the same area?&lt;/p&gt;

	&lt;p&gt;And also, does the orientation of the rectangle make it easier or harder to acquire? (That is, does it make any difference whether the rectangle’s long side or short side is facing towards the pointer?)&lt;/p&gt;

	&lt;p&gt;Why does this matter? Well, if you have a bunch of tabs stacked up the left side of the screen (as in my entry), the answer could mean that they are easier or harder to click on than regular tabs of the same size that are strung out horizontally above the content area.&lt;/p&gt;

	&lt;p&gt;And now I have found a &lt;a href="http://portal.acm.org/citation.cfm?doid=642646"&gt;paper&lt;/a&gt; that contains the answer. At least, it contains the answer to the second part of my question (about orientation).&lt;/p&gt;

	&lt;p&gt;If you want to read it, go ahead, but here is the money quote:&lt;/p&gt;

	&lt;p&gt;&lt;bq&gt;&lt;i&gt;… when possible graphical widgets should be extended along&lt;br/&gt;

the more frequent movement direction. … horizontally enlongated widgets, which are often due to the labeling in English words, should be placed on the left or right rather than the top or bottom edge of the desktop interface.&lt;/i&gt;&lt;/bq&gt;&lt;/p&gt;

	&lt;p&gt;But there is a caveat:&lt;/p&gt;

	&lt;p&gt;&lt;bq&gt;&lt;i&gt;However, the average horizontal movement distance is somewhat longer due to the landscape display geometry in most computers.&lt;/i&gt;&lt;/bq&gt;&lt;/p&gt;

	&lt;p&gt;In plain English, tabs that are stacked at the side are easier to acquire than ones of the same size and shape along the top. But because monitors (especially modern wide-screen ones) are wider than they are high, this advantage may be mitigated (or even outweighed) by the extra (average) distance that the pointer must cover.&lt;/p&gt;</description><link>http://capcloud.com/post/338973115</link><guid>http://capcloud.com/post/338973115</guid><pubDate>Sun, 17 Jan 2010 13:03:00 +0200</pubDate></item><item><title>Here’s a quick example of stop-motion video that I created...</title><description>&lt;object type="application/x-shockwave-flash" width="400" height="300" data="http://vimeo.com/moogaloop.swf?clip_id=8714324&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF"&gt;&lt;param name="quality" value="best" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="scale" value="showAll" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8714324&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF" /&gt;&lt;/object&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Here’s a quick example of stop-motion video that I created using Chris Neale’s excellent &lt;a href="http://e102.co.uk/?p=13"&gt;Animationizer&lt;/a&gt;.&lt;/p&gt;</description><link>http://capcloud.com/post/332238653</link><guid>http://capcloud.com/post/332238653</guid><pubDate>Wed, 13 Jan 2010 13:30:58 +0200</pubDate></item><item><title>The Pleasures and Sorrows of Work — Alain de Botton (LSE...</title><description>&lt;embed type="application/x-shockwave-flash" src="http://capcloud.com/swf/audio_player.swf?audio_file=http://www.tumblr.com/audio_file/330029919/tumblr_kw4ce9vCaR1qzcjwm&amp;color=FFFFFF" height="27" width="207" quality="best"&gt;&lt;/embed&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;The Pleasures and Sorrows of Work — Alain de Botton (LSE Lectures)&lt;/p&gt;</description><link>http://capcloud.com/post/330029919</link><guid>http://capcloud.com/post/330029919</guid><pubDate>Tue, 12 Jan 2010 07:25:21 +0200</pubDate></item><item><title>The Top Ten Essential Interaction Design Books—Dan Saffer</title><description>&lt;a href="http://www.kickerstudio.com/blog/2009/12/the-top-ten-essential-interaction-design-books/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+kickerstudio%2FvRHM+%28Kick+It%29&amp;utm_content=Google+Reader"&gt;The Top Ten Essential Interaction Design Books—Dan Saffer&lt;/a&gt;: &lt;p&gt;Dan Saffer shares his list of the top ten must-have books for interaction designers.&lt;/p&gt;</description><link>http://capcloud.com/post/267405448</link><guid>http://capcloud.com/post/267405448</guid><pubDate>Thu, 03 Dec 2009 09:15:33 +0200</pubDate></item><item><title>About me</title><description>&lt;p&gt;Interaction designer masquerading as a technical writer. Dad. Husband. Etc. Brit in Israel. &lt;a href="http://johnnyholland.tv"&gt;Johnny TV&lt;/a&gt; dude.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/martinpolley"&gt;Twitter&lt;/a&gt;&lt;br/&gt;&lt;a href="http://facebook.com/martinpolley"&gt;Facebook&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.linkedin.com/in/martinpolley"&gt;LinkedIn&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.flickr.com/photos/sagipolley"&gt;Flickr&lt;/a&gt;&lt;br/&gt;&lt;a href="http://delicious.com/sagipolley"&gt;Delicious&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.last.fm/user/martinpolley"&gt;last.fm&lt;/a&gt;&lt;br/&gt;&lt;a href="http://huffduffer.com/martinpolley/tags/recommended"&gt;Huffduffer&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.google.com/reader/shared/martin.polley"&gt;Google Reader shared items&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.google.com/profiles/martin.polley"&gt;Google profile&lt;/a&gt;&lt;br/&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=Sha%27ar-Hagolan,%20Israel"&gt;I live here&lt;/a&gt;&lt;/p&gt;</description><link>http://capcloud.com/post/345795170</link><guid>http://capcloud.com/post/345795170</guid><pubDate>Tue, 01 Dec 2009 00:00:00 +0200</pubDate></item><item><title>Allocating Storage Resources to an Organizational Unit</title><description>&lt;p&gt;&lt;h4&gt;Brief&lt;/h4&gt;

To enable administrator users to assign storage resources (physical disks) to organizational units.
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;First Steps&lt;/h4&gt;

This is not a complex problem that has never been solved by anyone else before (though there are a few wrinkles that need to be taken care of). So I looked to the available design patterns to see what would work best.
&lt;br/&gt;&lt;br/&gt;

The interface was already in place for selecting an organizational unit in order to configure it. So all I had to worry about was assigning disks to the &lt;i&gt;currently selected&lt;/i&gt; organizational unit.
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;Initial Design&lt;/h4&gt;

I thought that the way that Google Calendar allows you to add as many alerts as you want to an event could be adapted (copied?) for assigning disks to organizational units.
&lt;br/&gt;&lt;br/&gt;&lt;img src="http://img.skitch.com/20100202-jshqgp52jpc4ywgdp834h5mjs3.png" alt="gcal_alerts"/&gt;&lt;br/&gt;&lt;br/&gt;

The thing that makes assigning disks different is that each disk belongs to a file server. So first you have to select a file server and then select the disks (any or all of them).
&lt;br/&gt;&lt;br/&gt;

So I decided to go with something that worked a bit like Google Calendar’s alert-adding interface, but where each row could be in one of two modes—add/edit mode and view mode. The user would be able to click the row (or an explicit link) to edit a row in-place. 
&lt;br/&gt;&lt;br/&gt;

This screencast shows what I came up with (prototype created in Axure RP while trialling that application):
&lt;br/&gt;&lt;br/&gt;&lt;object id="scPlayer" width="400" height="319"&gt; &lt;param name="movie" value="http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/jingswfplayer.swf"&gt;
&lt;param name="quality" value="high"&gt;
&lt;param name="bgcolor" value="#FFFFFF"&gt;
&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/FirstFrame.jpg&amp;containerwidth=400&amp;containerheight=319&amp;content=http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/00000002.swf"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="scale" value="showall"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;param name="base" value="http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/"&gt;
&lt;embed src="http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="400" height="319" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/FirstFrame.jpg&amp;containerwidth=400&amp;containerheight=319&amp;content=http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/00000002.swf" allowfullscreen="true" base="http://content.screencast.com/users/martinpolley/folders/Jing/media/a8a6c6f0-95d0-4866-adaa-774374aab9e0/" scale="showall"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;The Implementation&lt;/h4&gt;

The implementation was quite similar to my design, except that the Save and Cancel buttons were directly below the file server drop-down, and did not move down when the disk radio buttons appeared.
&lt;br/&gt;&lt;br/&gt;

The fonts and alignment were also a bit off but these are easily fixed. &lt;a href="http://www.screencast.com/t/MzNjNjM1" target="_blank"&gt;This screencast&lt;/a&gt; shows the implemented version.


&lt;h4&gt;Fixing Things&lt;/h4&gt;

I understood that putting the Save and Cancel buttons below the row was a bit of an afterthought on my part (maybe a result of my initial design not having these buttons). The implementation compounded this problem.
&lt;br/&gt;&lt;br/&gt;

I realized that it would make much more sense to put the buttons to the right of the other controls (thus providing a straight line for the user to follow from left to right to complete the sub-task).
&lt;br/&gt;&lt;br/&gt;

I created a new wireframe and showed it to the developers (see the quick ‘n dirty screencasts below).
&lt;br/&gt;&lt;br/&gt;

This will be implemented when time allows.
&lt;br/&gt;&lt;br/&gt;&lt;object id="scPlayer" width="400" height="202"&gt; &lt;param name="movie" value="http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/jingswfplayer.swf"&gt;
&lt;param name="quality" value="high"&gt;
&lt;param name="bgcolor" value="#FFFFFF"&gt;
&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/FirstFrame.jpg&amp;containerwidth=400&amp;containerheight=202&amp;content=http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/2010-02-14_0917.swf"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="scale" value="showall"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;param name="base" value="http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/"&gt;
&lt;embed src="http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="400" height="202" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/FirstFrame.jpg&amp;containerwidth=400&amp;containerheight=202&amp;content=http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/2010-02-14_0917.swf" allowfullscreen="true" base="http://content.screencast.com/users/martinpolley/folders/Jing/media/937b8c6c-5905-402b-bb17-21b54a08bd58/" scale="showall"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;i&gt;With Save and Cancel buttons&lt;/i&gt;
&lt;br/&gt;&lt;br/&gt;&lt;object id="scPlayer" width="400" height="205"&gt; &lt;param name="movie" value="http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/jingswfplayer.swf"&gt;
&lt;param name="quality" value="high"&gt;
&lt;param name="bgcolor" value="#FFFFFF"&gt;
&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/FirstFrame.jpg&amp;containerwidth=400&amp;containerheight=205&amp;content=http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/2010-02-14_0817.swf"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="scale" value="showall"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;param name="base" value="http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/"&gt;
&lt;embed src="http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="400" height="205" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/FirstFrame.jpg&amp;containerwidth=400&amp;containerheight=205&amp;content=http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/2010-02-14_0817.swf" allowfullscreen="true" base="http://content.screencast.com/users/martinpolley/folders/Jing/media/e95a85f1-484f-4ee0-971a-2f2709ee251c/" scale="showall"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;i&gt;Without Save and Cancel buttons&lt;/i&gt;&lt;/p&gt;</description><link>http://capcloud.com/post/354151504</link><guid>http://capcloud.com/post/354151504</guid><pubDate>Tue, 01 Dec 2009 00:00:00 +0200</pubDate><category>portfolio</category></item><item><title>Mozilla Design Challenge Entry</title><link>http://capcloud.com/post/354140141</link><guid>http://capcloud.com/post/354140141</guid><pubDate>Tue, 01 Dec 2009 00:00:00 +0200</pubDate><category>portfolio</category></item><item><title>Replication—Provide a Way for Users to Set up Syncing of the Contents of Multiple Storage Areas and Track Sync Status</title><link>http://capcloud.com/post/354167623</link><guid>http://capcloud.com/post/354167623</guid><pubDate>Tue, 01 Dec 2009 00:00:00 +0200</pubDate><category>portfolio</category></item><item><title>Adding Filtering Functionality to a Data Grid</title><description>&lt;h4&gt;Brief&lt;/h4&gt; 
To enable users to filter the items that are displayed in a data grid by any criteria they choose.
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;First Steps&lt;/h4&gt; 
The first thing I did was to sit down and talk with the project’s lead developer. He said he wanted something like the search feature in the bug-tracking system that we use (which allows you to create and save complex boolean searches on multiple criteria). My initial reaction was that in most cases, this approach would be overkill and the level of complexity that it introduces would make it difficult to perform the simple filtering that this feature would be used for most of the time.
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;Research&lt;/h4&gt; 
To get an idea of the possibilities, I looked at several examples of search and filtering interfaces: the in-house bug-tracking system that the developer liked, a different bug-tracking system that had been tried there (&lt;a href="http://www.atlassian.com/software/jira/"&gt;JIRA&lt;/a&gt;), and things like Google’s &lt;a href="http://www.google.com/advanced_search?hl=en"&gt;advanced search&lt;/a&gt; and various ecommerce sites with faceted search.
&lt;br/&gt;&lt;br/&gt;
Based on this, I decided that the following points were important:
&lt;ul&gt;
&lt;li&gt;Having the search/filter area separate from the area where the data is displayed (i.e., on a separate page or in a modal dialog box) is A Bad Thing. If you want to tweak your query after seeing its effect on the data, you have to pogo-stick back and forth between the data area and the search/filter area.&lt;/li&gt; 
&lt;li&gt;Allowing users to use operators or other complex syntax in a simple text-box-based search/filter interface is useful, especially if you also have an easier way of doing the same thing that shows the equivalent operators. (For example, as you manipulate the controls in Google advanced search, the read-only text box at the top of the page shows the query as if you had typed it into the regular Google search box.)&lt;/li&gt;
&lt;li&gt;Having a wide variety of different types of controls for filtering on different types of data (e.g., having sliders, text boxes, AND combo boxes) introduced too much visual noise and meant that the feature could not be easily reused for data grids displaying different types of data. (This was important for the developer, as the plan was to use this feature for several different data grids.)&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;Initial Wireframe&lt;/h4&gt; 
After some initial sketching, I came up with this:
&lt;br/&gt;&lt;br/&gt;&lt;a href="http://img.skitch.com/20100126-x2tta2qj5c34gnnrxmu4fmn7bt.png" target="_blank"&gt;&lt;img src="http://img.skitch.com/20100126-x2tta2qj5c34gnnrxmu4fmn7bt.png" alt="filter_initial"/&gt;&lt;/a&gt;
&lt;i&gt;(Click for a larger version in a new window/tab.)&lt;/i&gt;
&lt;br/&gt;&lt;br/&gt;


This was to be displayed as a slide-down panel between the toolbar and the data grid (to allow users to modify their searches and see the results immediately). The panel could then be closed so as to maximize the area available for displaying data.
&lt;br/&gt;&lt;br/&gt;

The other two options that are shown would work as follows:

&lt;ul&gt;
&lt;li&gt;Preconfigured search—this would contain a list of commonly-performed searches which could be selected from a drop-down list.&lt;/li&gt;
&lt;li&gt;Quick search—a simple text-box-based search where the user could type a search query (but would have to know the data field names and the search syntax).&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;

You can view a short screencast that I made from my Visio wireframes &lt;a href="http://www.screencast.com/t/YmY2NGI3ZD"&gt;here&lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;Feedback&lt;/h4&gt; 
After discussions with the development team, we came to the conclusion that even this was too complex—having “match all these criteria” and “match any of these criteria” was confusing. We decided to get rid of the second section and only display records that match &lt;i&gt;all&lt;/i&gt; of the specified criteria. 
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;Other Issues&lt;/h4&gt; 
There were other issues that had to be figured out:
&lt;ul&gt;
&lt;li&gt;
&lt;i&gt;Should we call it search or filter?&lt;/i&gt;&lt;br/&gt;
In the end we went with filter, as you start out with a set of records of a finite, known size, and reduce the size of the set.&lt;/li&gt;
&lt;li&gt;
&lt;i&gt;How to indicate that what is displayed is filtered or not?&lt;/i&gt;&lt;br/&gt;
Initially I thought that the grid should have a kind of status bar below it, which could show something like “22 items, 18 hidden”. But I decided that this was too subtle. So I decided on a strip that would be displayed between the toolbar and the grid showing the current filter. The strip’s background color would be the same as that of the filter panel.

&lt;p&gt;&lt;img style="padding:20px; background:#E0E0E0;" src="http://img.skitch.com/20100126-msc4nq3h4wmbruu4s38htqxjjg.preview.jpg" alt="filter_indicator"/&gt;&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;i&gt;What should happen when the user switches from one filter type to another (e.g., from Custom filter to Quick filter)?&lt;/i&gt;&lt;br/&gt;
Due to the complexity of taking, say, a complex query that the user typed into the box in Quick filter and translating it into the values in a set of controls, it was decided to clear the filter (and warn the user) when switching.&lt;/li&gt;
&lt;li&gt;
&lt;i&gt;Which filter type should be the default?&lt;/i&gt;&lt;br/&gt;
Quick filter, although it looks simpler and so perhaps most suitable for use as the default, it is really only for power users who already understand the syntax. So Custom filter became the default.&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;The Implementation&lt;/h4&gt;

&lt;a href="http://img.skitch.com/20100202-e1163s89xg5p53j3g9m32qi5fn.png" target="_blank"&gt;&lt;img src="http://img.skitch.com/20100202-e1163s89xg5p53j3g9m32qi5fn.png" alt="2009-10-28_1319_crop"/&gt;&lt;/a&gt;
&lt;i&gt;(Click for a larger version in a new window/tab.)&lt;/i&gt;
&lt;br/&gt;&lt;br/&gt;


The initial implementation bore some similarities to my design, but there were lots of missing pieces. For example:
&lt;ul&gt;
&lt;li&gt;There was no default filter—the user had to select one of the three options every time.&lt;/li&gt;
&lt;li&gt;The selected filter was not visually differentiated from the others.&lt;/li&gt;
&lt;li&gt;There was no way of knowing whether a filter was enabled or not.&lt;/li&gt;
&lt;li&gt;The spacing and alignment were all over the place, which made it hard to see what was related to what, which elements were most important, etc.&lt;/li&gt;
&lt;li&gt;The panel had a white background, so the fields did not stand out.&lt;/li&gt;
&lt;li&gt;Things that were clickable did not look clickable because the pointer turned to a text pointer instead of a hand on mouseover.&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;Fixing Things&lt;/h4&gt;
When I saw how the design had been implemented, I started playing around with the CSS to see what I could fix just by changing things there. It turned out that substantial improvements could be made.
&lt;br/&gt;&lt;br/&gt;
 
I also sat with the developer and showed her the problems. She fixed most of them, I made the changes to the CSS, and all was well.
&lt;br/&gt;&lt;br/&gt;

For a while…
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;The New Version&lt;/h4&gt;
Some time later, the developer who had implemented this feature left the team and a new developer joined. He was given the task of adding another new feature—the ability to group records (and also aggregate selected fields). Unfortunately, nobody consulted me about the feature until &lt;i&gt;after&lt;/i&gt; it had been implemented.
&lt;br/&gt;&lt;br/&gt;

The developer had decided that, as adding a filter and specifying a grouping were both kinds of queries, they could safely be combined into a single feature. He had combined them into an “Advanced Query” wizard that was displayed as a dialog box instead of the original panel (so reintroducing the pogo-sticking problem mentioned earlier). 
&lt;br/&gt;&lt;br/&gt;

The first stage of the wizard was where the user could specify a filter. The user could apply the filter without having to go through the other two steps of the wizard. But if the user wanted to group records, they had to click Next to move on to the second stage. There was no indication that the ability to group was unavailable until the second stage was reached.
&lt;br/&gt;&lt;br/&gt;

The user would then click Execute, which would close the dialog box and open a new dialog box, containing the third stage of the wizard (specifying which fields were to be aggregated and how—count, sum, average, etc.).
&lt;br/&gt;&lt;br/&gt;

Needless to say, this was less than ideal… I talked to the developer about it, and explained the rationale for originally having a panel instead of a dialog box. I also explained why I thought filtering and grouping are, for users, separate, unrelated things and so should be implemented as separate features. He agreed, but said that to change it, he would have to get the lead developer’s approval.
&lt;br/&gt;&lt;br/&gt;

And that is how things stand right now. I do not have high hopes that my suggested changes will be made before the imminent release. (It works, so fixing it is a lower priority than fixing all the other bugs and problems before the release.)
&lt;br/&gt;&lt;br/&gt;

I will push for this to be fixed, though. If not now, then later.
&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;What I would do differently&lt;/h4&gt;

I learned from this experience that it is &lt;i&gt;very&lt;/i&gt; important to keep in touch with the developers during the implementation stage. To explicitly ask them to show me what it looks like at various stages. Once something has been built and works (however badly) it tends to stay that way (especially in an enterprise setting). If it works, there’s not much incentive to go back and make it better. There are always newer, more important things to work on.</description><link>http://capcloud.com/post/354152671</link><guid>http://capcloud.com/post/354152671</guid><pubDate>Tue, 01 Dec 2009 00:00:00 +0200</pubDate><category>portfolio</category></item><item><title>Awesome New Israeli UX Site Launched</title><description>&lt;a href="http://www.uex.co.il/"&gt;Awesome New Israeli UX Site Launched&lt;/a&gt;</description><link>http://capcloud.com/post/261944019</link><guid>http://capcloud.com/post/261944019</guid><pubDate>Sun, 29 Nov 2009 12:45:22 +0200</pubDate></item><item><title>Battling SVN</title><description>&lt;p&gt;So I’ve got SVN set up on my Mac. I can check stuff out locally using &lt;tt&gt;file:///&lt;repo_path&gt;&lt;/tt&gt;. &lt;tt&gt;svnserve&lt;/tt&gt; &lt;i&gt;seems&lt;/i&gt; to be running, but I can’t check stuff out using &lt;tt&gt;svn://localhost/&lt;repo&gt;&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;WTF am I doing wrong?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;UPDATE:&lt;/b&gt; It seems like I’ve got it working. The annoying thing is, I’m not sure why it works now. I changed something that shouldn’t have made any difference, and now it works…&lt;/p&gt;</description><link>http://capcloud.com/post/255518353</link><guid>http://capcloud.com/post/255518353</guid><pubDate>Wed, 25 Nov 2009 08:55:17 +0200</pubDate></item><item><title>New Johnny TV Post</title><description>&lt;a href="http://johnnyholland.tv/post/249327353/scientific-fiction-matt-webb"&gt;New Johnny TV Post&lt;/a&gt;: &lt;p&gt;I just posted Matt Webb’s Lift 09 talk, “Scientific Fiction” on &lt;a href="http://johnnyholland.tv/"&gt;Johnny Holland TV&lt;/a&gt;. I am actually quite excited about this. I admire Webb and his work, but more especially, his thinking. I think my next &lt;a href="http://johnnyholland.org"&gt;JHM&lt;/a&gt; article is going to be about this video.&lt;/p&gt;</description><link>http://capcloud.com/post/249357523</link><guid>http://capcloud.com/post/249357523</guid><pubDate>Thu, 19 Nov 2009 08:18:28 +0200</pubDate></item><item><title>Thanks to Mr Merlin Mann, I am posting this from a cute little Dashboard...</title><description>&lt;p&gt;Thanks to Mr Merlin Mann, I am posting this from a cute little Dashboard widget.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.kungfugrippe.com/post/243861520/marco"&gt;http://www.kungfugrippe.com/post/243861520/marco&lt;/a&gt;&lt;/p&gt;</description><link>http://capcloud.com/post/244574707</link><guid>http://capcloud.com/post/244574707</guid><pubDate>Sun, 15 Nov 2009 10:06:39 +0200</pubDate></item></channel></rss>
