<?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 xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Thomas Park</title>
	
	<link>http://thomaspark.me</link>
	<description />
	<lastBuildDate>Fri, 26 Apr 2013 13:57:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thomaspark" /><feedburner:info uri="thomaspark" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>CRAPCHA: Completely Ridiculous And Phony Captcha that Hassles for Amusement</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/d9OLjl-2DUE/</link>
		<comments>http://thomaspark.me/2013/04/crapcha-completely-ridiculous-and-phony-captcha-that-hassles-for-amusement/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 12:08:46 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=8618</guid>
		<description><![CDATA[We&#8217;ve all run into CAPTCHAs, those annoying registration fields you never get right on the first try. But CAPTCHAs do play a valuable role, keeping spambots out by verifying that you&#8217;re a human. On top &#8230; <a href="http://thomaspark.me/2013/04/crapcha-completely-ridiculous-and-phony-captcha-that-hassles-for-amusement/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>We&#8217;ve all run into <a href="http://en.wikipedia.org/wiki/CAPTCHA">CAPTCHAs</a>, those annoying registration fields you never get right on the first try. But CAPTCHAs do play a valuable role, keeping spambots out by verifying that you&#8217;re a human. On top of this, <a href="http://www.google.com/recaptcha">reCAPTCHA</a> serves a greater good, having you digitize old books in the process.</p>
<p>Meet CRAPCHA.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2013/04/crapcha.png" alt="CRAPCHA" width="395" height="215" class="aligncenter size-full wp-image-8809" /></p>
<p>CRAPCHA doesn&#8217;t serve a dual purpose. It barely serves a single purpose. And it isn&#8217;t to keep spammers out.</p>
<p>What CRAPCHA does is annoy users by presenting a CAPTCHA with indecipherable text. Nothing new so far? Well, CRAPCHA attempts are posted to the CRAPCHA board, providing amusement for all. You can even click on a timestamp to save one for posterity. Try it out for yourself:</p>
<div class="center">
<a class="standard-btn red-btn xlarge-btn" href="http://crapcha.com"><span>CRAPCHA</span></a>
</div>
<h4>Add To Your Site</h4>
<p>If you run a site and want to spring this on your unsuspecting guests, simply copy and paste the following code.</p>
<div class="codecolorer-container html4strict railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/iframe.html"><span style="color: #000000; font-weight: bold;">iframe</span></a> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://crapcha.com/embed/&quot;</span> <span style="color: #000066;">frameborder</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">scrolling</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;150&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/iframe.html"><span style="color: #000000; font-weight: bold;">iframe</span></a>&gt;</span></div></div>
<p>Word of warning, CRAPCHA doesn&#8217;t actually validate anything. In fact, it&#8217;s very likely drive away users, and will cause mixed content warnings on HTTPS. On the other hand, it&#8217;s fun.</p>
<h4>Notes</h4>
<p>CRAPCHAs are created using a mix of weird <a href="http://unicode-table.com/">Unicode</a> and <a href="http://fortawesome.github.com/Font-Awesome/">Font Awesome</a> characters that have undergone CSS3 transforms.</p>
<p>Attempts are saved and retrieved using the lovely service provided by <a href="https://www.parse.com/">Parse</a>.</p>
<p>You can check out CRAPCHA&#8217;s source on <a href="https://github.com/thomaspark/crapcha">Github</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/d9OLjl-2DUE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2013/04/crapcha-completely-ridiculous-and-phony-captcha-that-hassles-for-amusement/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2013/04/crapcha-completely-ridiculous-and-phony-captcha-that-hassles-for-amusement/</feedburner:origLink></item>
		<item>
		<title>iRoll: Rickrolling with iPhone Web Apps</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/vC4PRnSrlv8/</link>
		<comments>http://thomaspark.me/2013/03/iroll-rickrolling-with-iphone-web-apps/#comments</comments>
		<pubDate>Sun, 31 Mar 2013 18:50:26 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=8719</guid>
		<description><![CDATA[One feature that&#8217;s often overlooked in iOS is adding webpages to your homescreen. You even get a nice retina icon if the webpage author designates one. Naturally, my mind went to how this feature could &#8230; <a href="http://thomaspark.me/2013/03/iroll-rickrolling-with-iphone-web-apps/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>One feature that&#8217;s often overlooked in iOS is adding webpages to your homescreen. You even get a nice retina icon if the webpage author designates one.</p>
<p>Naturally, my mind went to how this feature could be used for a prank: Replace legitimate app with fake. The fake looks exactly the same, but takes you to an annoying video instead. If you&#8217;re feeling really cruel, you surround the one real app with a screenful of imposters.</p>
<p>Spot the Instagram that <em>doesn&#8217;t</em> take you to a rendition of &#8220;Never Gonna Give You Up&#8221;.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2013/03/instagram.png" alt="Instagram" width="640" height="189" class="aligncenter size-full wp-image-8782" /></p>
<p>I started by making a one-off site, but as programmers tend to do, I decided to generalize it. The result is iRoll.</p>
<div class="center">
<a class="standard-btn red-btn xlarge-btn" href="http://iroll.co"><span>iRoll</span></a>
</div>
<h2>How to Use</h2>
<p>First, choose an app or enter a custom app ID &mdash; it uses this to grab any app&#8217;s name and icon. To find an app ID, go to the app in iTunes, right-click on the icon to copy the link, and then get the 9-digit number in the URL. For example, the app ID in the link below is 585259203.</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">https://itunes.apple.com/us/app/super-stickman-golf-2/id585259203?mt=8</div></div>
<p>Next, give iRoll a destination URL. This can be a Rick Astley video, a Rick Astley image, or anything else on the web.</p>
<p>Then, open the generated link on the target iPhone or iPad. You can email or manually type the shortened URL, or snap the QR code using a <a href="https://itunes.apple.com/us/app/qr-reader-for-iphone/id368494609?mt=8">QR reader app</a>.</p>
<p>Finally, open the link in Safari and save it to the home screen. In Safari, you&#8217;ll find the option by tapping the Send button, which you might have used before to email or tweet a link.</p>
<h2>Let&#8217;s Talk Design</h2>
<p>Technically speaking, iRoll is simple. It takes two inputs, app ID and destination URL, and formats a webpage with the app&#8217;s title and touch icon, and a redirect to the destination URL.</p>
<p>But <em>using</em> iRoll can be surprisingly complicated task, especially for the average end user. Sit Grandma down, and have her find an app ID, copy a link from her laptop to phone, and add the page to her home screen. See how that plays out.</p>
<p>So how did I design iRoll to simplify the task for users?</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2013/03/iroll.png" alt="iRoll" width="1335" height="916" class="aligncenter size-full wp-image-8788" /></p>
<h3>Progressive Disclosure</h3>
<p>iRoll takes advantage of <a href="http://en.wikipedia.org/wiki/Progressive_disclosure">progressive disclosure</a>. The task of creating a fake app is presented in simple, discrete steps. As you complete one step, the next comes into view, avoiding the overload that might come with presenting them all at once.</p>
<p>Take advantage of the third dimension. By that I don&#8217;t mean the z-axis &mdash; which is often ill-advised, but time.</p>
<h3>Sensible Presets</h3>
<p>iRoll&#8217;s design started with two input fields, for the app ID and destination URL. Simple! But getting an app ID is fairly involved, from the nonobvious way to copy an app&#8217;s link, to visually parsing the 9-digit number from it. On top of that, there&#8217;s a great deal of cognitive load in <em>choosing</em> an app.</p>
<p>To address this, iRoll provides a few preset options for both app and URL. They lower the bar to getting started with iRoll, and signal to users how it can be used.</p>
<p>Provide options that cover what you assume to be the &#8220;fat head&#8221;, while offering freer input for the &#8220;long tail&#8221;.</p>
<h3>Little Big Details</h3>
<p>Finally, the main use case for iRoll is generating a link on your PC, and then copying it over to your iPhone or iPad. Unfortunately, moving digital data like a URL from one device to another still involves a great deal of friction. Recognizing this, I provided a shortened URL and a QR code.</p>
<p>Look for the <a href="http://littlebigdetails.com/">little touches</a> that can oil the wheels, or simply delight.</p>
<p>It goes to show that what&#8217;s initially a simple app to build can morph a great deal once the user experience is taken into consideration.</p>
<h2>Notes</h2>
<p>App names and icons are pulled from Apple&#8217;s <a href="http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html">iTunes Search API</a>.</p>
<p>URLs are shortened using the <a href="http://is.gd/developers.php">is.gd API</a>.</p>
<p>There are a few JavaScript libraries out there for generating QR codes, but <a href="http://hg.mearie.org/qrjs/">qr.js by Kang Seonghoon</a> worked best for me.</p>
<p>Check out the source code on <a href="https://github.com/thomaspark/iroll">GitHub</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/vC4PRnSrlv8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2013/03/iroll-rickrolling-with-iphone-web-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2013/03/iroll-rickrolling-with-iphone-web-apps/</feedburner:origLink></item>
		<item>
		<title>Cinnamon.js: Find In-Page Text using Synonyms</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/P6HMpd--a4A/</link>
		<comments>http://thomaspark.me/2013/02/cinnamon-js-find-in-page-text-using-synonyms/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 13:14:30 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=8440</guid>
		<description><![CDATA[A visitor to your site decides to follow you on Twitter. You have a link in your footer &#8212; but their search for &#8220;Twitter&#8221; comes up empty and they move on. Unfortunately, you named the &#8230; <a href="http://thomaspark.me/2013/02/cinnamon-js-find-in-page-text-using-synonyms/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>A visitor to your site decides to follow you on Twitter. You have a link in your footer &mdash; but their search for &#8220;Twitter&#8221; comes up empty and they move on. Unfortunately, you named the link &#8220;@username&#8221; instead.</p>
<p><a href="https://github.com/thomaspark/cinnamon.js">Cinnamon.js</a> prevents just this situation, taking some of the pain out of naming things. It allows users to find links, images, and other content by their synonyms, using the browser&#8217;s built-in Find function.</p>
<h4>Demo</h4>
<p>To see it in action, search this page for &#8220;Twitter&#8221;, &#8220;Spice&#8221;, &#8220;Email&#8221;, or &#8220;Contact&#8221;.</p>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque cursus orci ut mi laoreet rhoncus. Pellentesque congue urna tincidunt tortor rhoncus dapibus. Duis faucibus dolor a sem ultrices at facilisis risus cursus. Cras vel euismod nisl. Ut vitae risus et libero sagittis ultrices et vitae ligula. Follow me at <a href="http://twitter.com/thomashpark" data-cinnamon="Twitter">@thomashpark</a>. Aliquam at turpis id diam placerat consequat at vitae est. Aenean tellus magna, lacinia vitae facilisis facilisis, egestas ut sapien.  Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. <span data-cinnamon="Email,Contact">Reach</span> me <a href="mailto:hello@thomaspark.me">here</a>. Donec tincidunt dapibus dui luctus rhoncus. Nam sagittis egestas blandit. Nulla imperdiet tincidunt enim, a tempus sapien volutpat a. Maecenas sed elit ipsum, ut tristique odio. Suspendisse potenti.</p>
<p><span data-cinnamon="Spice"><img src="http://farm4.staticflickr.com/3039/2660995478_fa23f10c6e.jpg" alt="Cinnamon"></span><br />Photo by <a href="http://www.flickr.com/photos/27369469@N08/2660995478/">kobiz7</a></p>
</blockquote>
<h4>Download</h4>
<p>You can download the script or view it on GitHub below.</p>
<div class="center">
<a class="standard-btn red-btn xlarge-btn" href="https://raw.github.com/thomaspark/cinnamon.js/master/cinnamon.min.js"><span>Download</span></a> <a class="standard-btn black-btn xlarge-btn" href="https://github.com/thomaspark/cinnamon.js"><span>GitHub</span></a>
</div>
<h4>Usage</h4>
<p>Add Cinnamon.js just before your body&#8217;s end tag. Then wrap your element of choice (span tags are recommended) and give it a data-cinnamon attribute with a comma-separated list of synonyms as its value. If you wrap an image, its alt text will also be used, as in the image above. Cinnamon.js works on modern browsers and IE8+.</p>
<p>Here&#8217;s an example:</p>
<div class="codecolorer-container html4strict railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> data-cinnamon<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Azure,Cerulean,Cobalt&quot;</span>&gt;</span>Blue<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span></div></div>
<h4>Notes</h4>
<p>This is meant to be a proof of concept, and you probably shouldn&#8217;t use it in production. <a href="http://support.google.com/webmasters/bin/answer.py?hl=en&#038;answer=66353">Hidden text</a>, used deceptively, can be penalized by Google. Precisely what&#8217;s counted as deception is anyone&#8217;s guess, but there&#8217;s a risk that it&#8217;s deemed a dirty SEO tactic even if it is not intended as such.</p>
<p>Cinnamon.js doesn&#8217;t hurt accessibility; it uses <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-hidden">aria-hidden</a> to tell screen readers to ignore the synonyms.</p>
<p>In the course of testing, one thing I discovered was that Safari handles in-page search quite differently from other browsers. Safari doesn&#8217;t search for strings mid-word unless the word uses CamelCase. When highlighting matched text, it ignores certain CSS properties like overflow, opacity, and z-index. Highlighting is semi-disabled by setting -webkit-user-select to none.</p>
<p>Check out the <a href="https://github.com/thomaspark/cinnamon.js/blob/master/cinnamon.js">source</a> to see how it works.</p>
<p>Some questions: Do regular people even use their browser&#8217;s Find function? Is the user&#8217;s reliance on the Find function a symptom of poor design, or is there room for better in-page search as there has been for site and web search?</p>
<h4>Updates</h4>
<ul>
<li><strong>26 February 2013:</strong> I wrote an article with <a href="http://robertnyman.com/">Robert Nyman</a> about this for <a href="https://hacks.mozilla.org/2013/02/finding-words-by-synonym-with-cinnamon-js/">Mozilla Hacks</a>.
<li><strong>5 March 2013:</strong> <a href="http://www.artiss.co.uk/">David Artiss</a> has packaged Cinnamon.js up as <a href="http://wordpress.org/extend/plugins/cinnamon/">a WordPress plugin</a>.
<li><strong>25 March 2013:</strong> Michael Kutschall is making some promising strides with an empty font approach. He goes into more detail in <a href="http://www.chaotic-good.de/sandbox/cinnamon.php">a blog post</a>.
</ul>
<p><script type="text/javascript" src="http://thomaspark.me/project/cinnamon.js/cinnamon.js"></script></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/P6HMpd--a4A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2013/02/cinnamon-js-find-in-page-text-using-synonyms/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2013/02/cinnamon-js-find-in-page-text-using-synonyms/</feedburner:origLink></item>
		<item>
		<title>Digitizing Books on the Cheap and Easy</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/5LXF_8p4FII/</link>
		<comments>http://thomaspark.me/2012/12/digitizing-books-on-the-cheap-and-easy/#comments</comments>
		<pubDate>Wed, 19 Dec 2012 16:15:41 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=8186</guid>
		<description><![CDATA[In 2011, for the first time, Amazon sold more Kindle ebooks than paperbacks. Last June, ebook sales surpassed hardcovers for all of the US. The futurist dream of a paperless world is slowly but surely &#8230; <a href="http://thomaspark.me/2012/12/digitizing-books-on-the-cheap-and-easy/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>In 2011, for the first time, Amazon sold more Kindle ebooks than paperbacks. Last June, ebook sales surpassed hardcovers for all of the US. The futurist dream of a paperless world is slowly but surely becoming reality.</p>
<p>With books, there are downsides to going digital, but perhaps the greatest upside is that they become omnipresent. You can load up <em>all</em> your books on <em>all</em> your devices. A thousand ebooks weigh the same and take up the same physical space as one. Anyone who&#8217;s dealt with textbooks or moved recently will attest to the value in that.</p>
<p>Unfortunately, not all books are available in digital format, and may never be. And you&#8217;ve got all these expensive books already sitting on the shelf. You could DIY and build your own book scanner (costing anywhere from <a href="http://www.instructables.com/id/DIY-High-Speed-Book-Scanner-from-Trash-and-Cheap-C/?ALLSTEPS">$300</a> to <a href="http://www.theverge.com/2012/11/13/3639016/google-books-scanner-vacuum-diy">$1,500</a>), but is there an easier way?</p>
<h4>At Your Service</h4>
<p>Enter <a href="http://1dollarscan.com/">1DollarScan</a>. As their name suggests, books can be scanned for as little as $1. How it works is that you mail them your book, and they scan it and send it back as a PDF.</p>
<p>This is a destructive process, where the book spine is cut off to improve and expedite scanning. In other words, you won&#8217;t be seeing your book again. If that&#8217;s a dealbreaker, there are <a href="http://www.blueleaf-book-scanning.com/">services offering a non-destructive option</a>, but expect to pay a premium.</p>
<p>Pricing is $1 per 100-page &#8220;set&#8221;. Options include OCR for $1 per set, high resolution (600 dpi) for $2 per set, and touch-up such as angle correction and compression for $2 per set. There&#8217;s also a free automated feature called Fine Tune that optimizes scans for target devices like the iPhone, iPad, Kindle, and Nook.</p>
<h4>A First Pass</h4>
<p>I have several books I&#8217;d like to digitize, but started with <a href="http://www.amazon.com/Interaction-Design-Beyond-Human-Computer/dp/0470665769/">Interaction Design: Beyond Human-Computer Interaction</a>. It&#8217;s a book I use at regular but infrequent intervals, weighs in at a hefty 3 pounds and 600 pages, and for which an official ebook is not available. This makes it a prime candidate.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-book.jpg" alt="Interaction Design book" width="960" height="640" class="aligncenter size-full wp-image-8418" /></p>
<h6>Quality</h6>
<p>Here&#8217;s how the scan turned out. The <a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-1dollarscan.pdf">PDF</a> shows exactly how it looks. As you can see, it&#8217;s very good quality. My only criticisms are that the scan is slightly askew, and the text is fainter than I&#8217;d like it to be (possibly due to the slightly glossy finish of the pages). There&#8217;s the touch-up option that promises to be even better, but I was satisfied without it.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-1dollarscan.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-1dollarscan-701x960.png" alt="Interaction Design - 1DollarScan" width="700" height="960" class="aligncenter size-large wp-image-8338 border" /></a></p>
<p>Just for fun, here&#8217;s what you get with <a href="http://books.google.com/books?id=b-v_6BeCwwQC&#038;printsec=frontcover&#038;source=gbs_ge_summary_r&#038;cad=0#v=onepage&#038;q&#038;f=false">Google Books</a>, who does their own scanning:</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-googlebooks.jpg"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-googlebooks-754x960.jpg" alt="Interaction Design - Google Books" width="700" height="891" class="aligncenter size-large wp-image-8343 border" /></a></p>
<p>And the scan of the 2nd edition I was working with before:</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-manual.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-manual-743x960.png" alt="interactiondesign-manual" width="743" height="960" class="aligncenter size-large wp-image-8347" /></a></p>
<h6>OCR</h6>
<p>OCR is key for being able to search within a book and copy text out of it. I sprang for the option so I could compare their job (top) with my own using Adobe Acrobat Pro 8 (bottom). Both do an excellent job, with only an extraneous space added in the header by Acrobat. However, notice that 1DollarScan&#8217;s OCR leaves hyphenation as is, while Acrobat joins each word together. This gives Acrobat the edge in finding these words in a text search.</p>
<blockquote>
<pre>
11.7.1 Design Patterns for Interaction Design

Design patterns capture experience, but they have a different structure and a different phi-
losophy from other forms of guidance or specific methods. One of the intentions of the pat-
terns community is to create a vocabulary, based on the names of the patterns, that designers
can use to communicate with one another and with users. Another is to produce a literature
in the field that documents experience in a compelling form.

The idea of patterns was first proposed by Christopher Alexander, a British architect
who described patterns in architecture. His hope was to capture the 'quality without a name'
that is recognizable in something when you know it is good.
</pre>
</blockquote>
<blockquote>
<pre>
11.<span style="color: red;"> 7</span>.1 Design Patterns for Interaction Design

Design patterns capture experience, but they have a different structure and a different philosophy
from other forms of guidance or specific methods. One of the intentions of the patterns
community is to create a vocabulary, based on the names of the patterns, that designers
can use to communicate with one another and with users. Another is to produce a literature
in the field that documents experience in a compelling form.

The idea of patterns was first proposed by Christopher Alexander, a British architect
who described patterns in architecture. His hope was to capture the 'quality without a name'
that is recognizable in something when you know it is good.
</pre>
</blockquote>
<p>Here&#8217;s another comparison of 1DollarScan&#8217;s OCR (top) with Acrobat Pro&#8217;s (bottom), for a different font. They make the same four errors.</p>
<blockquote>
<pre>
Figure 11.23 The LilyPad Arduino kit. <span style="color: red;">l</span>t comprises sensors, actuator boards, and conductive threa<span style="color: red;">o</span>.
Online tutorials are available that enable anyone to build their own (see web.media.mit.edu/<span style="color: red;">-</span>leah/
LilyPad/build/turn_signaljacket.<span style="color: red;"> h</span>tml)
</pre>
</blockquote>
<blockquote>
<pre>
Figure 11.23 The LilyPad Arduino kit. <span style="color: red;">l</span>t comprises sensors, actuator boards, and conductive threa<span style="color: red;">o</span>.
Online tutorials are available that enable anyone to build their own (see web.media.mit.edu/<span style="color: red;">-</span>leah/
LilyPad/build/turn_signaljacket.<span style="color: red;"> h</span>tml)
</pre>
</blockquote>
<p>My advice is to skip the OCR option and run it yourself if you have a program for it.</p>
<h6>Fine Tune</h6>
<p>Fine Tune is a free service offered by 1DollarScan that targets specific devices through compression, margin removal, resolution optimization, and character optimization. The original scan comes in at 332 MB, compared to the iPad at 88 MB, iPhone at 63 MB, and Kindle at 30 MB. The iPad-optimized version looks pretty close to the original. On other devices, there are more substantial changes.</p>
<p>Here&#8217;s a comparison for the iPhone, with the original on the left and the fine-tuned version on the right. The margins, including running headers and page numbers, have been cropped out. It doesn&#8217;t account for the iPhone 5&#8242;s larger screen yet however.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-iphone.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-iphone-280x600.png" alt="Interaction Design - iPhone" width="280" height="600" class="aligncenter size-medium wp-image-8384" /></a></p>
<p>And here&#8217;s a comparison for the Kindle Touch.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-kindle.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-kindle-470x600.png" alt="Interaction Design - Kindle" width="470" height="600" class="aligncenter size-medium wp-image-8385" /></a></p>
<p>It&#8217;s a tough call. The optimized version has a smaller file size and makes better use of screen real estate, but there is noticeable artifacting and distortion. Since it&#8217;s free, you can try both out and decide for yourself.</p>
<h6>Price</h6>
<p>With 6 sets and the OCR option, the total came to $12. Shipping via media mail tacked on $3. Not one dollar by any means, but not costly either. And by far the cheapest book scanning service out there. For a 200-page book without OCR, you&#8217;re looking at about $4 including shipping.</p>
<h6>Turnaround</h6>
<p>1DollarScan is located in California. With media mail, it took 8 days for the book to reach them from Philadelphia. Once it arrived, turnaround was a single day.</p>
<h6>Legality</h6>
<p>Scanning a book you have legally acquired for personal usage would appear to fall under fair use, just the same as ripping a CD you&#8217;ve bought. 1DollarScan requires you to include <a href="http://1dollarscan.com/pdf/user_agreement.pdf">a signed agreement form</a> with the book declaring the same.</p>
<h4>Parting Thoughts</h4>
<p>For certain books, there&#8217;s no substitute for touch of the printed page. But for most, the convenience of an ebook trumps all. And as the technology and design of ebooks marches forward, while publishers use cheaper and cheaper materials for print, this will increasingly be the case.</p>
<p>If you&#8217;re considering digitization, <a href="http://1dollarscan.com/">1DollarScan</a> is a good choice. In fact, I&#8217;ve got a few more books on the shelf that I intend to get scanned in the near future.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/interactiondesign-ipad.jpg" alt="Interaction Design iPad" width="960" height="640" class="aligncenter size-full wp-image-8419" /></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/5LXF_8p4FII" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/12/digitizing-books-on-the-cheap-and-easy/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/12/digitizing-books-on-the-cheap-and-easy/</feedburner:origLink></item>
		<item>
		<title>The iTunes Expanding Album Effect</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/dSgHRjaG5IA/</link>
		<comments>http://thomaspark.me/2012/12/the-itunes-expanding-album-effect-in-css-js/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 12:56:35 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=8078</guid>
		<description><![CDATA[iTunes 11 marks a significant departure from previous versions. While many of the changes are problematic (another post for another time), I want to focus on one positive: the expanding album effect. Similar to folders &#8230; <a href="http://thomaspark.me/2012/12/the-itunes-expanding-album-effect-in-css-js/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>iTunes 11 marks a significant departure from previous versions. While many of the changes are problematic (another post for another time), I want to focus on one positive: the expanding album effect.</p>
<p>Similar to folders in iOS, this effect lets users to scan a list of items and open one up in place. This has advantages over more traditional pop-up windows and mode changes, which can obscure content and cause the user to lose their place in the list.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/itunes11.png" alt="iTunes 11" width="960" height="854" class="aligncenter size-full wp-image-8079" /></p>
<p>A second aspect of this feature is that it uses content to enhance the chrome. In the detailed view, the background and text colors are generated algorithmically from album art. This not only serves a practical purpose in making the detailed view stand out from the list, but creates a nice (in most cases) aesthetic effect and a sense of feeling that differentiates one album from the next. The intrepid Seth Thompson and Wade Cosgrove have already recreated this, using <a href="http://stackoverflow.com/questions/13637892/how-does-the-algorithm-to-color-the-song-list-in-itunes-11-work">Mathematica</a> and <a href="http://www.panic.com/blog/2012/12/itunes-11-and-colors/">Cocoa</a> respectively. Apple&#8217;s algorithm, it turns out, is pretty sophisticated.</p>
<p>Here&#8217;s my take, using HTML, CSS, and Javascript.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/12/expandingalbums.png" alt="Expanding Albums Demo" width="1159" height="918" class="aligncenter size-full wp-image-8133" /></p>
<p>And you can check it out for yourself here:</p>
<div class="center"><a class="standard-btn red-btn xlarge-btn" href="http://thomaspark.me/project/expandingalbums/"><span>Demo</span></a></div>
<h4>Details</h4>
<p>The demo is built with <a href="http://app-folders.com/">App Folders</a>, with behavior and style modified to mimic iTunes. <a href="http://lokeshdhakar.com/projects/color-thief/">Color Thief</a> is used to derive colors on-the-fly from album art using a median cut algorithm. On top of this, I selected colors for acceptable contrast by converting RGB to YIQ, a color space that <a href="http://24ways.org/2010/calculating-color-contrast/">better reflects human perceptions</a>. Last but not least, <a href="http://mustache.github.com/">Mustache</a> is used to pull album data from a JSON file into templates.</p>
<p>I got to play with several exciting HTML5 and CSS3 properties in making this demo, including <a href="http://www.quirksmode.org/css/textoverflow.html">text-overflow</a>, <a href="http://www.quirksmode.org/css/multicolumn.html">multi-columns</a>, <a href="http://www.quirksmode.org/css/transitions.html">transitions</a>, <a href="http://www.quirksmode.org/css/animations.html">animations</a>, and canvas. Unfortunately, this means the demo requires a modern browser. The future can&#8217;t come fast enough.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/dSgHRjaG5IA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/12/the-itunes-expanding-album-effect-in-css-js/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/12/the-itunes-expanding-album-effect-in-css-js/</feedburner:origLink></item>
		<item>
		<title>Ive’s To-Do List</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/KeaUuYwPnWA/</link>
		<comments>http://thomaspark.me/2012/10/ives-to-do-list/#comments</comments>
		<pubDate>Tue, 30 Oct 2012 20:40:47 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=7874</guid>
		<description><![CDATA[Tensions had been mounting for some time now, between head-of-iOS Scott Forstall and other members of Apple&#8217;s management: Inside Apple, tension has brewed for years over the issue. Apple iOS SVP Scott Forstall is said &#8230; <a href="http://thomaspark.me/2012/10/ives-to-do-list/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.fastcodesign.com/1670760/will-apples-tacky-software-design-philosophy-cause-a-revolt">Tensions had been mounting</a> for some time now, between head-of-iOS Scott Forstall and other members of Apple&#8217;s management:</p>
<blockquote><p>Inside Apple, tension has brewed for years over the issue. Apple iOS SVP Scott Forstall is said to push for skeuomorphic design, while industrial designer Jony Ive and other Apple higher-ups are said to oppose the direction. “You could tell who did the product based on how much glitz was in the UI,” says one source intimately familiar with Apple’s design process.</p>
<p>But before Forstall, it was Steve Jobs who encouraged the skeuomorphic approach, some say.</p></blockquote>
<p><span id="more-7874"></span>Skeuomorphism can be <a href="http://tobiasahlin.com/blog/skeumorphism-and-storytelling/">a powerful thing</a>. It can communicate purpose and create emotional resonance. But <a href="http://www.fastcodesign.com/1669879/can-we-please-move-past-apples-silly-faux-real-uis">it can go too far</a>, focusing on how the software looks at the expense of how it works or feels. Apple has been criticized for just this with its recent offerings. Reportedly, they&#8217;ve gone so far as to demo a <em>virtual paper shredder</em> used when deleting e-tickets.</p>
<p>Now we&#8217;re seeing things shake out. Forstall is being &#8220;phased out&#8221; and Jonathan Ive, known for his understated hardware designs, is adding UI to his responsibilities. This move signals that the pendulum of skeuomorphism is about to swing back in the other direction, though it probably won&#8217;t be as extreme as <a href="http://en.wikipedia.org/wiki/Metro_(design_language)">Microsoft&#8217;s flatland</a> or <a href="http://readwrite.com/2011/11/11/5-problems-with-gmails-new-des">Google&#8217;s whiteout</a>.</p>
<p>If all the wood, suede, felt, and yes, even linen, are to go the way of <a href="http://en.wikipedia.org/wiki/Brushed_metal_(interface)">brushed metal</a>, Ive has a lot of work ahead of him. For some apps, it might be a matter of reskinning the interface. But for most, whole models of interaction, currently built on strained metaphors, will need to be rethought. The following apps should be at the top of Ive&#8217;s to-do-list.</p>
<h4>Podcasts</h4>
<p>The tape reel, while well-made, is a waste of real estate and confuses what is and is not an active element. For instance, would you have guessed from the screenshot that you can drag the thin red scrubber, but can&#8217;t tap the progress bar to jump to a different spot? All the while, basic functionality like shuffling podcasts or sorting them from oldest to newest is absent.  </p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/ios1.jpg" alt="" title="Podcasts and Game Center" width="600" height="480" class="alignnone size-full wp-image-7940" /></p>
<h4>Game Center</h4>
<p>Like the Podcasts app, it&#8217;s not evident in Game Center what&#8217;s interactive or not. The ribbons at the top aren&#8217;t, while the ribbons at the bottom are. So is the photo at the top. The felt and wood theme is cheesy, fitting for a 99-cent poker app rather than the official hub for games of all types.</p>
<h4>Find My Friends</h4>
<p>The less said about the stitched leather, the better.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/ios2.jpg" alt="" title="Find My Friends and iBooks" width="600" height="480" class="alignnone size-full wp-image-7937" /></p>
<h4>iBooks</h4>
<p>While the skeuomorphism in iBooks isn&#8217;t quite as objectionable, it has represented a philosophy of keeping faithful to the dead-tree analogue. Contrast its page effects with the Kindle, where everything besides the text fades away. The scroll mode recently introduced in iBooks 3 suggests that Apple&#8217;s philosophy may have already started to change.</p>
<h4>Calendar</h4>
<p>With Mountain Lion, the stitched leather is thankfully gone but the torn paper remains. The desk calendar metaphor, unfamiliar to anyone under 20 anyway, falls aparts immediately with radio buttons, check boxes, and scroll lists.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/calendar.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/calendar.png" alt="" title="Calendar" width="1225" height="682" class="alignnone size-full wp-image-7964" /></a></p>
<h4>Contacts</h4>
<p>Similar criticisms to Calendar can be applied to the OS X and iPad versions of Contacts. The heavy-handed interface screams &#8220;book&#8221;, but it turns out to be a magic book with scroll lists and embedded buttons that slide panes in and out of the page. </p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/contacts.jpg" alt="" title="Contacts" width="616" height="382" class="alignnone size-full wp-image-7967" /></p>
<h4>Photo Booth</h4>
<p>Fortunately Photo Booth is not a critical app, but the velvet curtains and gold thumb-wheel rank with the stitched leather.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/photobooth.jpg"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/photobooth.jpg" alt="" title="Photobooth" width="730" height="456" class="alignnone size-full wp-image-7971" /></a></p>
<h4>One Last Thing</h4>
<p>iTunes doesn&#8217;t deserve to be on this list, but warrants special mention. Over the years, it&#8217;s grown from an MP3 player to Apple&#8217;s most important application. But this growth has been organic, and new functionality has been layered atop the old, creating a complicated interface in desperate need of overhaul.</p>
<p>In fact, Apple announced in September that a completely redesigned version was coming this month (though it looks like that target will be missed), and posted <a href="http://www.apple.com/itunes/new-itunes/">a preview on their site</a>.</p>
<p>The new iTunes, as they call it, is minimal. It shows no symptoms of extreme skeuomorphism. And perhaps it will be the first real taste of things to come under Ive&#8217;s reign.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/newitunes.jpg"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/newitunes.jpg" alt="" title="New iTunes" width="928" height="591" class="alignnone size-full wp-image-7974" /></a></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/KeaUuYwPnWA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/10/ives-to-do-list/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/10/ives-to-do-list/</feedburner:origLink></item>
		<item>
		<title>The Hacker News Slap</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/zPAkyY8NmCk/</link>
		<comments>http://thomaspark.me/2012/10/the-hacker-news-slap/#comments</comments>
		<pubDate>Sat, 20 Oct 2012 17:11:33 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=7678</guid>
		<description><![CDATA[For those who aren&#8217;t familiar, Hacker News is a popular site where a community of techies discuss a wide range of topics. According to HN&#8217;s guidelines, on-topic submissions are &#8220;[a]nything that good hackers would find &#8230; <a href="http://thomaspark.me/2012/10/the-hacker-news-slap/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>For those who aren&#8217;t familiar, <a href="http://news.ycombinator.com/news">Hacker News</a> is a popular site where a community of techies discuss a wide range of topics. According to HN&#8217;s guidelines, on-topic submissions are &#8220;[a]nything that good hackers would find interesting. That includes more than hacking and startups. If you had to reduce it to a sentence, the answer might be: anything that gratifies one&#8217;s intellectual curiosity.&#8221;</p>
<p><span id="more-7678"></span>Getting your content on the HN front page can be <a href="http://swombat.com/2011/1/13/how-to-get-your-startup-on-hacker-news">a big deal</a>, a fact that hasn&#8217;t escaped spammers. To keep them at bay and maintain the quality of the site, moderators have had to be quite active. And whether you&#8217;re in agreement with it or not, it&#8217;s fair to say that they&#8217;ve operated opaquely, from <a href="https://jcs.org/notaweblog/2012/06/13/hellbanned_from_hacker_news/">hellbans</a> to <a href="http://techzinglive.com/page/1023/178-tz-discussion-the-hacker-news-slap">the slap</a> &mdash; where a submission rises to the front page, and just as quickly vanishes from it.</p>
<p>Mods can kill a submission and instantly send it into oblivion. But more marginal submissions can also be flagged by mods or users for being off topic, low-content fluff, spammy, or otherwise poor quality &mdash; or perfectly valid submissions by those who disagree with it. This can even happen to articles occupying the coveted top spot, with plenty of points and a lively discussion. If enough mods and users flag it, it&#8217;ll quietly slip down the rankings and off the front page.</p>
<p>From the perspective of the community, these are silent failures. They&#8217;re a missed opportunity to learn how the flag feature is being used and what content the community does (or more to the point, does not) value. If you&#8217;ve been visiting HN for awhile, you might feel that you&#8217;ve already developed a sense for how things work. But <a href="http://blog.rjmetrics.com/surprising-hacker-news-data-analysis/">as a recent analysis of HN shows</a>, the reality can surprise you.</p>
<h4>A User Script</h4>
<p>I wrote a <a href="http://userscripts.org/scripts/show/150452">user script</a> that highlights the submissions that have been on the receiving end of the slap. The script inserts scores based on the <a href="http://amix.dk/blog/post/19574">HN ranking algorithm</a>, a function of each submission&#8217;s points and age. Submissions ranked below others with half their score are highlighted in red; a rough heuristic but definitely indicative of being slapped down. Weaker candidates are highlighted in orange; while they may have penalized, it could also be explained by the algorithm being out-of-date or incomplete (it is).</p>
<p>The script also works on the <a href="http://www.domador.net/extras/services/hourly-hn-snapshot/">Hourly HN Snapshot archive</a>. Try it out on past frontpages, like <a href="http://hhn.domador.net/2011/10/27/10/">October 27, 2011</a>.</p>
<h4>Installation</h4>
<p>You can get the script here: <a href="http://userscripts.org/scripts/show/150452">http://userscripts.org/scripts/show/150452</a>.</p>
<p>Install it in Chrome either by downloading the file and dragging it into the Extensions tab (sadly, user scripts can no longer be installed directly), or through the extension <a href="https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo">Tampermonkey</a>. Firefox users can install through <a href="https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/">Greasemonkey</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/10/hn.png" alt="" title="Hacker News" width="727" height="521" class="alignnone size-full wp-image-7711" /></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/zPAkyY8NmCk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/10/the-hacker-news-slap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/10/the-hacker-news-slap/</feedburner:origLink></item>
		<item>
		<title>Learning to Code from Play by Play</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/EherWixdHH4/</link>
		<comments>http://thomaspark.me/2012/08/learning-to-code-from-play-by-play/#comments</comments>
		<pubDate>Sun, 12 Aug 2012 19:17:03 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Learning]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=7489</guid>
		<description><![CDATA[It&#8217;s a great time to learn to code. It seems as long as there&#8217;s been the web, there&#8217;s been text tutorials on coding. But now we&#8217;re seeing the rise of lecture videos (see iTunes U), &#8230; <a href="http://thomaspark.me/2012/08/learning-to-code-from-play-by-play/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s a great time to learn to code.</p>
<p>It seems as long as there&#8217;s been the web, there&#8217;s been text tutorials on coding. But now we&#8217;re seeing the rise of lecture videos (see <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?genreId=40000009&#038;id=29666&#038;popId=65" target="_blank">iTunes U</a>), massive open online courses (see <a href="https://www.coursera.org/" target="_blank">Coursera</a>), and interactive tutorials (see <a href="http://www.codecademy.com/" target="_blank">Codecademy</a>). I&#8217;ve sampled them all, but what&#8217;s hooked me lately is watching pros at work — most recently 37signals designer Ryan Singer as he <a href="https://peepcode.com/products/ryan-singer-ii" target="_blank">designs and prototypes a UI</a>.</p>
<p><span id="more-7489"></span>Aside from the satisfaction of watching a master of his craft, these videos offer learning opportunities that would be edited out in more structured tutorials and polished lectures. Here are a few things I picked up from the screencast, things I wouldn&#8217;t have gotten from other sources on the subject.</p>
<h4>Taking in the Environment</h4>
<p>Many tutorials skip over the tools, provide their own simplified version, or go with the standard and most widely used. And this may well be the right approach for beginners. But for those with a bit more experience, it can be both fascinating and instructive to peer into the environments that developers have shaped to their needs and idiosyncrasies.</p>
<ul>
<li>Ryan carries out the screencast on his own machine (or at least his loaner). For prototyping, he uses Rails to take advantage of SCSS and templates, along with the hassle-free dev server <a href="http://pow.cx/" target="_blank">Pow</a>.</li>
</ul>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/08/environment.png" alt="" title="Pow" width="1000" height="600" class="alignnone size-full wp-image-7628" /></p>
<h4>Tricks of the Trade</h4>
<p>While small tricks make good blog fodder, tutorials usually don&#8217;t leave room for them. Screencasts bring them to life, set in a greater context.</p>
<ul>
<li>Ryan would switch from code editor to Photoshop depending on what he wanted to mockup. On his Mac, he copied the browser window directly to clipboard a la Windows. I was familiar with <strong>command-shift-3</strong> to save a screenshot to file and <strong>command-shift-4</strong> to save a region, but didn&#8217;t know you could skip the file by adding <strong>control</strong> to each key combo.</li>
<li>In Photoshop, he experimented with the width of elements by selecting an edge, holding down <strong>command-option-shift</strong>, and then arrowing in the direction he wanted the element to expand. Another must-know for designers.</li>
</ul>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/08/photoshop.png" alt="" title="Photoshop" width="1000" height="600" class="alignnone size-full wp-image-7631" /></p>
<h4>Resolving Issues</h4>
<p>Screencasts often center on ill-defined problems that are rife with unanticipated issues. These issues can make for teachable moments in how to troubleshoot and resolve them effectively.</p>
<ul>
<li>At one point, Ryan wasn&#8217;t happy with where the header was breaking into two lines, but wanted to avoid a break tag if possible. The facilitator mentioned the <a href="https://developer.mozilla.org/en-US/docs/HTML/Element/wbr" target="_blank">HTML5 word break opportunity element</a>, which neither Ryan or I were familiar with before.</li>
</ul>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/08/linebreak.png" alt="" title="Line break" width="1000" height="600" class="alignnone size-full wp-image-7632" /></p>
<h4>As an Aside</h4>
<p>Given airtime, most pros will inevitably expound on some higher level-issues about the field or community. In measured doses, these asides can be thought-provoking and reveal the bigger picture.</p>
<ul>
<li>Ryan discusses patterns for marking up sections like the one below. Do you tightly wrap the section content, or include the section header so the whole section is neatly encapsulated? He proposes a solution that&#8217;s sometimes used at 37signals, but explains that a good pattern hasn&#8217;t really been established yet.</li>
<li>A few minutes later, he talks about the semantic baggage that ordered and unordered lists bring compared to divs.</li>
</ul>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/08/markup.png" alt="" title="Markup" width="1000" height="600" class="alignnone size-full wp-image-7633" /></p>
<h4>Conclusion</h4>
<p>I hope we see more of these videos of designers and developers in action. With so many people relying on online learning and parlaying that into professional work that might also be remote, these videos help recover some of the tacit knowledge that&#8217;s been lost in other, more refined resources.</p>
<p>If you haven&#8217;t already, check out previews for the rest of PeepCode&#8217;s <a href="https://peepcode.com/screencasts/play-by-play" target="_blank">Play by Play series</a>. Minecraft-creator <a href="http://www.mrspeaker.net/2011/09/27/notch-on-film" target="_blank">Notch&#8217;s marathon livestreams</a> are an epiphany, and Chris Coyier&#8217;s <a href="http://www.kickstarter.com/projects/150422311/screencasting-a-complete-redesign" target="_blank">redesign of CSS Tricks</a>, which has been successfully funded on Kickstarter, is another one to look forward to.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/EherWixdHH4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/08/learning-to-code-from-play-by-play/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/08/learning-to-code-from-play-by-play/</feedburner:origLink></item>
		<item>
		<title>Apple Storefronts Redux</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/09ve6DzvOdA/</link>
		<comments>http://thomaspark.me/2012/07/apple-storefronts-redux/#comments</comments>
		<pubDate>Tue, 10 Jul 2012 02:37:06 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=7095</guid>
		<description><![CDATA[Last year, I posted a gallery of every Apple Store ever. It was a quick and dirty project, made on a whim. But it eventually took on a life of its own, getting coverage from &#8230; <a href="http://thomaspark.me/2012/07/apple-storefronts-redux/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Last year, I posted <a href="http://thomaspark.me/2011/11/every-apple-storefront/">a gallery of every Apple Store ever</a>. It was a quick and dirty project, made on a whim. But it eventually took on a life of its own, getting coverage from such heavyweights as <a href="http://www.macrumors.com/2011/11/09/gallery-of-storefront-photos-from-apples-357-retail-stores/" target="_blank">MacRumors</a>, <a href="http://gizmodo.com/5858264/every-single-apple-store-on-the-planet-in-under-60-seconds" target="_blank">Gizmodo</a>, and <a href="http://techland.time.com/2011/11/10/check-out-every-apple-store-ever-opened-in-order/" target="_blank">Time</a> (in that order).</p>
<p><span id="more-7095"></span> If I knew so many eyeballs would be on it, I&#8217;d have spent more time getting things right. It looked nice enough, but I knew that it didn&#8217;t work right. After that initial wave of attention subsided however, I decided to leave well enough alone, apart from adding the odd new store. It was a side project after all.</p>
<p>And that went fine, until <a href="http://www.ifoapplestore.com/db/retail-web-pages-revised-2012/" target="_blank">Apple revised their site with high-resolution images</a>. Now the images were larger and cropped wider, meaning new stores no longer fit with the rest. So I started digging into Apple Storefronts again last week. At first, it was just to update it with the new images. But then I couldn&#8217;t help myself, and it snowballed into more.</p>
<h4>More Changes</h4>
<p>With the new, larger images, you see the trees more so than the forest. To address this, I added a toggle between two sizes, as well as a toggle for the labels.</p>
<p>In addition to the old country and state filters, you can filter by year now, and sort by oldest or newest. And these views are mapped to different URLs, meaning you can save and share them.</p>
<p>Then there&#8217;s the interface. I wanted the site to work better on mobile, so I adopted as my framework the tried-and-true <a href="http://twitter.github.com/bootstrap/" target="_blank">Bootstrap</a>. This also allowed me to use the Slate theme I created on <a href="http://bootswatch.com/" target="_blank">Bootswatch</a> for the visual design.</p>
<p>The new features forced other interface changes. The old navbar was overloaded with links, and now I needed to make room for more. Where to put it all, especially on mobile? My solution was to move primary filters to a drop-down menu, but keep secondary filters out. Instead, they can be accessed by clicking a particular state or year on a label.</p>
<p>Lastly, there&#8217;s been a host of performance improvements and a streamlined update process, thanks to <a href="https://developers.google.com/appengine/" target="_blank">Google App Engine</a> and Django&#8217;s templating system.</p>
<p>So tweaked images&#8230; and then all this: version 2.0 of <a href="http://applestorefronts.appspot.com" target="_blank">Apple Storefronts</a>.</p>
<p><a href="http://applestorefronts.appspot.com" target="_blank"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/07/applestorefronts2.png" alt="" title="Apple Storefronts 2" width="555" height="385" class="aligncenter size-full wp-image-7255 margin-small" /></a></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/09ve6DzvOdA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/07/apple-storefronts-redux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/07/apple-storefronts-redux/</feedburner:origLink></item>
		<item>
		<title>Introducing Bootswatch</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/VVf8ilmrF9g/</link>
		<comments>http://thomaspark.me/2012/02/introducing-bootswatch/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 21:39:57 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=6909</guid>
		<description><![CDATA[Although I spilled the beans in an interview yesterday, I wanted to formally announce a personal project called Bootswatch. It&#8217;s a collection of themed swatches that you can download for free and drop into your &#8230; <a href="http://thomaspark.me/2012/02/introducing-bootswatch/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Although I spilled the beans in <a target="_blank" href="http://www.domain.me/blog/thomas-park-3691">an interview yesterday</a>, I wanted to formally announce a personal project called <strong>Bootswatch</strong>. It&#8217;s a collection of themed swatches that you can download for free and drop into your Bootstrap site. You can check it out at <a target="_blank" onclick="pageTracker._link(this.href); return false;" href="http://bootswatch.com">bootswatch.com</a>.
<p><span id="more-6909"></span></p>
<h4>What&#8217;s Bootstrap Again?</h4>
<p><a target="_blank" href="http://twitter.github.com/bootstrap/">Bootstrap</a> is a popular web framework made by some talented people at Twitter. It allows even the most time-constrained and design-impaired to create nice-looking sites.</p>
<p>As more and more sites adopt Bootstrap though, a growing issue is the uniformity between them. You might already recognize the signature black bar and blue buttons. Here are a few examples, taken from <a href="http://builtwithbootstrap.com/" target="_blank">Built with Bootstrap</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/02/bwbootstrap.png" alt="" title="Built with Bootstrap" width="600" height="407" class="aligncenter size-full wp-image-7004 paddedLarger bordered" /></p>
<p>My goal with Bootswatch is to enable developers using Bootstrap to try on a new look, without investing much time or energy. The best thing about it is that it doesn&#8217;t significantly alter your code or your workflow. </p>
<h4>So how do I use Bootswatch?</h4>
<p>First, head over to <a target="_blank" onclick="pageTracker._link(this.href); return false;" href="http://bootswatch.com">Bootswatch</a> and pick a swatch. Download the bootswatch.min.css file associated with it.</p>
<p>In Bootstrap&#8217;s CSS directory, you&#8217;ll find a stylesheet in full (bootstrap.css) and minified (bootstrap.min.css) forms. Rename them or move them to a safe place. Then drop in the new CSS file and check that your HTML points to it. If you ever change your mind, simply drop in another swatch or switch back to the original.</p>
<h4>What if I want to extend Bootswatch?</h4>
<p>Bootswatch is an open source project, and you&#8217;re welcome to modify the swatches further or create your own. If you&#8217;re interested, fork or follow the <a href="https://github.com/thomaspark/bootswatch" target="_blank">GitHub repository</a>.</p>
<p>Each raw swatch consists of two <a href="http://lesscss.org/" target="_blank">LESS</a> files. One is variables.less, which is included by default in Bootstrap and allows you to customize <a href="http://twitter.github.com/bootstrap/less.html#variables" target="_blank">these settings</a>. The other is a new file called bootswatch.less that introduces more extensive changes. </p>
<p>First, add these two files to <a href="https://github.com/twitter/bootstrap/" target="_blank">Bootstrap&#8217;s own LESS files</a>. You&#8217;ll be overwriting the default variables.less.</p>
<p>Next, open up bootstrap.less and just before the line &#8220;Utility classes&#8221; at the end, add <code class="codecolorer text railscasts"><span class="text">@import &quot;bootswatch.less&quot;;</span></code>. This command includes bootswatch.less when compiling the LESS files to CSS, and placing it near the end overrides earlier styles with the same <a href="http://www.w3.org/TR/CSS2/cascade.html#specificity" target="_blank">CSS selector specificity</a>.</p>
<p>Now you can start customizing variables.less and bootswatch.less. You are also free to modify the other LESS files, which in some cases will be easier, but your swatch may become brittle to future changes in Bootstrap itself. When you&#8217;re ready to test your code, <a href="http://twitter.github.com/bootstrap/less.html#compiling" target="_blank">compile to CSS</a> and enjoy!</p>
<h4>Update</h4>
<p>Check out my article on Smashing Magazine about <a href="http://coding.smashingmagazine.com/2013/03/12/customizing-bootstrap/">Customizing Bootstrap</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/VVf8ilmrF9g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/02/introducing-bootswatch/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/02/introducing-bootswatch/</feedburner:origLink></item>
		<item>
		<title>Startups, Dotcoms, and Other TLDs</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/KvYg3eZESuo/</link>
		<comments>http://thomaspark.me/2012/02/startups-dotcoms-and-other-tlds/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:08:16 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=6732</guid>
		<description><![CDATA[I recently spent way too much time trying to find a domain for a project. Every good .com, and even most of the terrible ones, had long been claimed by squatters. This got me to &#8230; <a href="http://thomaspark.me/2012/02/startups-dotcoms-and-other-tlds/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>I recently spent way too much time trying to find a domain for a project. Every good .com, and even most of the terrible ones, had long been claimed by squatters.</p>
<p>This got me to wonder how startups are dealing with this. From reading the news, it seems as though more and more are going with alternative TLDs like .me and .us. Many are even using <a target="_blank" href="http://en.wikipedia.org/wiki/Domain_hack">domain hacks</a> to turn this weakness into a strength. Are we reaching a tipping point with alternative TLDs, given their increasing visibility and viability?</p>
<p><span id="more-6732"></span> To find out, I went to <a target="_blank" href="http://www.crunchbase.com/">CrunchBase</a> and collected the domains of 1,000 companies founded in each year from 2005 to 2011<sup class='footnote'><a href='http://thomaspark.me/2012/02/startups-dotcoms-and-other-tlds/#fn-6732-1' id='fnref-6732-1' onclick='return fdfootnote_show(6732)'>1</a></sup>. Of course there are other factors at play in this sample, but it&#8217;s a fairly good way to uncover domain trends in the startup world.</p>
<p>What I found was that .com (in blue below) dominates, same as it ever has. The recognizability and prestige of .com is a powerful, self-perpetuating thing. For the past seven years, it&#8217;s hovered at 85 percent with little sign of dropping. About 50 other TLDs nibble on the leftover slice of pie. Mouse over the graph for more details.</p>
<p><iframe width='600' height='350' frameborder='0' scrolling='no' src='https://docs.google.com/spreadsheet/pub?hl=en_US&#038;hl=en_US&#038;key=0AkXMXPqHS7NAdGhZdUNoY2VfSHVTTEYwQzBYbERhNFE&#038;single=true&#038;gid=2&#038;output=html&#038;widget=false'></iframe></p>
<p>Have startups been using the B-list TLDs, .net and .org? Only a bit. About 2 percent of startups use each, although while .org is finding a niche with NGOs and the like, .net may be falling out of vogue (relatively speaking) in recent years. </p>
<p><iframe width='600' height='350' frameborder='0' scrolling='no' src='https://docs.google.com/spreadsheet/pub?hl=en_US&#038;hl=en_US&#038;key=0AkXMXPqHS7NAdGhZdUNoY2VfSHVTTEYwQzBYbERhNFE&#038;single=true&#038;gid=3&#038;output=html&#038;widget=false'></iframe></p>
<p>And here&#8217;s a closer look at an assortment of TLDs that seem to be popular with startups. Ironically but perhaps unsurprisingly, .biz is a flop, while .me, .io, and .co enjoy upticks in the last year. It remains to be seen if this is part of a larger trend.</p>
<p><iframe width='600' height='350' frameborder='0' scrolling='no' src='https://docs.google.com/spreadsheet/pub?hl=en_US&#038;hl=en_US&#038;key=0AkXMXPqHS7NAdGhZdUNoY2VfSHVTTEYwQzBYbERhNFE&#038;single=true&#038;gid=4&#038;output=html&#038;widget=false'></iframe></p>
<p>For startups, one strategy might be to grab an alternative domain cheaply to start with, and to acquire the .com version when you get funded down the line. But with alternative TLDs hardly making a dent, it&#8217;s evident that having a .com is a priority right from the start, and that they&#8217;re perhaps willing to compromise their name to ensure that they land one.</p>
<p>Despite the crowding on .com, it turns out that domain names aren&#8217;t getting any longer. Here&#8217;s a graph showing that there&#8217;s even a slight decrease in the number of characters since 2009.</p>
<p><iframe width='600' height='350' frameborder='0' scrolling='no' src='https://docs.google.com/spreadsheet/pub?hl=en_US&#038;hl=en_US&#038;key=0AkXMXPqHS7NAdGhZdUNoY2VfSHVTTEYwQzBYbERhNFE&#038;single=true&#038;gid=5&#038;output=html&#038;widget=false'></iframe></p>
<p>To keep domain names short, there&#8217;s certainly much of the same creativity with naming startups today as <a href="http://messymatters.com/pgnames" target="_blank">Paul Graham noted back in 2006</a>. And despite the influx of alternative TLDs, startups are, for the time being, still dotcoms.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/KvYg3eZESuo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/02/startups-dotcoms-and-other-tlds/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/02/startups-dotcoms-and-other-tlds/</feedburner:origLink></item>
		<item>
		<title>Better Badges on Netflix</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/v8-bqaJBg9w/</link>
		<comments>http://thomaspark.me/2012/01/better-badges-on-netflix/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 23:04:02 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=6585</guid>
		<description><![CDATA[Today our attention is divided among many apps on many devices, networked and constantly updating. Given this, status badges are used more than ever to help users maintain awareness. They&#8217;re used everywhere from operating systems &#8230; <a href="http://thomaspark.me/2012/01/better-badges-on-netflix/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Today our attention is divided among many apps on many devices, networked and constantly updating. Given this, status badges are used more than ever to help users maintain awareness. They&#8217;re used everywhere from operating systems to applications to websites, to varying degrees of success.</p>
<p>What makes a badge well-designed is that it communicate a bit of timely information in a punchy way. This is accomplished through consistency and contrast. Consistency helps users to recognize a badge by sticking with a standard look and position. Contrast helps users to notice a badge by choosing a color and shape that stands out from the content.</p>
<p><span id="more-6585"></span> Facebook is one example that achieves both consistency and contrast, though they have it relatively easy. Given the monochromatic context, nearly any splash of color will do.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/facebook.png" alt="" title="Facebook" width="600" height="40" class="aligncenter size-full wp-image-6693 paddedLarge" /></p>
<p>Apple and Netflix have a tougher job because their badges are applied to wildly varying content. In iOS, Apple overcomes this in two ways. First, they give the badge a drop shadow and border that contrasts with the badge itself, making it stand out whether it&#8217;s applied to an icon that&#8217;s dark, light, or nearly any combination of colors. Second, Apple offsets the badge to a position that&#8217;s outside the bounds of the icon. This alters the icon&#8217;s silhouette and, more importantly, creates a separation between metadata and object.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/iphone.png" alt="" title="iPhone" width="600" height="171" class="aligncenter size-full wp-image-6695 paddedLarge" /></p>
<p>Netflix does neither, and the result is that as you scan through their offerings a screenful at a time, the badges hardly stand out.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/netflix.png" alt="" title="Netflix" width="600" height="190" class="aligncenter size-full wp-image-6691 paddedLarge" /></p>
<p>A challenge faced by Netflix stems from the semantics of their badges. Instead of communicating a number or simple alert, they need to depict &#8220;New Episodes&#8221; and perhaps other meanings like &#8220;New to Netflix&#8221; and &#8220;Expiring Soon&#8221;, for which there aren&#8217;t standard symbols, yet<sup class='footnote'><a href='http://thomaspark.me/2012/01/better-badges-on-netflix/#fn-6585-1' id='fnref-6585-1' onclick='return fdfootnote_show(6585)'>1</a></sup>.</p>
<p>Netflix&#8217;s has an amazing track record, designing slick interfaces <a href="http://functionsource.com/post/netflix-feature" target="_blank">for over 400 different devices</a>. They can do much better with their badges.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/v8-bqaJBg9w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/01/better-badges-on-netflix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/01/better-badges-on-netflix/</feedburner:origLink></item>
		<item>
		<title>Kindle Touch Gestures</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/qBnLRt3fuVA/</link>
		<comments>http://thomaspark.me/2012/01/kindle-touch-gestures/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 14:43:23 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=6125</guid>
		<description><![CDATA[Here&#8217;s a quick guide to multitouch gestures on Kindle Touch, since Amazon doesn&#8217;t provide documentation and some commands are less than obvious. Gestures include taps, holds, swipes, and pinches. Let me know if there are &#8230; <a href="http://thomaspark.me/2012/01/kindle-touch-gestures/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a quick guide to multitouch gestures on <a href="http://www.amazon.com/Kindle-Touch-Wi-Fi-Ink-Display/dp/B005890G8Y/" target="_blank">Kindle Touch</a>, since Amazon doesn&#8217;t provide documentation and some commands are less than obvious. Gestures include taps, holds, swipes, and pinches. Let me know if there are any I&#8217;ve missed.</p>
<p><span id="more-6125"></span><br />
<h3>Tap</h3>
<p>Kindle Touch uses a system of invisible tapzones called EasyReach.<br />
<img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/kindletouch-zones.png" alt="" title="Zones" width="600" height="674" class="aligncenter size-full wp-image-6139" /></p>
<p><strong>Tap right zone:</strong> Next page<br />
<strong>Tap left zone:</strong> Previous page<br />
<strong>Tap top-right zone:</strong> Toggle bookmark<br />
<strong>Tap top zone:</strong> Book options<br />
<a href="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/kindletouch-options.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/kindletouch-options.png" alt="" title="Options" width="600" height="674" class="aligncenter size-full wp-image-6137" /></a></p>
<h3>Hold</h3>
<p><strong>Hold:</strong> Dictionary + text options<br />
<img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/kindletouch-hold.png" alt="" title="Hold" width="600" height="674" class="aligncenter size-full wp-image-6134" /><br />
<strong>Hold and drag:</strong> Text options<br />
<img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/kindletouch-holddrag.png" alt="" title="Hold and drag" width="600" height="674" class="aligncenter size-full wp-image-6136" /></p>
<h3>Swipe</h3>
<p><strong>Swipe right:</strong> Next page<br />
<strong>Swipe left:</strong> Previous page<br />
<strong>Swipe up:</strong> Next chapter<br />
<strong>Swipe down:</strong> Previous chapter</p>
<h3>Pinch</h3>
<p><strong>Pinch together:</strong> Decrease font size<br />
<strong>Pinch apart:</strong> Increase font size<br />
<img src="http://thomaspark.me/wordpress/wp-content/uploads/2012/01/kindletouch-pinch.png" alt="" title="Pinch" width="600" height="674" class="aligncenter size-full wp-image-6138" /></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/qBnLRt3fuVA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/01/kindle-touch-gestures/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/01/kindle-touch-gestures/</feedburner:origLink></item>
		<item>
		<title>99designs and Eight Values of Identity</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/0yMEDWwIsgY/</link>
		<comments>http://thomaspark.me/2012/01/99designs-and-eight-values-of-identity/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 15:09:47 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Data]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=5717</guid>
		<description><![CDATA[Over at 99designs, businesses can hold contests to get logos designed for them. To provide better direction to identity designers than &#8220;I&#8217;ll know it when I see it&#8221; or &#8220;just make it pop&#8221;, each business &#8230; <a href="http://thomaspark.me/2012/01/99designs-and-eight-values-of-identity/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Over at <a href="http://99designs.com/" target="_blank">99designs</a>, businesses can hold contests to get logos designed for them. To provide better direction to identity designers than &#8220;I&#8217;ll know it when I see it&#8221; or &#8220;just make it pop&#8221;, each business is asked to create a design brief that includes a description of their business, the type of logo they want, and the values that their logo should communicate.</p>
<p><span id="more-5717"></span> The values are dubbed <strong>manliness, maturity, bling factor, ageness, fun, volume, complexity, and in-your-faceness</strong> in the source code, and they&#8217;re input via sliders on an integer scale from -5 to +5. </p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/sliders.png" alt="" title="Sliders" width="463" height="434" class="aligncenter size-full wp-image-5821" /></p>
<p>The sliders seem like a good idea, but I began to wonder about them. To what extent do contest holders really use them? What values do businesses wish to communicate? Are they useful to designers?</p>
<p>All of the design briefs on 99designs are publicly accessible, so naturally the research side of me took hold. To get at the questions above, I ended up scraping slider data for the last 999 contests<sup class='footnote'><a href='http://thomaspark.me/2012/01/99designs-and-eight-values-of-identity/#fn-5717-1' id='fnref-5717-1' onclick='return fdfootnote_show(5717)'>1</a></sup>.</p>
<h3>To what extent are the sliders used?</h3>
<p>I&#8217;m starting with the assumption that a slider left at 0 is unused, in the sense that the contest holder doesn&#8217;t particularly care either way about that value. The table below tallies up the number of sliders used in each contest.</p>
<table>
<tr>
<th>Sliders Used</th>
<th>Percent of Contests</th>
</tr>
<tr>
<td>8</td>
<td>9%</td>
</tr>
<tr>
<td>7</td>
<td>15%</td>
</tr>
<tr>
<td>6</td>
<td>21%</td>
</tr>
<tr>
<td>5</td>
<td>20%</td>
</tr>
<tr>
<td>4</td>
<td>13%</td>
</tr>
<tr>
<td>3</td>
<td>9%</td>
</tr>
<tr>
<td>2</td>
<td>6%</td>
</tr>
<tr>
<td>1</td>
<td>2%</td>
</tr>
<tr>
<td>0</td>
<td>5%</td>
</tr>
</table>
<p>It turns out that in 95% of contests, at least one slider is used. However, the modus operandi seems to be to pick a few values to emphasize, while skipping over the rest. Only in 9% of cases are all eight sliders used. On average, it&#8217;s closer to five sliders.</p>
<h3>Is there variety in the responses?</h3>
<p>Even if contest holders are using the sliders, it&#8217;s not very informative if they&#8217;re all using them to give identical responses. Here&#8217;s a breakdown of how each slider is used by percent and standard deviation, which gives a taste of how diverse the responses are.</p>
<table>
<tr>
<th></th>
<th>-5</th>
<th>-4</th>
<th>-3</th>
<th>-2</th>
<th>-1</th>
<th>0</th>
<th>+1</th>
<th>+2</th>
<th>+3</th>
<th>+4</th>
<th>+5</th>
<th>Mean</th>
<th>SD</th>
</tr>
<tr>
<th>Manliness</th>
<td>2</td>
<td>2</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>49</td>
<td>7</td>
<td>12</td>
<td>7</td>
<td>2</td>
<td>4</td>
<td>+0.37</td>
<td>1.97</td>
</tr>
<tr>
<th>Maturity</th>
<td>2</td>
<td>2</td>
<td>8</td>
<td>12</td>
<td>12</td>
<td>35</td>
<td>9</td>
<td>10</td>
<td>7</td>
<td>2</td>
<td>2</td>
<td> -0.13</td>
<td>1.97</td>
</tr>
<tr>
<th>Bling factor</th>
<td>6</td>
<td>5</td>
<td>10</td>
<td>12</td>
<td>11</td>
<td>39</td>
<td>6</td>
<td>6</td>
<td>4</td>
<td>1</td>
<td>1</td>
<td>-0.77</td>
<td>2.02</td>
</tr>
<tr>
<th>Ageness</th>
<td>9</td>
<td>8</td>
<td>18</td>
<td>19</td>
<td>9</td>
<td>26</td>
<td>3</td>
<td>3</td>
<td>2</td>
<td>1</td>
<td>1</td>
<td>-1.57</td>
<td>2.07</td>
</tr>
<tr>
<th>Fun</th>
<td>3</td>
<td>3</td>
<td>7</td>
<td>12</td>
<td>12</td>
<td>27</td>
<td>9</td>
<td>12</td>
<td>9</td>
<td>3</td>
<td>3</td>
<td>+0.04</td>
<td>2.25</td>
</tr>
<tr>
<th>Volume</th>
<td>2</td>
<td>2</td>
<td>6</td>
<td>12</td>
<td>12</td>
<td>50</td>
<td>6</td>
<td>7</td>
<td>4</td>
<td>1</td>
<td>1</td>
<td>-0.32</td>
<td>1.65</td>
</tr>
<tr>
<th>Complexity</th>
<td>5</td>
<td>6</td>
<td>17</td>
<td>23</td>
<td>11</td>
<td>29</td>
<td>3</td>
<td>3</td>
<td>2</td>
<td>1</td>
<td>1</td>
<td>-1.38</td>
<td>1.83</td>
</tr>
<tr>
<th>In-your-faceness</th>
<td>0</td>
<td>1</td>
<td>3</td>
<td>6</td>
<td>6</td>
<td>49</td>
<td>10</td>
<td>13</td>
<td>8</td>
<td>2</td>
<td>3</td>
<td>+0.50</td>
<td>1.69</td>
</tr>
</table>
<p>Far and away, 0 is the most popular choice for every value, reaching 50% for a few. None too surprising given that it&#8217;s both the neutral answer and the default. Still, there is a fair deal of variation.</p>
<p>Some of the values are heavily skewed (e.g., ageness, complexity). This could be a matter of terminology (&#8220;complex&#8221; might hold a more negative connotation than a term like &#8220;detailed&#8221;), or simply the prevailing trends.</p>
<h3>How do values relate to one another?</h3>
<p>To explore correlation between values, here&#8217;s a table of pairwise comparisons.</p>
<table>
<tr>
<th></th>
<th>Maturity</th>
<th>Bling</th>
<th>Ageness</th>
<th>Fun</th>
<th>Volume</th>
<th>Complexity</th>
<th>Faceness</th>
</tr>
<tr>
<th>Manliness</th>
<td>.201</td>
<td>.050</td>
<td>-.044</td>
<td>.312</td>
<td>-.076</td>
<td>.083</td>
<td>.091</td>
</tr>
<tr>
<th>Maturity</th>
<td></td>
<td>-.108</td>
<td>.278</td>
<td>.475</td>
<td>.165</td>
<td>.142</td>
<td>-.034</td>
</tr>
<tr>
<th>Bling factor</th>
<td></td>
<td></td>
<td>.027</td>
<td>-.136</td>
<td>-.092</td>
<td>-.087</td>
<td>.133</td>
</tr>
<tr>
<th>Ageness</th>
<td></td>
<td></td>
<td></td>
<td>.135</td>
<td>.239</td>
<td>.098</td>
<td>-.145</td>
</tr>
<tr>
<th>Fun</th>
<td></td>
<td></td>
<td></td>
<td></td>
<td>.276</td>
<td>.123</td>
<td>-.065</td>
</tr>
<tr>
<th>Volume</th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>-.107</td>
<td>-.407</td>
</tr>
<tr>
<th>Complexity</th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>.110</td>
</tr>
</table>
<p>As you can see, fun tends to be associated with youth and masculinity. Volume &amp; in-your-faceness also have substantial overlap.</p>
<p>If a value needed to be made redundant, a strong case could be made for either volume or in-your-faceness, given all of the data above.</p>
<h3>What else?</h3>
<p>Of course looking at how contest holders use the sliders is only half of the conversation. The other half is to ask as designers: Do you actually pay attention to these sliders? Is it only when a response is at an extreme? Which values contribute most to your practice? Would any other values would be useful to you?</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/0yMEDWwIsgY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2012/01/99designs-and-eight-values-of-identity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2012/01/99designs-and-eight-values-of-identity/</feedburner:origLink></item>
		<item>
		<title>Density Control</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/WVKdaUSWzzs/</link>
		<comments>http://thomaspark.me/2011/12/density-control/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 17:43:06 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=5484</guid>
		<description><![CDATA[Google has been making sweeping changes to the look of their products. One of these changes is the addition of density control. With a couple of clicks, users of Gmail and Reader can now switch &#8230; <a href="http://thomaspark.me/2011/12/density-control/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Google has been making <a href="http://googleblog.blogspot.com/2011/11/gmails-new-look.html" target="_blank">sweeping</a> <a href="http://googlereader.blogspot.com/2011/10/new-in-reader-fresh-design-and-google.html" target="_blank">changes</a> to the look of their products. One of these changes is the addition of <strong>density control</strong>. With a couple of clicks, users of Gmail and Reader can now switch between a <strong>comfortable</strong>, <strong>cozy</strong>, and <strong>compact</strong> display.</p>
<p><span id="more-5484"></span> It may seem like a totally unremarkable feature. But here&#8217;s why Google deserves credit for it.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/densitycontrol.gif" alt="" title="Comfortable, cozy, compact" width="600" height="340" class="aligncenter size-full wp-image-5589" /></p>
<h3>It&#8217;s Uncommon</h3>
<p>Density control is surprisingly rare. It&#8217;s not to be confused with <a href="http://www.codinghorror.com/blog/2009/01/the-two-types-of-browser-zoom.html" target="_blank">zoom</a>, which is found in all sorts of applications from web browsers to Office. Zoom enlarges everything, whereas display density changes only the spacing between things. In Reader for instance, comfortable, cozy, and compact all use a 13-pixel font, but give items a height of 37, 31, and 27 pixels respectively</p>
<p>Only spatial file managers come to mind as another example. Though I&#8217;m sure there&#8217;s a laundry list of others I&#8217;ve forgotten.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/finder.png" alt="" title="Mac Finder" width="600" height="416" class="aligncenter size-full wp-image-5636" /></p>
<h3>It&#8217;s Useful</h3>
<p>The old Gmail and Reader were most like the compact setting, packing lots of information into the available space. Yet it&#8217;s apparent that Google&#8217;s designers now prefer comfortable as the default for desktop resolutions.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/oldreader.png" alt="" title="Old Reader" width="570" height="419" class="aligncenter size-full wp-image-5678" /></p>
<p>Many power users want <a href="http://www.codinghorror.com/blog/2006/07/information-density-and-dr-bronner.html" target="_blank">information density</a> at all costs, while others want the greater accessibility or readability or aesthetics that spacing brings. People can be extremely sensitive to these preferences, especially when dealing with changes to a familiar interface (the Twitter iPhone client is <a href="http://www.marco.org/2011/12/09/twitter-client-screenshots" target="_blank">a recent case of this</a>). And this is where density control comes in.</p>
<p>Instead of a temporary measure meant to appease a grumbling user base, I hope this is a sign of what&#8217;s to come in other Google products. Users of Search, Docs, and News could also benefit from density control. In fact, it&#8217;s something we should see more of in general, particularly for information-dense applications.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/WVKdaUSWzzs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/12/density-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/12/density-control/</feedburner:origLink></item>
		<item>
		<title>Touch on Kindle</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/I6uWW-OuJpU/</link>
		<comments>http://thomaspark.me/2011/12/touch-on-kindle/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:44:53 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=5224</guid>
		<description><![CDATA[I was lucky enough to receive a Kindle Touch as an early Christmas present. To be clear, I love it as a long-form reading device, from its weight to its battery life to its integration &#8230; <a href="http://thomaspark.me/2011/12/touch-on-kindle/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>I was lucky enough to receive a <a href="http://www.amazon.com/Kindle-Touch-Wi-Fi-Ink-Display/dp/B005890G8Y/" target="_blank">Kindle Touch</a> as an early Christmas present. To be clear, I love it as a long-form reading device, from its weight to its battery life to its integration with Amazon&#8217;s ecosystem. It&#8217;s already begun to replace my next shelf of books.</p>
<p>With that said, here&#8217;s my quick review of it so far, with a few ways Amazon could make it that much better.</p>
<p><span id="more-5224"></span><br />
<h4>Touch</h4>
<p>Most smartphones and tablets rely on capacitive sensors embedded directly in the display, but the Kindle Touch has infrared sensors set in the bezel. Whereas capacitive touch can distinguish skin from other forms of contact, these infrared sensors detect nearly anything as a touch event. The upside is that you can use the Kindle Touch while wearing gloves or with any pointy thing as a stylus. The downside is that other materials like the fabric of your sleeve can accidentally trigger it. These are more side effects though, of Amazon using infrared sensors to preserve the quality of the E Ink display.</p>
<p>The Kindle Touch touts a range of multitouch gestures. Taps are used for page turning, item selection, and the soft keyboard. Swipes can also be used to turn pages, and to scroll elements that extend offscreen. Pinch allows you to adjust text size and zoom into a webpage. In terms of recognizing these gestures as input, it&#8217;s fairly reliable and precise. </p>
<p>One thing that has made iOS so successful is its use of direct manipulation &mdash; that is, fine-grained (essentially continuous) gesture input, mapped closely to the system&#8217;s feedback, which models some physical phenomenon. Apple was able to create the illusion of manipulating elements as if they were physical, and they accomplished it having iOS be extremely responsive to the user&#8217;s gestures.</p>
<p>However, the Kindle&#8217;s E Ink display, you may be aware, is slow. Refresh rates measure in the hundreds of milliseconds, compared to 17 milliseconds for devices like the iPhone and iPad. So with the Kindle Touch, Amazon has wisely used multitouch gestures more to invoke discrete commands than for continuous direct manipulation. What this means is that a swipe, no matter how fast or far, moves the carousel of books three places; each pinch enlarges text by one size. The exception is the web browser, and there&#8217;s a reason that&#8217;s still experimental.</p>
<h4>Form Factor</h4>
<p>My first thought upon opening the package was that the Kindle Touch is even smaller than I imagined. With each successive model, Amazon has shrunk the form factor down while keeping the 6-inch display intact. It&#8217;s gone from 8.0 &times; 5.3 inches in the first two generations, to 7.5 &times; 4.8 in the Kindle 3, to 6.8 &times; 4.7 in the Kindle Touch (Kindle 4 is smaller yet).</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/sidebyside.jpg" alt="" title="Kindle 2, Kindle Touch, paperback" width="600" height="300" class="aligncenter size-full wp-image-5449" /></p>
<p>While greater portability is nice, it&#8217;s past the point of diminishing returns. I&#8217;d like to see the next version of the Kindle Touch return to the original form factor &ndash; with display enlarged &ndash; making it roughly the size of a large paperback. Reading books would be made more comfortable, navigating the library and store even more so. </p>
<h4>Home Button</h4>
<p>Setup is dead simple, but afterwards I got stuck for longer than I care to admit on how to access my library. I eventually realized that what I had assumed to be a speaker was no speaker at all.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/homebutton.jpg" alt="" title="Not a speaker" width="600" height="175" class="aligncenter size-full wp-image-5417" /></p>
<p>A silly oversight on my part to be sure. But as bad as it is to make buttons non-obvious in software, it&#8217;s that much worse in hardware. TV makers, are you listening?</p>
<h4>Book Covers</h4>
<p>I was disappointed to learn that the library can&#8217;t display book covers. I don&#8217;t know where I got that idea from.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/kindletouch.jpg" alt="" title="Kindle Touch with Ribbon" width="490" height="484" class="aligncenter size-full wp-image-5420" /></p>
<p>Oh, right. Amazon, please add this option for when we&#8217;re using your books, not just when you&#8217;re selling them to us.</p>
<h4>X-Ray</h4>
<p>One of the value-added features the Kindle Touch offers is <a href="http://blog.laptopmag.com/video-amazon-kindle-touchs-x-ray-reference-tool-makes-ereading-easier" target="_blank">X-Ray</a>. Amazon analyzes each book and presents key people, places, and things, background information on them, and where they show up in the book.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/xray.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/12/xray-1024x655.png" alt="" title="X-Ray" width="555" height="355" class="aligncenter size-large wp-image-5431" /></a></p>
<p>Not all books support it yet, but Amazon doesn&#8217;t tell you which do and don&#8217;t. (As of this writing, <a href="http://www.amazon.com/Man-Who-Mistook-Wife-ebook/dp/B003MQNI6W/" target="_blank">The Man Who Mistook His Wife for a Hat</a> does, <a href="http://www.amazon.com/Consider-Lobster-Other-Essays-ebook/dp/B000S1LVHW/" target="_blank">Consider the Lobster</a> does not). Under the &#8220;Text-to-Speech&#8221; bullet point seems as good a spot as any.</p>
<h4>The Other Kindle</h4>
<p>Overall, I&#8217;m highly satisfied with the Kindle Touch. But if you&#8217;re in the market for an e-reader, the Kindle 4 is also <a href="http://www.marco.org/2011/12/02/kindle-touch-vs-nook-simple-touch-kobo-touch-kindle-4" target="_blank">worthy of consideration</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/I6uWW-OuJpU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/12/touch-on-kindle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/12/touch-on-kindle/</feedburner:origLink></item>
		<item>
		<title>Every Apple Storefront Ever</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/ukkxtCbjK9Q/</link>
		<comments>http://thomaspark.me/2011/11/every-apple-storefront/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 02:27:42 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=4930</guid>
		<description><![CDATA[Way back in August of 2001, some good friends and I took a road trip down to Virginia to attend a concert. Unfortunately the rains came, the venue got flooded, and the concert was cancelled. &#8230; <a href="http://thomaspark.me/2011/11/every-apple-storefront/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Way back in August of 2001, some good friends and I took a road trip down to Virginia to attend a concert. Unfortunately the rains came, the venue got flooded, and <a href="http://voices.washingtonpost.com/postrock/2008/05/radiohead_visits_dc_mother_nat.html" target="_blank">the concert was cancelled</a>. Disappointing, but as something of a concession prize, I got to check out the very first brick &#038; mortar Apple Store, which had opened in Tysons Corner just a few weeks earlier.</p>
<p><span id="more-4930"></span> At the time, most analysts considered Apple&#8217;s fledgling retail initiative to be <a href="http://www.businessweek.com/magazine/content/01_21/b3733059.htm" target="_blank">doomed</a>. But though Tysons Corner seemed like a modest start, it was a blueprint for big things to come. 357 stores and counting later, Apple is <a href="http://retailsails.com/2011/08/23/retailsails-exclusive-ranking-u-s-chains-by-retail-sales-per-square-foot/" target="_blank">tops in sales per square foot</a>, and they did it by applying many of the same principles as they do to their products: natural materials, understated aesthetics, and <a href="http://www.macrumors.com/2011/11/08/apple-store-app-for-ios-updated-to-support-new-self-checkout-system-for-retail-stores/" target="_blank">innovative processes</a>.</p>
<p>Anyway, one thing I wanted to do was go back and see how Apple storefronts have evolved over the past decade. I couldn&#8217;t find anywhere to do this easily, so I decided to create a gallery myself. Check it out here:</p>
<blockquote><p><a href="http://applestorefronts.appspot.com/" target="_blank" onclick="pageTracker._link(this.href); return false;">http://applestorefronts.appspot.com/</a></p></blockquote>
<p>Scanning the gallery, you can see that Apple follows certain conventions, but isn&#8217;t shy about breaking them. They&#8217;ve tweaked things here and there, and are quite audacious with their flagship locations. (By the way, is &#8220;flagship&#8221; a formal designation, and is there a list of them somewhere?)</p>
<p>What are your most or least favorites? What do you love or hate about them? Do you notice any trends? What do you think is Apple&#8217;s next step?</p>
<h4>Notes</h4>
<p>Images collected from Apple.com with <a href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">Beautiful Soup</a>. Opening dates courtesy of <a href="http://www.ifoapplestore.com/db/" target="_blank">ifoAppleStore</a>. The gallery uses <a href="http://www.appelsiini.net/projects/lazyload" target="_blank">Lazy Load</a> by Mika Tuupola and is hosted on <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/ukkxtCbjK9Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/11/every-apple-storefront/feed/</wfw:commentRss>
		<slash:comments>60</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/11/every-apple-storefront/</feedburner:origLink></item>
		<item>
		<title>Share in Google Reader Again</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/kDHrjkWKDUE/</link>
		<comments>http://thomaspark.me/2011/11/share-in-google-reader-again/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 16:06:14 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=4799</guid>
		<description><![CDATA[Despite its name, Google Reader had up until now three levels of use: Reader: read RSS items Linkroll: share RSS items with friends Social network: converse on these shared RSS items with these friends What &#8230; <a href="http://thomaspark.me/2011/11/share-in-google-reader-again/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Despite its name, Google Reader had up until now three levels of use:</p>
<ol>
<li>Reader: read RSS items</li>
<li>Linkroll: share RSS items with friends</li>
<li>Social network: converse on these shared RSS items with these friends</li>
</ol>
<p>What was nice about this is that you could exchange and comment on posts within the flow of reading them.</p>
<p><span id="more-4799"></span> Unfortunately, Google <a href="http://googlereader.blogspot.com/2011/10/new-in-reader-fresh-design-and-google.html" target="_blank">has cut the social features from Reader</a> in an attempt to funnel users to Google Plus. I&#8217;m only annoyed, but it&#8217;s left some people <a href="http://kirbybits.wordpress.com/2011/10/21/wherein-i-try-to-explain-why-google-reader-is-the-best-social-network-created-so-far/" target="_blank">really upset</a>. Here&#8217;s a way to restore some of this functionality, until a suitable replacement <a href="http://hivemined.org/" target="_blank">comes along</a>.</p>
<h4>A Workaround</h4>
<p>First, you&#8217;ll need an account with a bookmarking service. <a href="http://delicious.com/" target="_blank">Delicious</a> is free, but <a href="http://pinboard.in/" target="_blank">Pinboard</a> is well worth supporting. After you&#8217;ve signed up, go into &#8220;Reader settings&#8221; in the top-right corner, click &#8220;Send To&#8221;, and &#8220;Create a custom link&#8221; at the bottom. Add one of these as your URL:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://delicious.com/save?url=${url}&amp;title=${title}&amp;notes=${source}</div></div>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">https://pinboard.in/add?&amp;url=${url}&amp;title=${title}&amp;description=${source}<br />
&amp;tags=reader</div></div>
<p>If you want to go all in, name it &#8220;Share in Reader&#8221; and give it this icon URL:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://www.google.com/reader/ui/favicon.ico</div></div>
<p>Get back to Reader and now you&#8217;ll have a familiar &#8220;Share in Reader&#8221; option at the bottom of each article. When you share something, there&#8217;s a field to enter comments, although two-way conversation isn&#8217;t possible.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/11/shareinreader.png" alt="" title="Share in Reader" width="555" height="243" class="aligncenter size-full wp-image-4893" /></p>
<p>You can also use bookmarklets to share any page you happen to visit, just like old times. Drag <a href="javascript:(function(){f='http://www.delicious.com/save?url='+encodeURIComponent(window.location.href)+'&#038;title='+encodeURIComponent(document.title)+'&#038;notes='+encodeURIComponent(''+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text))+'&#038;v=6&#038;';a=function(){if(!window.open(f+'noui=1&#038;jump=doclose','deliciousuiv6','location=1,links=0,scrollbars=0,toolbar=0,width=550,height=585'))location.href=f+'jump=yes'};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})()"">Delicious</a> or <a href="javascript:q=location.href;if(document.getSelection)%7Bd=document.getSelection();%7Delse%7Bd='';%7D;p=document.title;void(open('https://pinboard.in/add?url='+encodeURIComponent(q)+'&#038;description='+encodeURIComponent(d)+'&#038;title='+encodeURIComponent(p)+'&#038;tags=reader','Pinboard','toolbar=no,width=700,height=350'));">Pinboard</a> into your bookmark bar.</p>
<p>Give your friends your new feed, which will look like one of the following:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://delicious.com/v2/rss/username</div></div>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://feeds.pinboard.in/rss/u:username/t:reader</div></div>
<p>If you want to keep your shared links from being discoverable, you can dig up a private feed link for these services as well.</p>
<p>Have your friends create their own, store them in a &#8220;People you follow&#8221; folder, and you&#8217;re back to good.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/11/peopleyoufollow.png" alt="" title="People You Follow" width="264" height="230" class="aligncenter size-full wp-image-4895" /></p>
<p>A downside of this is that it can take an hour or two for the feeds to refresh. But if you want to resist the will of a mighty company like Google, while continuing to use their service, it&#8217;s going to be an uphill battle.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/kDHrjkWKDUE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/11/share-in-google-reader-again/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/11/share-in-google-reader-again/</feedburner:origLink></item>
		<item>
		<title>In Portrait or Landscape</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/3dFk2uNRudE/</link>
		<comments>http://thomaspark.me/2011/10/in-portrait-or-landscape/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 18:28:37 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=4593</guid>
		<description><![CDATA[Yesterday, Microsoft&#8217;s Steven Sinofsky responded to chatter about how Windows 8, in its grand debut, was demoed almost exclusively in landscape mode. In the post, he affirms Windows 8&#8242;s agnosticism. Our point of view is &#8230; <a href="http://thomaspark.me/2011/10/in-portrait-or-landscape/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Yesterday, Microsoft&#8217;s Steven Sinofsky <a href="http://blogs.msdn.com/b/b8/archive/2011/10/20/optimizing-for-both-landscape-and-portrait.aspx" target="_blank">responded</a> to chatter about how Windows 8, in its grand debut, was demoed almost exclusively in landscape mode. In the post, he affirms Windows 8&#8242;s agnosticism.</p>
<p><span id="more-4593"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/windows-8-tablet.jpg" alt="" title="Windows 8 Tablet" width="595" height="389" class="aligncenter size-full wp-image-4703" /></p>
<blockquote><p>Our point of view is that both portrait and landscape orientations are important, and experiences can be great in either orientation. Rather than picking a posture and orientation for optimization, we designed an experience that makes sense regardless of how the device is held, one that feels tailored for the app and its content.</p></blockquote>
<p>Ignoring that the <a href="http://thisismynext.com/2011/09/13/windows-8-samsung-tablet-leak/" target="_blank">first Windows 8 tablet from Samsung</a> has its hardware button positioned to make landscape the default, and the packaging to reflect that (<a href="http://www.apple.com/ipad/built-in-apps/" target="_blank">in contrast to the iPad</a>), Sinofsky&#8217;s response still rings true. <a href="http://brooksreview.net/2011/09/tablet-power/" target="_blank">This informal survey</a> from Ben Brooks further underscores his point.</p>
<p>This naturally leads to questions about when and why people might favor one orientation over the other. Most users probably hold their tablets in landscape to watch videos and in portrait to read long-form text. But what about for all of the other ways tablets can be used?</p>
<h3>Some Stats</h3>
<p>Since I&#8217;m not privy to data that might answer this, I thought an interesting proxy might be to look at how apps are presented in the App Store. Do apps tend to feature screenshots in one particular orientation? Are there patterns among certain classes of apps? This reveals a bit about how apps are designed to be used or how the developers idealize it.</p>
<p>I went through the top paid iPad apps, as well as the top 25 for each App Store category, and classified each into one of five categories: all of the screenshots are portrait, or landscape; most (all but one) are portrait, or landscape; and they&#8217;re about even (more than one of each).</p>
<p>Here&#8217;s how the 200 top paid apps look.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/topapps.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/topapps-1024x192.png" alt="" title="Top Paid iPad Apps" width="595" height="111" class="aligncenter size-large wp-image-4633" /></a></p>
<p>Surprisingly, only 21 percent show off their app in both orientations.</p>
<p>Despite the primacy of portrait in Apple&#8217;s iPad marketing, the majority of top paid apps use landscape in theirs, at least within the App Store. That&#8217;s no guarantee of course that this is how people spend most of their <em>time</em> on their iPads, using these and other apps.</p>
<p>Not all categories are represented equally in top paid apps, which happens to be extremely game heavy. By looking at each App Store category individually, a better picture emerges of the diverse ways that iPads are held and used.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/categories.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/categories-1024x658.png" alt="" title="Orientation by iPad App Categories" width="595" height="382" class="aligncenter size-large wp-image-4635" /></a></p>
<p>Platforms today are recognizing that great user experiences have the potential to be created in either portrait or landscape, and this is certainly an important first step. But this graph renews questions about when and why developers choose one orientation over the other, and what opportunities there are for both new and existing apps to make better use of the available space, however the tablet is held.</p>
<p>Given how only 21 percent of iPad apps show themselves off as fluid between landscape and orientation, one wonders if Windows 8 developers will be up to the task of building apps in both orientations, plus <a href="http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-43-metablogapi/1261.Windows_2D00_in_2D00_landscape_2D00_mode_5F00_636279EA.png" target="_blank">the snap and fill views</a>, for <a href="http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-43-metablogapi/5875.Chart_2D002D002D00_Windows_2D00_7_2D00_screen_2D00_resolutions_5F00_3E64B971.png" target="_blank">so many resolutions and aspect ratios</a> &mdash; and doing it well.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/3dFk2uNRudE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/10/in-portrait-or-landscape/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/10/in-portrait-or-landscape/</feedburner:origLink></item>
		<item>
		<title>User Research Gone Astray</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/SgUNgdcHBnA/</link>
		<comments>http://thomaspark.me/2011/10/user-research-gone-astray/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 15:08:02 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=4413</guid>
		<description><![CDATA[The Building Windows 8 blog offers some fascinating insight into Microsoft&#8217;s research and design processes. Take the recent post on improving Windows Explorer. It begins with a discussion on how Windows Explorer is used today. &#8230; <a href="http://thomaspark.me/2011/10/user-research-gone-astray/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>The <a href="http://blogs.msdn.com/b/b8/" target="_blank">Building Windows 8 blog</a> offers some fascinating insight into Microsoft&#8217;s research and design processes. Take the recent post on <a href="http://blogs.msdn.com/b/b8/archive/2011/08/29/improvements-in-windows-explorer.aspx" target="_blank">improving Windows Explorer</a>.</p>
<p><span id="more-4413"></span> It begins with a discussion on how Windows Explorer is used today. Through telemetry data &mdash; &#8220;based on hundreds of millions of individuals opting in to provide anonymous data about product usage&#8221; &mdash; Microsoft finds that the top 10 commands make up 81.8% of use, and that these commands (e.g., paste, properties, copy) are primarily accessed through the contextual menu.</p>
<p>The development team combines this with customer feedback on the top requested features, and uses this to justify the changes from Windows 7&#8230;</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/win7-window.png" alt="" title="Windows 7 window" width="595" height="519" class="aligncenter size-full wp-image-4438" /></p>
<p>&#8230;to the design below.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/win8-window.png" alt="" title="Windows 8 window" width="595" height="670" class="aligncenter size-full wp-image-4430" /></p>
<p>It seems that essentially, every single command that customers have used or requested has been moved into a <a href="http://en.wikipedia.org/wiki/Ribbon_(computing)" target="_blank">ribbon</a> or wedged into some corner of the chrome. And many are rightfully <a href="http://seldo.tumblr.com/post/9549775746/this-is-genuinely-microsofts-idea-of-a" target="_blank">lambasting it</a>.</p>
<p>But, you might protest, they did research! With users! And got a ton of data! So how did it go wrong?</p>
<h3>The IROP Keyboard</h3>
<p>By focusing user research on low-level operations with the old system, and using that as the starting point for the redesign, you end up merely resizing, rearranging, and removing parts of the interface. You don&#8217;t make the quantum leap, and you sometimes make things worse.</p>
<p>I&#8217;m reminded of a recent paper by Andreas Zeller, Thomas Zimmerman, and Christian Bird (the last two authors from Microsoft Research, ironically) titled <a href="http://thomas-zimmermann.com/publications/details/zeller-promise-2011/" target="_blank">Failure is a Four-Letter Word: A Satire in Empirical Research</a>.</p>
<p>In the paper, the authors collect keystroke-level data in Eclipse and correlate it with programmers&#8217; errors. They find this data to be an excellent predictor, with the letters &#8220;i&#8221;, &#8220;r&#8221;, &#8220;o&#8221;, and &#8220;p&#8221; guilty of the strongest correlations. Based on these findings, they come up with a cheeky solution for reducing programmers&#8217; errors:</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/irop-keyboard.jpg" alt="" title="IROP Keyboard" width="595" height="226" class="aligncenter size-full wp-image-4494" /></p>
<p>The IROP keyboard addresses the data, quite directly. But it obviously misses the deeper problems.</p>
<h3>From Actions to Activities</h3>
<p><a href="http://www.jnd.org/dn.mss/human-centered_design_considered_harmful.html" target="_blank">In the vocabulary of Donald Norman</a>, operations combine to make actions, which make tasks, which make activities. According to this scheme, Microsoft has with their data looked at actions. The key is to start higher up this hierarchy, considering the activities users are engaged in and the goals they&#8217;re trying to achieve.</p>
<p>Windows Explorer is <a href="http://www.computerworld.com/s/article/print/9220157/A_deep_dive_into_Windows_8_Developer_Preview" target="_blank">gradually being sunset</a>, so they get some slack here. But I sure hope they aren&#8217;t being steered wrong elsewhere by their user research.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/SgUNgdcHBnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/10/user-research-gone-astray/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/10/user-research-gone-astray/</feedburner:origLink></item>
		<item>
		<title>Ghost Legs: Randomizing the Asian Way</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/HwJJE6NQ3Qw/</link>
		<comments>http://thomaspark.me/2011/10/ghost-legs-randomizing-the-asian-way/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 16:50:41 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=4273</guid>
		<description><![CDATA[I had a bunch of relatives from Korea visit over the summer, and naturally an arm wrestling tournament broke out. What I found most interesting though was how they set up the initial match-ups. They &#8230; <a href="http://thomaspark.me/2011/10/ghost-legs-randomizing-the-asian-way/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>I had a bunch of relatives from Korea visit over the summer, and naturally an arm wrestling tournament broke out. What I found most interesting though was how they set up the initial match-ups. They didn&#8217;t draw straws, pick names out of a hat, roll a die, or eeny meeny miny moe. Instead, they made a grid.</p>
<p><span id="more-4273"></span> I learned that this is a common way of randomizing things in Asia. In Korea it&#8217;s called 사다리, in China 畫鬼腳, and in Japan 阿弥陀籤. The Korean and Chinese translate to <a href="http://en.wikipedia.org/wiki/Ghost_Leg" target="_blank">ghost leg</a>, their poetic word for &#8220;ladder&#8221;.</p>
<p>How it works is this. You list the things you want to randomize at the top of your paper. You write the categories you want to randomly place them into at the bottom. Draw vertical lines connected each pair &mdash; these make up the &#8220;legs&#8221; of the ladder. Then randomly draw in &#8220;rungs&#8221;, or you can fold over the options to cover them up and have someone else do it. Once that&#8217;s done, follow each path down the ladder, taking every rung you reach. <a href="http://askakorean.blogspot.com/2010/12/how-do-you-climb-ladder.html" target="_blank">This post</a> gives a visual step-by-step of how it works, and <a href="http://www2.edc.org/makingmath/studentWork/amidaKuji/AmidaKujiByDavidSenft.pdf" target="_blank">this paper</a> offers a mathematical analysis.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/ghostlegs.png" alt="" title="Ghost Legs" width="500" height="450" class="aligncenter size-full wp-image-4590" /></p>
<p>What I decided to do was create an interactive web version of this. I started with an HTML table, which leads to a few benefits. Since a table is already a grid, it&#8217;s straightforward to style it using CSS. The image above shows the result.</p>
<p>Also, instead of dynamically creating the table, I made it so anyone can easily make their own table with labels and as many columns and rows as they like. Then by simply assigning it to the &#8220;ghostleg&#8221; class and copying over the JavaScript and CSS (which you&#8217;re welcome to do), they can have their own customized version. By using <code class="codecolorer html4strict railscasts"><span class="html4strict">thead</span></code> and <code class="codecolorer html4strict railscasts"><span class="html4strict">tfoot</span></code>, the section of the code to input all your labels is right at the top, not buried in the table markup.</p>
<p>I looped through each table row, counting the number of cells and picking a random place to draw a rung (or skip the row). Finally, a hover function was attached that highlights the path from each item to its random outcome.</p>
<p>Play around with <a href="http://thomaspark.me/project/ghostlegs/" target="_blank">Ghost Legs</a>, or have a look at the <a href="http://jsbin.com/ofoban/1/edit#javascript,html,live" target="_blank">code</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/HwJJE6NQ3Qw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/10/ghost-legs-randomizing-the-asian-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/10/ghost-legs-randomizing-the-asian-way/</feedburner:origLink></item>
		<item>
		<title>Fuzzy Circles in Google Plus</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/nKYgoDwbtm0/</link>
		<comments>http://thomaspark.me/2011/10/fuzzy-circles-in-google-plus/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 17:23:34 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=4083</guid>
		<description><![CDATA[The hallmark of Google Plus so far has been Circles. In contrast to Facebook where you&#8217;re either a friend or you&#8217;re not (until you put people into lists), Circles has you categorize people as friends, &#8230; <a href="http://thomaspark.me/2011/10/fuzzy-circles-in-google-plus/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>The hallmark of Google Plus so far has been Circles. In contrast to Facebook where you&#8217;re either a friend or you&#8217;re not (until you put people into lists), Circles has you categorize people as friends, family, coworkers, etc. right from the start. This compartmentalization is meant to make targeting specific audiences and managing privacy easier.</p>
<p><span id="more-4083"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/googleplus.png" alt="" title="Google Plus Circles" width="595" height="239" class="aligncenter size-full wp-image-4235" /></p>
<p>This sounds simple, and it is if your circles are static. But things start to get hazy when your circles have changing memberships.</p>
<p>Is posting to a circle like sending email? In this model, each message is sent off to everyone who&#8217;s in the group at that particular time. When you add someone to the group, they get access to messages sent only while they&#8217;re a member. When you remove them, they get to keep those messages but nothing more.</p>
<p>Or is it more like giving out keys to a locked diary? Facebook walls and protected Twitter feeds fall into this category. When you add someone to the group, they get access to all of the accumulated content up to that point, past and present. When you remove them, the system revokes their access to all content.</p>
<p>It turns out that when you add someone to a circle in Google Plus, they get access to all of the content that&#8217;s ever been posted to that circle, if not in their stream then by drilling into your activity. This kind of falls in line with the locked diary model. But unlike this model, removing someone from your circle does not revoke their access. Instead, a number of scenarios can play out.</p>
<p>Compare what you expect to happen in each of the following situations with what actually occurs.</p>
<ol>
<li>
<p><strong>You make a post to a circle, but realize you don&#8217;t want Alice, who&#8217;s in the circle, to see it. You quickly remove her from the circle.</strong></p>
<p>Google Plus indicates to you that Alice no longer has access to the post, but if it made it into her stream, she can continue viewing it! Alice can even see comments made by others after she was removed, though she cannot make comments herself or share it with others. What does and does not end up in a person&#8217;s stream is not entirely clear.</p>
</li>
<li>
<p><strong>You post to a circle, and Bob replies yet again with a drama-filled comment. You decide to remove him from the circle once and for all.</strong></p>
<p>Because Bob has commented, he now keeps full access to the post. In this case, Google Plus correctly indicates that he has access. He can continue adding comments to the post, and he can share it with others outside the circle by default. And on top of that, he can see subsequent comments made to the post.</p>
</li>
<li>
<p><strong>You posted some personal things to your circle, but that was awhile back. You add Carol, who you&#8217;ve just made friends with, to your circle. Unfortunately, she starts to act creepy and so you remove her.</strong></p>
<p>These old posts most likely did not make it into Carol&#8217;s stream. Even if she went into your profile&#8217;s activity and commented on them there, she will lose access to them. If the posts did make it into her stream though (which might be possible if they&#8217;re not that old and/or her stream is not that populated), she keeps access. You just have no way of knowing which case it is.</p>
</li>
</ol>
<p>Granted some of these are most certainly due to bugs, but this serves as a reminder that Circles are not as airtight as you might think.</p>
<p>And though not as farcical as <a href="http://upload.wikimedia.org/wikipedia/en/8/8b/Google_Wave.png" target="_blank">Wave</a>, the model Google has created here is still complex, confusing user expectations for how the system works and social norms for how it should be used.</p>
<p>This confusion will inevitably lead to gaffes. Even if these boil down to user error and not some technical failure, Google should not be entirely free from blame.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/nKYgoDwbtm0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/10/fuzzy-circles-in-google-plus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/10/fuzzy-circles-in-google-plus/</feedburner:origLink></item>
		<item>
		<title>Making Menus Escapable</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/AaJWBU6x-tM/</link>
		<comments>http://thomaspark.me/2011/10/making-menus-escapable/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 13:59:57 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=3823</guid>
		<description><![CDATA[A post on my impressions of Ubuntu 11 led to lots of thoughtful discussion here and over at Hacker News. The part that seemed to generate the most interest was my take on why certain &#8230; <a href="http://thomaspark.me/2011/10/making-menus-escapable/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>A post on <a href="http://thomaspark.me/2011/10/seven-minutes-in-ubuntu/">my impressions of Ubuntu 11</a> led to lots of thoughtful discussion here and <a target="_blank" href="http://news.ycombinator.com/item?id=3063156">over at Hacker News</a>. The part that seemed to generate the most interest was my take on why certain menus seemed so troublesome.</p>
<p><span id="more-3823"></span> And while I described the problem in some depth, I glazed over any solution. So here I am to expand a bit on how Unity&#8217;s menus, and menus in general, might be improved, once again applying the <strong>angle of escape</strong> concept and pulling examples from the Mac.</p>
<h3>Recap</h3>
<p>I observed that when trying to select a menu item in Ubuntu, it&#8217;s quite easy to accidentally trip another menu. Due to the aspect ratio of Ubuntu&#8217;s menus, which tend to be taller and thinner, their angles of escape are often smaller than their Mac counterparts. Highlighted yellow in the screenshot below, you get 65 degrees with the Apple menu, compared to 50 degrees with Ubuntu&#8217;s system menu. This difference seems to have a noticeable impact.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/system-menus-annotated.png" alt="" title="Mac OS X and Ubuntu system menus" width="595" height="310" class="aligncenter size-full wp-image-3726" /></p>
<p>Further, let&#8217;s assume that users have two tendencies: to target the text of a menu item more than the whitespace, and to move in a straight line to their target. I believe these are reasonable hypotheses, at least for novices who haven&#8217;t trained themselves out of this behavior yet. Then due to Ubuntu&#8217;s placement of the menu item text in the example above, the problem is only compounded.</p>
<h3>Resize the Menu</h3>
<p>So what can we do about this? A straightforward approach is to increase the width of the menu. This helps the menu both as a target (invoking <a href="http://particletree.com/features/visualizing-fittss-law/" target="_blank">Fitts&#8217; Law</a> again) and as a point of escape, a double win.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/clocks.png" alt="" title="Analog and Digital Time Menus on Mac" width="399" height="350" class="aligncenter size-full wp-image-3877" /></p>
<p>But while it helps visibility and targeting to a lesser degree, <strong>increasing the height of a menu actually hurts escapability</strong>. This is something to consider when comparing OS X&#8217;s 21 pixel menu bar to Ubuntu&#8217;s 23 pixels.</p>
<h3>Buffer Time and Space</h3>
<p>Since the &#8217;80s, both Apple and Microsoft have dealt with escapability in the context of hierarchical menus, each addressing it in their own way. If you were to treat hierarchical menus at face value, the user would have to steer carefully across the width of a menu item to avoid triggering a neighbor.</p>
<p>Microsoft&#8217;s solution was, and continues to be, to keep the submenu displayed for an extra split second, regardless of your actions. If you&#8217;re quick enough, you can get to the submenu taking any path you wish.</p>
<p>Apple&#8217;s solution in Mac OS was to <a href="http://www.quinn.echidna.id.au/Quinn/WWW/HISubtleties/HierarchicalMenus.html" target="_blank">widen the angle of escape to 90 degrees</a>, so that as long as your movement was more horizontal than vertical, the submenu would stay open. Bruce Tognazzini, the original drafter of Apple&#8217;s HIG, talks about both approaches <a href="http://www.asktog.com/columns/022DesignedToGiveFitts.html" target="_blank">here under question 6</a>.</p>
<p>This <a href="http://arstechnica.com/apple/reviews/1999/12/macos-x-dp2.ars/5" target="_blank">went away in the transition to OS X</a>, but has since returned in a smarter form. Now the angle of escape is based on the size of the submenu, as long as you maintain a certain speed. Ubuntu takes a similar approach, but none of the OSes apply it to the main menu bar.</p>
<p>In the image below, you can see how the na&iuml;ve, classic Mac OS, and Mac OS X approaches compare in their angles of escape.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/submenu.gif" alt="" title="Submenus" width="577" height="900" class="aligncenter size-full wp-image-3930" /></p>
<h3>Make the Menu Sticky</h3>
<p>Another approach is to make the menu sticky. Once clicked, it stays activated until you click elsewhere, maximizing the angle of escape. The tradeoff here is that it prevents you from performing the &#8220;piano slide&#8221; to scan multiple menus quickly. This makes it best suited for specialized menus.</p>
<p>Likely for technical reasons, third-party menu extras on the Mac take on this property, though Apple&#8217;s own menu extras do not. Apple&#8217;s Spotlight menu (which, it should be noted, is in the same position as Ubuntu&#8217;s system menu that started this whole discussion) quite intentionally gets the sticky treatment.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/menuextra1.png" alt="" title="Menu Extra on Mac" width="595" height="184" class="aligncenter size-full wp-image-3971" /></p>
<p>Ubuntu might find good use for this approach in the right half of their menu bar.</p>
<h3>Change the Target</h3>
<p>A final approach is to offer visual cues for staying within the angle of escape. This might be achieved by keeping the menu item area narrow, dropping wider items further down the list, or lengthening the text of shorter items to fill the space.</p>
<p>Strong highlighting, as found in OS X and Ubuntu, also encourages users to use the entire width of the menu item. While the highlighting in Windows 7 is more subtle, menu items are rendered as buttons on hover, similarly signaling that the whitespace can be clicked.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/startmenu.png" alt="" title="Windows 7 Start Menu" width="509" height="537" class="aligncenter size-full wp-image-3977" /></p>
<p>To wrap up, let&#8217;s take a look at the volume controls in Mac OS X, Windows 7, and Ubuntu below. On Mac and Windows, the control stays within the angle of escape (though it doesn&#8217;t matter on Windows because theirs is sticky). On Ubuntu though, it extends well beyond it. <a href="http://www.youtube.com/watch?v=lVUokjAlREs" target="_blank">This video</a> demonstrates the problem in motion.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/volumecontrols.png" alt="" title="Volume controls for Mac, Windows, and Ubuntu" width="526" height="362" class="aligncenter size-full wp-image-4066" /></p>
<p>The obvious solution is to make Ubuntu&#8217;s volume control vertical. But we don&#8217;t necessarily have to follow the convention of other OSes to make it usable. We could make the menu sticky. We could add a time or space buffer. We could reorder the menu items. We could resize the menu or slider control. Or we could do some combination of these.</p>
<p>Sure, this is all sweating the small stuff. But multiply that over a whole operating system, and that&#8217;s how you end up creating a great user experience.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/AaJWBU6x-tM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/10/making-menus-escapable/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/10/making-menus-escapable/</feedburner:origLink></item>
		<item>
		<title>Seven Minutes in Ubuntu</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/sJBtKJjSKH4/</link>
		<comments>http://thomaspark.me/2011/10/seven-minutes-in-ubuntu/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 14:10:47 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=3521</guid>
		<description><![CDATA[For a while now, I&#8217;ve been using my home machine with MAMP to develop a research prototype. But last week, I got my hands on a PC to use as a web server. Before I &#8230; <a href="http://thomaspark.me/2011/10/seven-minutes-in-ubuntu/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>For a while now, I&#8217;ve been using my home machine with <a href="http://www.mamp.info/en/mamp/index.html" target="_blank">MAMP</a> to develop a research prototype. But last week, I got my hands on a PC to use as a web server. Before I could get started on it though, I needed an operating system to install &mdash; ideally one that would get the job done with minimal setup and training on my part. After a bit of reading online, I chose <a href="http://www.ubuntu.com/ubuntu" target="_blank">Ubuntu</a>.</p>
<p><span id="more-3521"></span> <a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/ubuntu.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/ubuntu-thumbnail.png" alt="" title="Ubuntu" width="595" height="446" class="aligncenter size-full wp-image-4360" /></a></p>
<p>What follows are my first impressions of Ubuntu 11. And I mean my very first impressions, after using it for just a few minutes, taking on the persona of a lifetime Mac user.</p>
<p>And these impressions come from someone who&#8217;s used mostly Windows at work and Mac at home. Sure, there&#8217;s a sprinkling of Solaris, IRIX, and Linux mixed in there, but I haven&#8217;t used Ubuntu, and haven&#8217;t had to adjust to the changes that Unity brings (such as <a href="http://yokozar.org/blog/archives/194" target="_blank">moving the window controls</a>). So I&#8217;m just the user that Ubuntu is targetting.</p>
<p>I hope you find this perspective of interest, whether you&#8217;re curious about an alternative operating system, or are a seasoned Linux user, developer, or advocate who wants to see things through a fresh set of eyes.</p>
<h3>The Good</h3>
<p>My greatest concern was that I&#8217;d have to do a lot of installing and configuring before I could get anything meaningful done. All I wanted was a standard setup, and to not derail focus from my work.</p>
<p>Fortunately, Ubuntu presents a familiar interface and is ready to go right out of the box. It doesn&#8217;t take much nowadays given how many of our applications are web-based, and on Ubuntu, Firefox comes pre-installed (more on that later). Remote desktop is built-in, which made it a breeze to set up VNC with my Mac. Window management <a href="http://windows.microsoft.com/en-US/windows7/products/features/snap" target="_blank">a la Windows 7 Snap</a> was a nice surprise; this requires a third-party app on the Mac.</p>
<h3>The Bad</h3>
<p>Like Mac OS X, Ubuntu puts the active application&#8217;s name in the menu bar. In OS X, this contains a menu of application-level functions like About, Preferences, and Quit. In Ubuntu, this is a non-clickable region (highlighted red), despite being nestled among and pretty much indistinguishable from the clickable ones (highlighted green). There&#8217;s something jarring about clicking something expectantly and not having it respond.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/menubars-annotated.png" alt="" title="Ubuntu and Mac OS X menu bars" width="595" height="74" class="aligncenter size-full wp-image-3802" /></p>
<p>I can see that the designers are trying to establish a hierarchy here, from the Ubuntu menu (which aligns with the dock) to the active application to the application&#8217;s menus. Still, there should be a stronger visual indicator that the application name is not clickable. Or you could just turn it into a menu, <a href="http://cbtcafe.com/mactutorials/applicationswitcher/appswitcher.html" target="_blank">taking a page from Mac OS 9</a>.</p>
<p>You might have noticed that Ubuntu&#8217;s menu bar is more tightly packed than OS X&#8217;s. A problem here is that while trying to select an item from a drop-down menu, it&#8217;s easy to accidentally trip another menu. This is most problematic with the system menu in the top right corner.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/system-menus-annotated.png" alt="" title="Mac OS X and Ubuntu system menus" width="595" height="310" class="aligncenter size-full wp-image-3726" /></p>
<p>Mac OS X&#8217;s Apple menu gives you a target of 45 by 21 pixels, compared to Ubuntu&#8217;s 28 by 23 pixels. These areas are highlighted green above. But <a href="http://particletree.com/features/visualizing-fittss-law/" target="_blank">as Fitts&#8217; Law reminds us</a>, these corner targets are both effectively infinite in size.</p>
<p>More important than size is the <strong>angle of escape</strong> &mdash; the number of degrees you can move the cursor out without activating an adjacent menu. You get 65 degrees in OS X versus 50 degrees in Ubuntu, as highlighted yellow.</p>
<p>In fact, Ubuntu should have an even bigger angle than OS X. Due to the placement of the icon on the right and the left-justification of the menu items, you can&#8217;t travel in a straight line to click the first few pieces of text &mdash; this will activate the next menu. Instead, you have to perform a loop-de-loop. Widening the clickable area would help somewhat.</p>
<p>Now onto my next set of gripes, which center around managing new software. As I mentioned earlier, Firefox comes preinstalled. When I checked to see which version was installed, I was presented with the window below.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/mozilla-about.png" alt="" title="Firefox about window" width="595" height="362" class="aligncenter size-full wp-image-3715" /></p>
<p>Version 4.0 is several major bumps behind the other platforms, which are sitting at 7.0.1. Below that is the text &#8220;Mozilla Firefox for Ubuntu canonical &#8211; 1.0&#8243;. Is this the 1.0 canonical version of Mozilla Firefox for Ubuntu? Or Mozilla Firefox for Ubuntu canonical version 1.0? And how does that relate to version 4.0? Apparently, <a href="https://bugs.launchpad.net/ubuntu/+source/firefox-3.5/+bug/418203" target="_blank">I&#8217;m not the only one</a> who finds this confusing.</p>
<p>And worse yet, there is no obvious way to update. I&#8217;m still not clear on whether there&#8217;s a newer version available, and how to update if it&#8217;s the case.</p>
<p>Anyway, the main reason I opened Firefox was to install Google Chrome (sorry Mozilla!). Fortunately, the latest version of Chrome was available to download. Double-clicking the package doesn&#8217;t take you to a standalone installer, but to Ubuntu Software Center.</p>
<p>Here, software is listed at two level, technical items and what I presume to be applications. But what&#8217;s classified as each can be a surprise. In the application list are items like Input Method Switcher and Multimedia Systems Selector, things most would consider system extensions more so than apps. On the other hand, Google Chrome is listed in technical items with a nondescript icon and label, along with 1,303 other things. Can you spot it in the image below?</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/usc-chrome.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/10/usc-chrome.png" alt="" title="Ubuntu Software Center" width="595" height="361" class="aligncenter size-full wp-image-3762" /></a></p>
<p>After installing Chrome, the natural next step is to open it. Yet, there&#8217;s nowhere in Ubuntu Software Center to do this directly. Contrast this with Windows, where you&#8217;re asked if you want to start the program, or the new way in OS X, where an application installed from the Mac App store <a href="http://vimeo.com/18501598" target="_blank">jumps right into your dock</a>.</p>
<h3>The Beautiful</h3>
<p>Despite these issues, I give <a href="http://design.canonical.com/" target="_blank">the designers</a> major props. Open source software has a reputation for being ugly and catering only to the power user. But based on my initial experiences, they&#8217;ve created a polished user interface that&#8217;s beautiful and user friendly in Ubuntu.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/sJBtKJjSKH4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/10/seven-minutes-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/10/seven-minutes-in-ubuntu/</feedburner:origLink></item>
		<item>
		<title>The Devour Effect</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/BuI44c6jTWg/</link>
		<comments>http://thomaspark.me/2011/09/the-devour-effect/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 16:12:52 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=3167</guid>
		<description><![CDATA[The folks over at Devour maintain a nice collection of videos, wrapped in a clean interface. One of the touches is that each video is presented using what I call the Devour Effect: a text &#8230; <a href="http://thomaspark.me/2011/09/the-devour-effect/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>The folks over at <a href="http://devour.com" target="_blank">Devour</a> maintain a nice collection of videos, wrapped in a clean interface. One of the touches is that each video is presented using what I call the Devour Effect: a text description in the foreground and a still from the video blurred in the background.</p>
<p><span id="more-3167"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/devour.png" alt="" title="Devour" width="595" height="345" class="aligncenter size-full wp-image-3176" /></p>
<p>I was curious how Devour produced the blurred effect and so I took a look at their code. It turns out they simply preprocess the images in something like Photoshop. Sure, that may be the most bulletproof approach, but where&#8217;s the fun in that?</p>
<p>What follows is a comparison between Devour&#8217;s approach and four other, more programmatic techniques, including a pure CSS solution. The ones that utilize canvas or SVG are based on <a href="http://www.flother.com/blog/2010/image-blur-html5-canvas/" target="_blank">Matt Riggott&#8217;s work</a>. And as a point of reference, you can see the actual rendering from Devour above and what an unblurred version looks like below.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/unblurred.png" alt="" title="Unblurred" width="300" height="170" class="aligncenter size-full wp-image-3282" /></p>
<h3>Preprocess with Photoshop</h3>
<p>As I mentioned, Devour creates blurred stills in advance. The text is then overlaid by assigning it a negative top margin. I&#8217;ve recreated this here. The only difference to the actual rendering above, you might notice, is that I use Futura since I don&#8217;t have access to <a href="http://www.ms-studio.com/FontSales/proximanovacond.html" target="_blank">Proxima Nova Condensed</a>.</p>
<p><a href="http://jsbin.com/enaral/1/edit#html,live" target="_blank">View the code and live render</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/photoshop.png" alt="" title="Photoshop" width="300" height="170" class="aligncenter size-full wp-image-3280" /></p>
<h3>Blur with Canvas and JavaScript</h3>
<p>An alternative approach is to create a canvas element and embed the image in it. JavaScript can be used within a canvas to manipulate images, from scaling or rotating all the way down to pixel-specific operations. This is precisely how the <a href="http://www.pixastic.com/lib/docs/actions/blur/" target="_blank">blur action</a> in Pixastic works. Here, the blurring function loops through the image several times and averages each pixel&#8217;s color value with that of its neighbors.</p>
<p><a href="http://jsbin.com/olebur/1/edit#javascript,html,live" target="_blank">View the code and live render</a>. You might notice that the image here is Base64 encoded. This is to overcome a cross-domain security issue with JS Bin. You should be able to reference the image in the normal way.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/canvas.png" alt="" title="Canvas" width="300" height="170" class="aligncenter size-full wp-image-3277" /></p>
<h3>Blur with SVG and XML</h3>
<p>SVG is an image format that has a number of filter effects built right into it. While SVG is normally reserved for vector graphics, you can also embed a bitmap image in it. Then all it takes is a few lines of XML to apply a Gaussian blur to it. One thing to note is the weird glow around the border.</p>
<p><a href="http://jsbin.com/isifoc/1/edit#html,live" target="_blank">View the code and live render</a>. If you were to open the SVG file in a text editor, you would discover <a href="http://jsbin.com/uhedeh/1/edit#html,live" target="_blank">markup like this</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/svg.png" alt="" title="SVG" width="300" height="170" class="aligncenter size-full wp-image-3281" /></p>
<h3>Layer with Canvas and JavaScript</h3>
<p>In contrast to the pixel-based algorithms used in the previous techniques, the final two use a simple trick to blur more efficiently. Copies of the image are stacked upon each another, offset by a few pixels and partially transparent.</p>
<p>Here, a canvas element is created and the image is embedded at full opacity. With each call of the blurring function, copies of the image are stacked on itself recursively, set at an opacity of 12.5 percent and offset in each direction by a pixel. Each iteration results in an increasingly blurred image.</p>
<p><a href="http://jsbin.com/ixamep/1/edit#javascript,html,live" target="_blank">View the code and live render</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/layers.png" alt="" title="Layers" width="300" height="170" class="aligncenter size-full wp-image-3279" /></p>
<h3>Layer with CSS</h3>
<p>Finally, I wanted to see if I could achieve a similar effect using pure CSS &mdash; that is, without the aid of JavaScript, canvas, or SVG. Here, copies of the original image are set to an opacity of 12.5 percent and offset from the original by two pixels in each of eight directions.</p>
<p>A couple of remarks about the code. The copies are all given absolute positioning, meaning they are positioned relative to their common parent. CSS classes are used to set the offset of an image in a cardinal direction; a combination of these classes is used to offset an image diagonally. Finally, in order to use z-index to keep text at the top of the stack, all of the elements using z-index are given a position other than default static.</p>
<p><a href="http://jsbin.com/enucef/1/edit#html,live" target="_blank">View the code and live render</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/css.png" alt="" title="CSS" width="300" height="170" class="aligncenter size-full wp-image-3278" /></p>
<h3>Conclusion</h3>
<p>So how do these approaches measure up? As you can see from the side-by-side comparison, they all do an adequate job. Click to enlarge.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/comparo.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/comparo.png" alt="" title="Comparison of outputs" width="595" height="337" class="aligncenter size-full wp-image-3379" /></a></p>
<p>If you don&#8217;t want to bust out Photoshop and wrangle with a bunch of images, or you want to create a dynamic effect, try one of the alternative approaches. If, on top of that, you&#8217;re not comfortable programming, you can get by with just CSS.</p>
<p>But if you want what&#8217;s speediest and most robust on the client, do as Devour does.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/BuI44c6jTWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/09/the-devour-effect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/09/the-devour-effect/</feedburner:origLink></item>
		<item>
		<title>Trebek: Building an Offline Web App</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/rJXM16ouB7s/</link>
		<comments>http://thomaspark.me/2011/09/trebek-building-an-offline-web-app/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 15:40:03 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=2668</guid>
		<description><![CDATA[In my experimentation with HTML5, I ended up making Trebek, a web app that allows you to play along at home with Jeopardy! The idea is that by trying to answer questions before the contestants &#8230; <a href="http://thomaspark.me/2011/09/trebek-building-an-offline-web-app/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>In my experimentation with HTML5, I ended up making Trebek, a web app that allows you to play along at home with <a href="http://en.wikipedia.org/wiki/Jeopardy" target="_blank">Jeopardy!</a> The idea is that by trying to answer questions before the contestants do and keeping score, you can gauge your chances of making it onto the show. <a href="http://www.pisspoor.com/jep.html" target="_blank">According to two-time winner Karl Coryat</a>, you have an excellent shot if you can score $28,000 or higher on a consistent basis, and Trebek helps keep track of your performance.</p>
<p><span id="more-2668"></span> <a href="http://thomaspark.me/project/trebek/" target="_blank"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/iphone.png" alt="" title="Trebek on iPhone" width="595" height="316" class="aligncenter size-full wp-image-3007" /></a></p>
<p>You can try Trebek out below. For best results, load it in Safari on your iPhone or iPad, then <a href="http://www.lifehacker.com.au/2011/06/add-website-bookmarks-to-your-iphones-homescreen/" target="_blank">add it to your home screen</a>.</p>
<blockquote><p><a href="http://thomaspark.me/project/trebek/" target="_blank">http://thomaspark.me/project/trebek/</a></p></blockquote>
<p>What I want to do in this post is share some simple things I did to give Trebek a more app-like experience, despite it being a mere HTML/CSS/JavaScript bundle. If you&#8217;re interested in web development, read on.</p>
<h3>Tailoring the interface by scaling elements</h3>
<p>Trebek&#8217;s primary use case is leaning back on a sofa and pulling out your smartphone just as the show&#8217;s about to start. But it&#8217;s meant to be usable for &ndash; and therefore scales to &ndash; a full range of devices. You can test this out by loading it in a browser window and resizing to various shapes and sizes.</p>
<p>There are several ways to achieve this, but what I recommend is setting the font-size of the body to 100% and then using em as a unit of measure throughout the rest of the code.</p>
<div class="codecolorer-container css railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">body <span style="color: #00AA00;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #cc00cc;">#score</span> <span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0.2em</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">0.2em</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">6em</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#000000</span> <span style="color: #933;">0.05em</span> <span style="color: #933;">0.05em</span> <span style="color: #933;">0.02em</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></div>
<p>The size of em depends on the font-size of the element. By default, 1 em equals 16 pixels. But by changing the base font-size, you can scale all properties that are using em simultaneously. With the following jQuery, you can update body&#8217;s font-size, and therefore all of these properties, whenever the window is resized.</p>
<div class="codecolorer-container javascript railscasts" style="border:1px solid #9F9F9F;width:650px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">resize</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'font-size'</span><span style="color: #339933;">,</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">100</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">768</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'%'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>You can see why using pixels instead might be a bad idea. As an absolute unit, you have to recalculate and update the pixel size of each property individually, each time the window is resized.</p>
<p>On the other hand, using percent to size things is appealing since it&#8217;s relative by its very nature. Using percent also means you no longer require an update function for when the window is resized. If you set an image&#8217;s width to be 25%, it&#8217;s always going to be 25% of whatever, you might assume. However, keep in mind that percentages are local, meaning they&#8217;re based on the element&#8217;s parent and not a global value. While they&#8217;re useful for site layout, they&#8217;re less effective for fine-tuned properties like padding and text-shadow. Just try using percents to set the same padding for multiple elements, when their parent elements are different sizes.</p>
<p>While I simply scaled the interface, you might consider <a href="http://www.alistapart.com/articles/responsive-web-design/" target="_blank">media queries</a> for more custom interfaces conditional on resolution, aspect ratio, and orientation. For example, you could provide a one-column interface for smartphones versus a two-column interface for tablets.</p>
<h3>Cutting the cord with local storage &#038; application cache</h3>
<p>Local storage allows you to store data on the client in much the same way as a browser cookie. It allows you to avoid databases &mdash; nice for a lightweight app, particularly one you intend to work offline. One word of warning though: clearing the browser&#8217;s cache results in the data being lost. Trebek uses local storage to save scores and keep a history of a user&#8217;s performance.</p>
<p>To use local storage, bundle up your data into a JavaScript object and use the following code. First, it checks that local storage is supported. Next, it checks if a data object has been saved under the key &#8216;trebek&#8217; before and if so, assigns it to a variable. In the second part of the code, a function is bound to the save button. This function adds a new entry to the data object using the current date/time as key and current score as value, and then puts the whole object in local storage under the key &#8216;trebek&#8217;.</p>
<div class="codecolorer-container javascript railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>localStorage<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>localStorage.<span style="color: #660066;">getItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trebek'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; stats <span style="color: #339933;">=</span> JSON.<span style="color: #660066;">parse</span><span style="color: #009900;">&#40;</span>localStorage.<span style="color: #660066;">getItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trebek'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp;$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#save'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mouseup'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> now <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; stats<span style="color: #009900;">&#91;</span>now.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> parseInt<span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#score'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; localStorage.<span style="color: #660066;">setItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trebek'</span><span style="color: #339933;">,</span> JSON.<span style="color: #660066;">stringify</span><span style="color: #009900;">&#40;</span>stats<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Application cache stores your essential files so your web app can work offline, useful when your smartphone is in airplane mode or you have an iPod touch sans wifi. For Trebek, the greatest benefit regardless of whether the device is offline or not is that application cache improves startup speed.</p>
<p>The main thing you need is a cache manifest, which is a text file that specifies the resources to be cached for future use. Name this file &#8220;cache.manifest&#8221;, with the following content, and place it in the root of your web app. Under the CACHE section, you want to list all of the assets you wish to be cached except for the manifest file itself.</p>
<div class="codecolorer-container bash railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CACHE MANIFEST<br />
<span style="color: #666666; font-style: italic;"># Trebek version 1.0</span><br />
<br />
CACHE:<br />
index.html<br />
css<span style="color: #000000; font-weight: bold;">/</span>style.css<br />
js<span style="color: #000000; font-weight: bold;">/</span>jquery-1.6.3.min.js<br />
js<span style="color: #000000; font-weight: bold;">/</span>script.js<br />
img<span style="color: #000000; font-weight: bold;">/</span>icon-web.png<br />
<br />
NETWORK:<br />
<br />
FALLBACK:</div></div>
<p>Each time the web app is opened while online, the cache manifest is checked to see if it&#8217;s been changed (such as by updating the version number comment). If a change has been made, this triggers the browser to re-cache the rest of the files. If not, the cache continues to be used.</p>
<p>With the cache manifest in place, you want to declare it in one of your pages by adding the following attribute to the HTML tag.</p>
<div class="codecolorer-container html4strict railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a> manifest<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;cache.manifest&quot;</span>&gt;</span></div></div>
<p>Finally, make sure that your web server is serving files with the manifest extension as type &#8220;text/cache-manifest&#8221;. It won&#8217;t work otherwise. You can check this using your favorite browser&#8217;s developer tool. If the file type is not correct, add the following line to the .htaccess file in the root of your web server.</p>
<div class="codecolorer-container bash railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AddType text<span style="color: #000000; font-weight: bold;">/</span>cache-manifest manifest</div></div>
<p>That covers the very basics of using local storage and application cache to enable offline functionality in your web app. Obviously much has been glossed over, so if you want to learn more, check out Mark Pilgrim&#8217;s chapters on <a href="http://diveintohtml5.org/storage.html" target="_blank">local storage</a> and <a href="http://diveintohtml5.org/offline.html" target="_blank">application cache</a>.</p>
<h3>Putting on the finishing touches for iOS</h3>
<p>Here are a few more steps you can take to put some polish on your newly offline-capable web app. First, save your favicon for multiple resolutions: 48, 57, 72, and 114 pixels. Not only are browsers making greater use of large favicons, but they can be used as icons when your web app is saved to your home screen, giving it a bit more of that native feel.</p>
<p>In the header of your page, add the following elements. The first specifices a favicon for web browsers, and the next three are for the iPhone, iPad, and iPhone retina display respectively. You can skip the <code class="codecolorer html4strict railscasts"><span class="html4strict">-precomposed</span></code> tag to have iOS automatically add its customary gloss to your icon.</p>
<div class="codecolorer-container html4strict railscasts" style="border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;icon&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;image/png&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/icon-web.png&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-icon-precomposed&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/icon-iphone.png&quot;</span> sizes<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;57x57&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-icon-precomposed&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/icon-ipad.png&quot;</span> sizes<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;72x72&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-icon-precomposed&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/icon-retina.png&quot;</span> sizes<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;114x114&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></div></div>
<p>If you want to give your web app a custom splash screen, add the following tags as well. The images you reference must be exactly 1004&#215;768, 768&#215;1004, and 320&#215;460 pixels respectively. As far as I can tell, iPhone 4&#8242;s retina resolution is not supported yet.</p>
<div class="codecolorer-container html4strict railscasts" style="border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-startup-image&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/startup-ipad-landscape.png&quot;</span> <span style="color: #000066;">media</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape)&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-startup-image&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/startup-ipad-portrait.png&quot;</span> <span style="color: #000066;">media</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait)&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">link</span></a> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-startup-image&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img/startup-iphone-portrait.png&quot;</span> <span style="color: #000066;">media</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;screen and (min-device-width: 200px) and (max-device-width: 320) and (orientation:portrait)&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></div></div>
<p>Add the following code to tell Safari that your site is intended as a web app, change the menu bar to black, hide the chrome to display the app full-screen, and prevent pinch-to-zoom.</p>
<div class="codecolorer-container html4strict railscasts" style="border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-mobile-web-app-capable&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-mobile-web-app-status-bar-style&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;black&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;apple-touch-fullscreen&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;viewport&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></div></div>
<p>So there you have it. It&#8217;s great to see the progress that&#8217;s being made with the web in recent years. Although it hasn&#8217;t quite reached parity with native apps, for many of the simpler apps you find in the App Store, it&#8217;s now possible to create an equivalent experience using HTML5.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/rJXM16ouB7s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/09/trebek-building-an-offline-web-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/09/trebek-building-an-offline-web-app/</feedburner:origLink></item>
		<item>
		<title>Sizing Up Programmatically</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/Ca01KVBeIfc/</link>
		<comments>http://thomaspark.me/2011/09/sizing-up-programmatically/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 15:39:30 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Visualization]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=2617</guid>
		<description><![CDATA[Yesterday, I showed a graphic that lays out popular devices by display size. In this post, I want to show a version created using HTML, CSS, and JavaScript. The upside of doing this programmatically rather &#8230; <a href="http://thomaspark.me/2011/09/sizing-up-programmatically/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Yesterday, I showed a <a href="http://thomaspark.me/2011/09/sizing-up-samsung/">graphic that lays out popular devices by display size</a>. In this post, I want to show a version created using HTML, CSS, and JavaScript. The upside of doing this programmatically rather than manually in a drawing program is that it&#8217;s easier to update, adjusts to each user&#8217;s viewport, and can be made interactive. The downside is that sometimes web technology isn&#8217;t up to the task of rendering something nicely yet.</p>
<p><span id="more-2617"></span> With the programmatic approach, the main function takes in a set of objects, each of which represents a device with corresponding specs: display size (diagonal in inches), display resolution (height and width in pixels), and physical dimensions (height and width in inches).</p>
<p>Each device is then rendered as a div. The aforementioned specs are used to determine its size and shape, with the content area of the div acting as the display and its border serving as the bezel. The display size is also used to determine the horizontal position of each device.</p>
<p>There are also three optional parameters. Scale factor defaults 1 millimeter to 1 pixel, but can be varied per device. Vertical shift centers the display in the bezel by default, but can be tweaked for certain devices such as the Kindle. Finally, curve factor can customize the roundedness of a device using the border-radius property, useful for devices like the Veer, although there are some kinks with that.</p>
<p>Below is a screenshot of the results, and you can <a href="http://thomaspark.me/project/sizingup/" target="_blank">view the live version here</a>. You can also <a href="http://jsbin.com/oripup/edit#javascript,html" target="_blank">have a look at the code</a>, but pardon the cruft as this is just a proof of concept.</p>
<p><a href="http://thomaspark.me/project/sizingup/" target="_blank"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/sizingup-small.png" alt="" title="Sizing Up Programmatically" width="595" height="986" class="aligncenter size-full wp-image-2623" /></a></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/Ca01KVBeIfc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/09/sizing-up-programmatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/09/sizing-up-programmatically/</feedburner:origLink></item>
		<item>
		<title>Sizing Up Samsung</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/BGvCCP-TGXM/</link>
		<comments>http://thomaspark.me/2011/09/sizing-up-samsung/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 17:14:55 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=2525</guid>
		<description><![CDATA[With new devices being released at such a rapid pace, it&#8217;s hard to keep up. Perhaps the most frenzied of the bunch has been Samsung, who&#8217;s adopted a mentality of &#8220;let&#8217;s release everything and see &#8230; <a href="http://thomaspark.me/2011/09/sizing-up-samsung/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>With new devices being released at such a rapid pace, it&#8217;s hard to keep up. Perhaps the most frenzied of the bunch has been Samsung, who&#8217;s adopted a mentality of &#8220;let&#8217;s release everything and see what sticks&#8221;. This really comes out when graphing some of the most popular devices by display size.</p>
<p><span id="more-2525"></span> As you can see, while most companies have two distinct classes &mdash; a smartphone at 3-4&#8243; and a tablet at 10&#8243; &mdash; <a href="http://reviews.cnet.com/8301-19736_7-20102320-251/samsung-galaxy-tablet-sizes-compared/" target="_blank">Samsung is offering several &#8216;tweeners</a> that bridge them. Note though that they still have a gap, which I expect to be filled shortly with a Samsung Galaxy NoteTab 6.5. In all seriousness, it&#8217;s surprising that they haven&#8217;t targeted that particular size given Amazon&#8217;s already found a market there. </p>
<p>One thing&#8217;s for sure. It&#8217;s going to be interesting to see if any &#8216;tweener devices eventually gain a foothold, and it looks like Samsung&#8217;s <em>in vivo</em> experimentation will be showing us the way.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/sizingupsamsung-medium.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/sizingupsamsung-small.png" alt="" width="595" height="554" class="aligncenter size-full wp-image-2608" /></a></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/BGvCCP-TGXM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/09/sizing-up-samsung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/09/sizing-up-samsung/</feedburner:origLink></item>
		<item>
		<title>Fantasy Slopegraphs</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/ucBMpY9uL50/</link>
		<comments>http://thomaspark.me/2011/09/fantasy-slopegraphs/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 14:40:47 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=2380</guid>
		<description><![CDATA[I love me some fantasy baseball. Mainly when I&#8217;m near the top. With the regular season winding down and the playoffs set to start, my team sits comfortably in second place (in a league of &#8230; <a href="http://thomaspark.me/2011/09/fantasy-slopegraphs/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>I love me some <a href="http://en.wikipedia.org/wiki/Fantasy_baseball" target="_blank">fantasy baseball</a>. Mainly when I&#8217;m near the top. With the regular season winding down and the playoffs set to start, my team sits comfortably in second place (in a league of 12). But this post is only partly to brag about the Mythical Man-Moths.</p>
<p><span id="more-2380"></span> It&#8217;s also to reflect on them. How did my draft selections ultimately turn out? Which players ended up being disappointments, and which were bargains or outright steals? Who ended up contributing most to this season&#8217;s success? </p>
<p>A <a href="http://charliepark.org/slopegraphs/" target="_blank">slopegraph</a> is an interesting way of capturing the answers. Below is one I made of my players: their rankings (against all other players) at the end of last season on the left, the draft picks I used to select them at the start of this season in the middle, and their ranks as of this week on the right<sup class='footnote'><a href='http://thomaspark.me/2011/09/fantasy-slopegraphs/#fn-2380-1' id='fnref-2380-1' onclick='return fdfootnote_show(2380)'>1</a></sup>. Players released at some point in the season are gray, while those picked up as free agents are green. Click for full size.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/baseballslopegraph-full.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/09/baseballslopegraph-thumb.png" alt="" title="Fantasy baseball slopegraph" width="595" height="609" class="aligncenter size-full wp-image-2415" /></a></p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/ucBMpY9uL50" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/09/fantasy-slopegraphs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/09/fantasy-slopegraphs/</feedburner:origLink></item>
		<item>
		<title>Puck Remotes and Magic Remotes</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/sjST1GnYGw4/</link>
		<comments>http://thomaspark.me/2011/08/puck-remotes-and-magic-remotes/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 12:27:39 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=2032</guid>
		<description><![CDATA[I previously talked about why the current Apple TV is a stopgap for the true Apple TV. With that in mind, I want to discuss my experience with the current model and what it means &#8230; <a href="http://thomaspark.me/2011/08/puck-remotes-and-magic-remotes/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>I previously talked about why the current Apple TV is a stopgap for <a href="http://thomaspark.me/2011/08/the-true-apple-tv/">the true Apple TV</a>. With that in mind, I want to discuss my experience with the current model and what it means for an eventual Apple-branded TV. Through the lens of the remote control.</p>
<p><span id="more-2032"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/appletvremote.jpg" alt="" title="Apple TV remote" width="595" height="195" class="size-full wp-image-2233" /></p>
<p>Apple is renowned for its excellent design. But with the Apple TV remote, they&#8217;ve made a number of missteps.</p>
<ul>
<li><strong>It&#8217;s too small.</strong> Forget losing it between your couch cushions, how about between the pages of a magazine? At 6 millimeters, it&#8217;s so thin that it never fits comfortably in one&#8217;s hand, and is awkward if not painful to use for a significant length of time. There&#8217;s a limit to how small handheld devices should be, and it&#8217;s been exceeded.</li>
<li><strong>It&#8217;s short range.</strong> The remote is infrared, meaning it requires a direct line of sight. The Apple TV can&#8217;t be tucked away, and at certain angles, the remote is unresponsive.</li>
<li><strong>It lacks buttons.</strong> While other companies continue to make remotes <a href="http://www.engadget.com/2010/10/12/sonys-internet-tv-powered-by-google-tv-first-hands-on/" target="_blank">overly complex</a>, Apple goes the opposite extreme. Six buttons do the job most of the time, but not always. One of the things I miss most is a dedicated power button. If you&#8217;re in the Netflix app for instance, you have to exit out of it to the home screen with multiple &#8220;menu&#8221; clicks before you hold the select button for two seconds to power down the Apple TV. Not exactly intuitive or convenient.</li>
</ul>
<p>Small and unergonomic. Tethered to a short range. Not enough buttons. Sound familiar? <strong>The Apple TV remote is the new puck mouse.</strong></p>
<p>The so-called <a href="http://en.wikipedia.org/wiki/Apple_USB_Mouse" target="_blank">&#8220;hockey puck&#8221; mouse</a> was included with the original iMac in 1998 and stubbornly thereafter for more two years. With its release came a chorus of complaints. It was too small for comfort, they said as they bought <a href="http://www.drbottkg.com/prod/iCatch.html" target="_blank">third-party plastic shells</a>. The round shape meant that it was constantly getting turned around and losing orientation. The two-foot cable was too short for most setups. And of course there was that old chestnut about the single button.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/imacpuckmouse.jpg" alt="" title="iMac puck mouse" width="540" height="330" class="aligncenter size-full wp-image-2231" /></p>
<p>Eventually Apple gave up on the puck mouse, though they still were never able to get the mouse quite right. Last year, they ditched the &#8220;faster horses&#8221; approach, going in a completely different direction with <a href="http://en.wikipedia.org/wiki/Magic_Trackpad" target="_blank">Magic Trackpad</a>.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/magictrackpad.png" alt="" title="Magic Trackpad" width="595" height="239" class="alignnone size-full wp-image-2274" /></p>
<p>If, then, the current Apple TV remote is the puck remote, what would it take for it to become the magic remote?</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/sjST1GnYGw4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/08/puck-remotes-and-magic-remotes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/08/puck-remotes-and-magic-remotes/</feedburner:origLink></item>
		<item>
		<title>The True Apple TV</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/O5Etpa158qs/</link>
		<comments>http://thomaspark.me/2011/08/the-true-apple-tv/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 17:19:42 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=2180</guid>
		<description><![CDATA[In the face of rumors that Apple is working on a TV, many remain skeptical that they would get into such a commoditized business. Let me offer some counterpoints. The boundary between computers and TVs &#8230; <a href="http://thomaspark.me/2011/08/the-true-apple-tv/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>In the face of rumors that <a href="http://www.macrumors.com/2011/08/28/multiple-sources-suggest-apple-working-on-television-for-as-early-as-2012/" target="_blank">Apple is working on a TV</a>, many remain skeptical that they would get into such a commoditized business. Let me offer some counterpoints.</p>
<p><span id="more-2180"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/appletv2.jpg" alt="" title="Apple TV 2" width="595" height="476" class="aligncenter size-full wp-image-2204" /></p>
<p>The boundary between computers and TVs is blurring. TVs are becoming increasingly connected and &#8220;smart&#8221;, while personal computers are becoming a platform for obtaining, viewing, and serving video content. This follows the convergence of mobile phones and computing, and <a href="http://www.asymco.com/2011/08/22/nokia-vs-android/" target="_blank">a shakeup of the mobile phone industry</a> since 2008.</p>
<p>While the hardware specs of current TVs are decent, the user interface leaves something to be desired, both in terms of software and hardware. Think of how poor the remote control, built-in Internet &#8220;apps&#8221;, channel guide, and configuration settings are on most TVs. There is room for improvement in the user experience, and no doubt Apple believes it can do much better.</p>
<p>In markets that Apple does enter, they favor streamlined integration, from the original Macintosh to the current iMac. Not only does this integration lead to simplicity and elegance, but it opens doors to new possibilities, some of which I&#8217;ll talk about in a later post. This also includes the aforementioned TV remote, channel guide, and settings. Having a standalone device like the current Apple TV doesn&#8217;t fit with this philosophy.</p>
<p>There are still compelling reasons to offer a standalone device: to reach those who&#8217;ve already bought an HDTV, and to allow people to upgrade their Apple TVs without tossing out their perfectly good TV sets. As to the second, upgrade concerns will soon become irrelevant. Once cloud-based storage and 1080p resolution are rolled out fully, only software updates will be needed to stay relatively up to date. They are nearly there. As to the first, Apple might offer a standalone device alongside the integrated model.</p>
<p>But only as a reluctant, and perhaps temporary, measure. To Apple, the standalone model is only a step toward their vision of an integrated one, the true Apple TV.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/O5Etpa158qs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/08/the-true-apple-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/08/the-true-apple-tv/</feedburner:origLink></item>
		<item>
		<title>Toward the Man-Purse</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/mXnVc1Wmuak/</link>
		<comments>http://thomaspark.me/2011/08/toward-the-man-purse/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 12:51:04 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gadgets]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=1949</guid>
		<description><![CDATA[After nearly a decade of service, my messenger bag is finally giving up the ghost. I&#8217;ve been looking for a replacement that&#8217;s smaller and lighter: just enough to hold a 13-inch Macbook Air, some pen &#8230; <a href="http://thomaspark.me/2011/08/toward-the-man-purse/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>After nearly a decade of service, my messenger bag is finally giving up the ghost. I&#8217;ve been looking for a replacement that&#8217;s smaller and lighter: just enough to hold a 13-inch Macbook Air, some pen and paper, and maybe a book. And I&#8217;m realizing that the man-purse is an inevitability.</p>
<p><span id="more-1949"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/manpurse.png" alt="" title="Toward the man-purse" width="595" height="400" class="alignnone size-full wp-image-1961" /></p>
<p>Once upon a time, men used briefcases to carry around their contracts, bundles of cash, and nuclear launch codes. Over the years, these morphed into laptop bags and messenger bags. In the meantime, many have gotten quite used to the convenience, if not essentiality, of having things beyond their keys and wallet on them.</p>
<p>Until the state of the art reaches a point where <a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/WeWillNotHavePocketsInTheFuture" target="_blank">pockets are pointless</a>, the need for such a bag remains. But the requirements are changing. Convergence means fewer devices to carry around; instead of a PDA, MP3 player, and camera, you have a smartphone. Miniaturization means the devices you do carry around are getting thinner and lighter; 15-inch behemoths make room for subnotebooks and iPads. Digitization means fewer documents printed on paper; paperbacks are replaced with a Kindle.</p>
<p>What&#8217;s needed is a smaller bag. And whether you can <a href="http://www.nytimes.com/2010/12/16/fashion/16ipad.html" target="_blank">come to grips with it or not</a>, let&#8217;s accept that we&#8217;re entering man-purse territory.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/mXnVc1Wmuak" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/08/toward-the-man-purse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/08/toward-the-man-purse/</feedburner:origLink></item>
		<item>
		<title>Version Inflation</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/xwO0AOu-5fc/</link>
		<comments>http://thomaspark.me/2011/08/version-inflation/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 19:49:45 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=1900</guid>
		<description><![CDATA[Major versions sure don&#8217;t go as far as they used to. Both Google and Mozilla have adopted rapid release schedules for their web browsers, aiming for four or more major releases per year. As a &#8230; <a href="http://thomaspark.me/2011/08/version-inflation/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Major versions sure don&#8217;t go as far as they used to. Both Google and Mozilla have adopted rapid release schedules for their web browsers, aiming for four or more major releases per year. As a point of reference, it took Microsoft five long years to bump Internet Explorer from version 6 to 7! One per year seems about the norm.</p>
<p><span id="more-1900"></span> As with economic inflation, more versions means that each version holds less significance. It seems that this is precisely what Google and Mozilla hope to achieve, deemphasizing &#8220;What version are you on?&#8221; in favor of &#8220;Are you up to date?&#8221; <a href="http://www.techzoom.net/publications/silent-updates/">Silent, automatic updates</a> and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=678775">hidden version numbers</a> certainly support this notion. Perhaps more people will stay up-to-date, benefiting both security and standards, but we&#8217;ll have to wait and see the impact it has on web development.</p>
<p>Mozilla hasn&#8217;t always had this approach, but when Firefox and Thunderbird asked me to update to 6.0 today, I had to take pause. &#8220;Am I going nuts, or did I just update to 5.0 last month?&#8221; It turns out I hadn&#8217;t lost it yet.</p>
<p>I went back to compare the release schedules of the major browsers. You can see them plotted by year&#8230;</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/browserversionsbyyear.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/browserversionsbyyear-1024x695.png" alt="" title="Browser Versions by Year" width="595" height="403" class="alignnone wp-image-1908" /></a></p>
<p>&#8230;and by months since initial release.</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/browserversionsbyrelease.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/08/browserversionsbyrelease-1024x694.png" alt="" title="Browser Versions by Release" width="595" height="403" class="alignnone size-large wp-image-1932" /></a></p>
<p>There are clearly two schools of thought, the traditional versus the rapid releases of Chrome and Firefox as of late. Projecting with a simple linear regression (I know), here&#8217;s what&#8217;s in store for the year 2020.</p>
<ul>
<li>Internet Explorer 13</li>
<li>Firefox 10.4</li>
<li>Safari X</li>
<li>Chrome 55.1.531.866</li>
<li>Opera 17 Series</li>
</ul>
<p>But with the latest change in policy from Mozilla, and perhaps other organizations following suit, version inflation may be much greater, if they even matter at all.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/xwO0AOu-5fc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/08/version-inflation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/08/version-inflation/</feedburner:origLink></item>
		<item>
		<title>Starcraft Collective</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/6dz7YBubqR4/</link>
		<comments>http://thomaspark.me/2011/05/starcraft-collective/#comments</comments>
		<pubDate>Wed, 18 May 2011 14:14:32 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://thomaspark.me/?p=1525</guid>
		<description><![CDATA[Groups of animals get special collective nouns1, some of which are familiar (e.g., a pride of lions, a gaggle of geese) and others that are less known but equally evocative: a crash of rhinos, a &#8230; <a href="http://thomaspark.me/2011/05/starcraft-collective/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Groups of animals get special collective nouns<sup class='footnote'><a href='http://thomaspark.me/2011/05/starcraft-collective/#fn-1525-1' id='fnref-1525-1' onclick='return fdfootnote_show(1525)'>1</a></sup>, some of which are familiar (e.g., a pride of lions, a gaggle of geese) and others that are less known but equally evocative: a crash of rhinos, a charm of hummingbirds, a prickle of porcupines, a loveliness of ladybugs, a cackle of hyenas, a glint of goldfish, a parliament of owls.</p>
<p>Starcraft units aren&#8217;t too far off from animals &mdash; Zerglings are reminiscent of dogs, ultralisks elephants, and archons big, white fluffy bunnies &mdash; so what collective nouns would capture the spirit of each? Searching the web, I found that the question had been posed before, with lots of ideas but no consensus.</p>
<p><span id="more-1525"></span><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/scbanner.jpg" alt="" title="Immortals versus siege tanks" width="595" height="275" class="aligncenter size-full wp-image-1643" /></p>
<p>I conducted a survey to settle the matter<sup class='footnote'><a href='http://thomaspark.me/2011/05/starcraft-collective/#fn-1525-2' id='fnref-1525-2' onclick='return fdfootnote_show(1525)'>2</a></sup>. Each SC2 unit was given five options (plus &#8220;other&#8221;) that were culled from various sources. In all, 764 people (40% Zerg, 27% Protoss, 19% Terran, and 14% Random) took the survey over the span of three days.</p>
<h4>Results</h4>
<p>The top vote-getters for each unit are summarized below.</p>
<table>
<tr>
<td><strong>Terran</strong></td>
<td><strong>Zerg</strong></td>
<td><strong>Protoss</strong></td>
</tr>
<tr>
<td>crew of SCVs</td>
<td>swarm of drones</td>
<td>cluster of probes</td>
</tr>
<tr>
<td>pack of MULEs</td>
<td>batch of larvae</td>
<td>legion of zealots</td>
</tr>
<tr>
<td>squad of marines</td>
<td>brood of broodlings</td>
<td>league of stalkers</td>
</tr>
<tr>
<td>band of marauders</td>
<td>cluster of overlords</td>
<td>force of sentries</td>
</tr>
<tr>
<td>pack of reapers</td>
<td>swarm of zerglings</td>
<td>watch of observers</td>
</tr>
<tr>
<td>company of ghosts</td>
<td>harem of queens</td>
<td>assembly of immortals</td>
</tr>
<tr>
<td>gang of hellions</td>
<td>horde of hydralisks</td>
<td>spectrum of warp prisms</td>
</tr>
<tr>
<td>battery of siege tanks</td>
<td>brood of banelings</td>
<td>sweep of colossi</td>
</tr>
<tr>
<td>battalion of thors</td>
<td>congress of overseers</td>
<td>plume of phoenix</td>
</tr>
<tr>
<td>squadron of vikings</td>
<td>infestation of roaches</td>
<td>cloud of void rays</td>
</tr>
<tr>
<td>convoy of medivacs</td>
<td>host of infestors</td>
<td>conclave of high templar</td>
</tr>
<tr>
<td>congress of ravens</td>
<td>outbreak of infested terrans</td>
<td>brotherhood of dark templar</td>
</tr>
<tr>
<td>brigade of banshees</td>
<td>flock of mutalisks</td>
<td>ball of archons</td>
</tr>
<tr>
<td>fleet of battlecruisers</td>
<td>cluster of corruptors</td>
<td>armada of carriers</td>
</tr>
<tr>
<td></td>
<td>network of nydus worms</td>
<td>cloud of interceptors</td>
</tr>
<tr>
<td></td>
<td>stampede of ultralisks</td>
<td>fleet of motherships</td>
</tr>
<tr>
<td></td>
<td>eclipse of brood lords</td>
<td></td>
</tr>
</table>
<h4>Some Notes</h4>
<p>The most consensus was for &#8220;pack&#8221; of MULEs. Ravens were the other unit named for an animal; its official collective (unkindness) actually came in last place, while it received the most write-ins with &#8220;murder&#8221; and &#8220;flock.&#8221;</p>
<p>The most contentious units were banelings (#1 and #4 separated by 6%), immortals (#1 and #2 by 2.4%), phoenix (#1 and #3 by 2.0%), and colossi (#1 and #3 by 1.4%). Protoss units in particular seem far from settled.</p>
<p>For Zerg units, &#8220;swarm&#8221; fared well both as an option and as a write-in. Should all Zerg units simply be considered &#8220;the swarm&#8221;?</p>
<p>Generally one can&#8217;t have more than one mothership in-game, which led to some interesting write-ins: paradox, singularity, singleton, FOREVER ALONE.</p>
<p>&#8220;Other&#8221; honorable mentions: a flower of vikings, a nevermore of ravens, a clutch of larva, a grack of zerglings, a useless of hydralisks, a gaggle of mutalisks, a bronze league of observers, a gathering of immortals, an imbalance of colossi, a wing of phoenix.</p>
<p>Finally, a creative exercise for the reader: given the units of your domain, can you come up with collectives that capture their spirit?</p>
<h4>Appendix</h4>
<p>Here are the full results for <a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/terran.png">Terran</a>, <a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/zerg.png">Zerg</a>, and <a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/protoss.png">Protoss</a>.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/6dz7YBubqR4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/05/starcraft-collective/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/05/starcraft-collective/</feedburner:origLink></item>
		<item>
		<title>Icon Blues</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/6He83JKAsGI/</link>
		<comments>http://thomaspark.me/2011/05/icon-blues/#comments</comments>
		<pubDate>Wed, 04 May 2011 10:32:40 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Data]]></category>

		<guid isPermaLink="false">http://pilcro.ws/?p=266</guid>
		<description><![CDATA[I&#8217;m not the only one who&#8217;s noticed that blue icons seem to be totally overrepresented. But is it really this bad, or is the confirmation bias just acting up again? I decided to find out. &#8230; <a href="http://thomaspark.me/2011/05/icon-blues/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m not the only one who&#8217;s noticed that <a href="http://www.subtraction.com/2008/02/25/blue-in-the-">blue icons seem to be totally overrepresented</a>. But is it really this bad, or is the confirmation bias just acting up again? I decided to find out.</p>
<p><span id="more-266"></span> <a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/blueicons.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/blueicons.png" alt="" title="Blue Icons" width="582" height="118" class="aligncenter size-full wp-image-1488" /></a></p>
<h4>The Method</h4>
<p>From each of the twenty iTunes categories (e.g., books, business, education), I collected the icons of the top 30 paid iPhone apps. I used the <a href="http://www.pythonware.com/products/pil/">Python Imaging Library</a> to run through these images pixel by pixel, classifying them into 11 main colors and tallying them up.</p>
<p>Here are a couple of examples shown by percentage. <a href="http://itunes.apple.com/us/app/chat-for-google-talk/id407644858?mt=8">Chat for Google Talk</a>:</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/googletalk.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/googletalk.png" alt="" width="608" height="496" class="aligncenter size-full wp-image-1427" /></a></p>
<p>And <a href="http://itunes.apple.com/us/app/angry-birds/id343200656?mt=8">Angry Bird</a>s:</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/angrybirds.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/angrybirds.png" alt="" width="608" height="496" class="aligncenter size-full wp-image-1486" /></a></p>
<p>At this point, I could have aggregated all of the pixels across all icons and counted their colors, but that didn&#8217;t seem very informative. Instead, I focused on the major colors of each icon, which I defined as making up at least 30 percent of the pixels. With this criteria, the Google Talk icon is white and gray, and the Angry Birds icon is blue.</p>
<h4>The Results</h4>
<p>Here&#8217;s how the colors broke down for each category (click to enlarge):</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/categories.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/categories-1024x120.png" alt="" width="595" height="69" class="aligncenter size-large wp-image-1438" /></a></p>
<p>And the aggregate:</p>
<p><a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/overall.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/05/overall.png" alt="" width="407" height="496" class="aligncenter size-full wp-image-1439" /></a></p>
<p>Blue icons were indeed the most common. But while I expected half or more of the icons to be blue, it came closer to one-third. Even at that level though, blue far exceeded the other colors. This is a shame, given that some of my favorite iPhone icons (e.g., <a href="http://itunes.apple.com/us/app/delivery-status-touch-package/id290986013?mt=8">Delivery Status</a>, <a href="http://itunes.apple.com/us/app/instagram/id389801252?mt=8">Instagram</a>, <a href="http://itunes.apple.com/us/app/paprika-recipe-manager-for/id406732590?mt=8">Paprika</a>) use little to no blue. The worst offenders in this regard were travel and navigation apps, half of which were blue. </p>
<p>Black was the least common color for an icon. There were also very few yellow, purple, pink, or white icons, so if you want your app to stand out, there you go.</p>
<p>Pink was most popular with health &#038; fitness apps. Make of that what you will.</p>
<p>A couple of things I took away from the process. First, I couldn&#8217;t find much help in the way of information or software for reducing a million colors down to the ones you&#8217;d, say, find in a Crayola 12-pack. You can accomplish this by carving out the color space, but as <a href="http://imgs.xkcd.com/blag/satfaces_map_1024.png">this chart from the xkcd color survey</a> shows, the colors we define are quite idiosyncratic, both as a product of human perception and as an artifact of human culture. I ended up converting from RGBA to <a href="http://en.wikipedia.org/wiki/HSL_and_HSV">HSL</a>, which made it a bit easier to come up with clunky heuristics to classify the colors.</p>
<p>Second, the illusory nature of color. Juxtaposing different colors skewed them, the sizes of the backgrounds were overestimated, and shadows threw perceptions off. A case of the human mind outsmarting itself. This makes it tough to give an accurate account, when a pixel is technically one color, but people all perceive it to be another. Most of the time, it&#8217;s the perception that matters.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/6He83JKAsGI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/05/icon-blues/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/05/icon-blues/</feedburner:origLink></item>
		<item>
		<title>Pyramid Schemes</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/mdvtXLvj_rc/</link>
		<comments>http://thomaspark.me/2011/04/pyramid-schemes/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 20:32:19 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://blindp.wordpress.com/?p=8</guid>
		<description><![CDATA[The other day, I was having breakfast and scouring the cereal box for reading material when I came across the new food pyramid. What had they done! This version apparently replaced the old one back &#8230; <a href="http://thomaspark.me/2011/04/pyramid-schemes/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>The other day, I was having breakfast and scouring the cereal box for reading material when I came across <a href="http://www.mypyramid.gov/">the new food pyramid</a>. What had they done!</p>
<p><span id="more-8"></span> <img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/04/foodpyramidnew.png" alt="" title="New Food Pyramid" width="595" height="464" class="aligncenter size-full wp-image-4585" /> </p>
<p>This version apparently replaced the old one back in 2005. No doubt the actual content of the original <em>was</em> highly dubious, but it&#8217;s hard to argue against its memorability. I can still picture the carb foundation and fatty capstone like it was yesterday.</p>
<p><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/04/foodpyramidold.png" alt="" title="Old Food Pyramid" width="595" height="462" class="aligncenter size-full wp-image-4586" /></p>
<p>Unfortunately, with the new version, a lot of what made the original effective was lost. Let&#8217;s run through the issues from an information design perspective.</p>
<h3>Mixed Signals</h3>
<p>Is the new pyramid just a logo, or is it conveying more specific information? It&#8217;s not clear at first glance. The old pyramid communicated its purpose as an information graphic and primed the mind for interpreting it this way.</p>
<h3>Missing the Point</h3>
<p>The value of a pyramid diagram is in using its shape to represent hierarchical or proportional information &mdash; large bottom to small top. In the new pyramid, the sections are proportional but drawn as vertical bands! The USDA give two reasons for this change. First, to emphasize variety, that you should have something from each food group every day. Fair enough. Second, to emphasize moderation, the wider base of each band representing that you should have more foods with low fat and sugar from that group, and the narrow top meaning less foods with high fat and sugar. I kid you not.</p>
<h3>Not Enough Info</h3>
<p>Sometimes a picture is worth a thousand words, but a bit of text can have a multiplicative effect. The widths of the colored bands vary and are meant to be general guidelines. But precisely what is anyone&#8217;s guess. Should we strive to balance the food groups equally, or cut down on meats and beans? Should we have more grains than anything else, as clearly suggested in the original? And what is the yellow band?</p>
<h3>Hidden Messages</h3>
<p>Did you realize that the white tip of the pyramid represents discretionary calories, such as from candy and alcohol? Me neither.</p>
<h3>Jack of all Trades, Master of None</h3>
<p>The food pyramid is supposedly a &#8220;food guidance system,&#8221; yet crammed in is Clippy McClipartson scaling it to symbolize the importance of physical activity. Let&#8217;s work on the &#8220;food guidance&#8221; part.</p>
<h3>Chartjunk</h3>
<p>Giving examples of each food group is a great idea, but the execution needs improvement. The cluttered layout and horrible quality of the clip art make it more distracting than informative.</p>
<p>The bottom line is, does the new food pyramid help people make informed decisions about the nutritional value of their meals? I would argue not. Effective information design hinges on a message that is consistent and focused. The new food pyramid, which reeks of design-by-committee, fails on both accounts.</p>
<p>What can be done then? I suggest stamping the pyramid in big, bold text with &#8220;MyPyramid.gov&#8221; and moving the <a href="http://www.mypyramid.gov/mypyramid/index.aspx">Daily Food Plan</a> to the front page of the website.</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/mdvtXLvj_rc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/04/pyramid-schemes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/04/pyramid-schemes/</feedburner:origLink></item>
		<item>
		<title>Save Icon</title>
		<link>http://feedproxy.google.com/~r/thomaspark/~3/s1v5UtoEXHw/</link>
		<comments>http://thomaspark.me/2011/04/save-icon/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 03:37:16 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://pilcro.ws/?p=187</guid>
		<description><![CDATA[Earlier this week, David Friedman proposed a new save icon to replace the antiquated floppy disk. In the ensuing discussion, many noted that with automatic revision control à la Google Docs and Mac OS X &#8230; <a href="http://thomaspark.me/2011/04/save-icon/">Read more</a>]]></description>
				<content:encoded><![CDATA[<p>Earlier this week, David Friedman proposed <a href="http://www.ironicsans.com/2011/04/idea_a_new_save_icon.html">a new save icon</a> to replace the antiquated floppy disk. In the ensuing discussion, many noted that with automatic revision control à la Google Docs and Mac OS X Lion becoming the norm, the whole notion of saving would become history and render the issue moot.</p>
<p><span id="more-187"></span> <a href="http://thomaspark.me/wordpress/wp-content/uploads/2011/04/saveicon.png"><img src="http://thomaspark.me/wordpress/wp-content/uploads/2011/04/saveicon.png" alt="" title="Save Icon" width="149" height="173" class="alignleft size-full wp-image-1393" /></a></p>
<p>Whether that turns out to be the case or not, it raises several interesting questions. With so many computer icons based on specific technology, what happens when that technology fades from public consciousness? Does a lack of familiarity with that technology create usability problems with the icons? Should new icons be devised? And are they?</p>
<p>All English speakers understand the word <em>window</em> to mean an opening designed to let in air or light. But only the geeks among us know the rich history of this word. It originates from an Old Norse phrase describing an opening in a building&#8217;s roof as a <em>wind eye</em>. This poeticism was important early on for understandability and communicability of a new idea. But as the word took hold, it established a meaning of its own that transcended its legacy. Today, a window is no longer thought of as the metaphorical wind eye — a window is a window.</p>
<p>Icons are also a language, of the visual sort. In the early days of the graphical user interface, the <a href="http://en.wikipedia.org/wiki/Desktop_metaphor">desktop metaphor</a> was heavily relied upon to communicate new ideas about computing. This was essential to its success, as the nascent GUI made a newbie out of everyone.</p>
<p>However, GUI conventions have since become engrained in our culture, and the meaning of terms like desktop, file, and trash in a computing context now transcend the original metaphors. We are in an age where people interact with digital folders much more than manila ones, where they know how to search without having ever handled a magnifying glass, and where they adjust their volume control without realizing it depicts a speaker cone.</p>
<p>And just as these icons live on beyond their origins, I say long live the floppy disk!</p>
<img src="http://feeds.feedburner.com/~r/thomaspark/~4/s1v5UtoEXHw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://thomaspark.me/2011/04/save-icon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://thomaspark.me/2011/04/save-icon/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 2.244 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-21 01:14:14 -->
