<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TobyJoe &#187; Projects</title>
	<atom:link href="http://www.tobyjoe.com/topics/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tobyjoe.com</link>
	<description>Toby Joe Boudreaux on Tech, Creativity, UX, and All Things Digital</description>
	<lastBuildDate>Thu, 14 Apr 2011 00:28:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>The iPad, Gestures, and Community</title>
		<link>http://www.tobyjoe.com/2010/02/the-ipad-gestures-and-community/</link>
		<comments>http://www.tobyjoe.com/2010/02/the-ipad-gestures-and-community/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 15:18:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mobile Computing]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1419</guid>
		<description><![CDATA[Multitouch and gestural input needs community consensus on meaning and representation. ]]></description>
			<content:encoded><![CDATA[<h2>Quick Catch-Up</h2>
<p>You probably know this, but just in case you are out of the loop, I&#8217;ll give some quick background. </p>
<p>Apple&#8217;s trackpads – obviously including the iPad – can support up to eleven distinct touchpoints per touch sequence. In other words, you can use both hands and&#8230;your nose? On the iPhone, and mostly on the laptops, we use one or two touches most of the time. </p>
<p>On top of the number of touchpoints, multitouch development uses a concept of &#8220;touch sequences&#8221; to track a discrete series of touches over a short period of time. In English, that means you can put ALL ELEVEN FINGERS on an Apple touch screen, twist, twirl, and swipe, and apps can respond accordingly.</p>
<p>This is fairly new to personal computing. We&#8217;re used to a keyboard, a mouse, occasionally a trackball or trackpad. We point, we click, and we drag. </p>
<p>Now we can do more. Much, much more. Obvious, yes? Yes. </p>
<h2>Today</h2>
<p>We&#8217;ve all seen touch-and-drag. We&#8217;ve seen flicking through a collection, or flicking to activate supplemental controls on a cell. We&#8217;ve seen pinch-to-zoom and reverse-pinch-to-zoom-out. We saw these on the most well-funded educational video series ever: Apple&#8217;s own iPhone TV commercials.</p>
<p>Apps mostly stick to the meaning of those gestures, and users benefit from that fact. Collectively, we developers and designers have self-regulated in a fairly organic, reactionary way. But with the larger screen on the iPad, can we unify sooner? Preemptively?</p>
<p>Just wait until people begin using the iPad. Think about that form factor, about the usage contexts. It wouldn&#8217;t shock me if a QWERTY keyboard disappeared from the device in a couple of years, replaced by something brand new&#8230;something one-handed and elegant. If so, the new *thing* should be leveraged across apps to the benefit of everyone. <em>Novel gestures are a fleeting competitive advantage.</em></p>
<h2>Why Collaborate?</h2>
<p>In the sort of wild west that popped up around the iPhone – and will likely pop up around the iPad – the earliest adopters gained footing and market share (by virtue of a smaller market) while users floundered in a Stockholm Syndrome situation. Consumers were captive to the limited array of apps that existed in the early days and were willing to invest time learning how each app worked. A lot of folks are still quite flexible, but I wonder how long it can last.</p>
<p>The tipping point between critical mass of users and critical mass of apps happens quickly, though, and we product designers have to make sure it tips the right way. That is, in favor of users. And reciprocally, in favor of product developers. We can do that by lowering the learning curve for each new app that pops into the store. </p>
<h2>A Warm and Comfy Blanket Statement</h2>
<p><em>It&#8217;s a mistake to hijack established gestures, just as it would be a mistake for every computer to have a different keyboard layout.</em></p>
<p>I wrote about this in <a href="http://www.tobyjoe.com/2009/08/my-iphone-user-experience-book/" title="Programming the iPhone User Experience">my book</a> on iPhone UX hacking, and still abide by it. </p>
<p>We owe it to users to collectively invest the same meaning in each new gesture we invent/acknowledge, unless there&#8217;s a great reason to change established gestures. If that&#8217;s the case, we should register the change with other product devs/designers and move everyone else in the right direction.</p>
<p>We should also focus on bringing new gestures to market in a way that prevents confusion. It would be great to share feedback from our users on input gestures. I can even imagine a choreographed A/B test among competing apps. (KUMBAYA!)</p>
<p>Right now, though, there&#8217;s no easy way to share. No grand central dispatch. No forum. </p>
<p>We can read the iPhone and iPod Human Interface Guidelines, copy the earliest players, and bank too much on &#8220;common sense&#8221; (a problematic concept if ever there were one).</p>
<p>Instead, maybe we should talk about this. Contribute. Debate. Share code. Share artwork. Share labels. Share translations.</p>
<h2>The Gist &#8211; CommonUX</h2>
<p>To get to the point, I want product designers to collaborate and focus competition on features that don&#8217;t alienate users. I want us all to share our concepts for gestural input, share the iconography that represents actions (and more), and focus our innovation on the features that matter. Let&#8217;s assist users by assisting each other, reduce barriers, and make for a great platform where product designers can spend time where it pays off.</p>
<p>I&#8217;ve created a GitHub site and have purchased a domain that could – if folks choose to participate – act as a central repo for collaborating on common user experience elements. This post is to get the word out and figure out whether folks care. </p>
<p>Elements we can standardize include:</p>
<ul>
<li>Gestures for common actions</li>
<li>Apple-friendly icons representing common concepts or objects</li>
<li>Code and icons for both Cocoa and Android (and&#8230;?) for handling common gestures</li>
<li>Colloquial names for gestures</li>
</ul>
<p>So, welcome to <a href="http://wiki.github.com/tobyjoe/CommonUX/">CommonUX</a>. Let&#8217;s sort it all out. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/02/the-ipad-gestures-and-community/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ChatSnapper &#8211; Alpha</title>
		<link>http://www.tobyjoe.com/2010/02/chatsnapper-alpha/</link>
		<comments>http://www.tobyjoe.com/2010/02/chatsnapper-alpha/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 04:09:27 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1437</guid>
		<description><![CDATA[An early rough cut of a quick project: a ChatRoulette app with screenshots built in.]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quick idea I threw together after posting <a href="http://www.tobyjoe.com/2010/02/chatroulette-elevators-and-panopticons/" title="Thoughts on ChatRouletiquette">my thoughts on ChatRoulette and ChatRouletiquette</a>. No Sparkle support, no image upload support, and no preferences – yet. </p>
<h2>What is ChatSnapper?</h2>
<p>ChatSnapper lets you view ChatRoulette in a dedicated window and use the Apple+S command (aka, &#8220;Save&#8221;) to save a screenshot to your computer. It will save to your ~/Desktop in the most coarse fashion you can imagine. </p>
<p>Next up: image upload (waiting on a YFrog API key), tweeting of links, save preferences, etc. Also, an icon and Sparkle support. </p>
<h2>Download</h2>
<p>Get the alpha/preview/whatever here: <a href="http://www.tobyjoe.com/wp-content/uploads/2010/02/ChatSnapper-alpha.zip" title="ChatSnapper-alpha.zip">ChatSnapper-alpha.zip</a></p>
<p>No warranties, people. Troll at your own discretion and sue yourself if something goes wrong. This is the sum total of about 2 hours of work (while watching Olympic snowboarding), so ignore the rough edges.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/02/chatsnapper-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ChatRoulette, Elevators, and Panopticons</title>
		<link>http://www.tobyjoe.com/2010/02/chatroulette-elevators-and-panopticons/</link>
		<comments>http://www.tobyjoe.com/2010/02/chatroulette-elevators-and-panopticons/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 15:58:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1406</guid>
		<description><![CDATA[ChatRoulette is blowing up. Mostly with naked dudes, it seems. Let's try some crowdsourced course-correction.]]></description>
			<content:encoded><![CDATA[<p>My wife and I – and millions of others, I&#8217;m sure – are continually annoyed by folks who walk up to elevators and press buttons already lit.</p>
<p>Though not a new phenomenon, we think we have a solution.</p>
<p>If pressing a lit elevator button were to cancel the call and simply send the machine to the nearest floor in the current direction, there would be a penalty to pressing it more than once. </p>
<p>The interesting thing about this idea is that it need not be universal. Instead, elevator designers could follow the lead of <a href="http://en.wikipedia.org/wiki/Jeremy_Bentham" target="_new" rel="nofollow">Jeremy Bentham</a> and create a <a href="http://en.wikipedia.org/wiki/Panopticon" target="_new" rel="nofollow">panopticon-style</a> system in which some small portion of elevators operate this way. It only takes the fear of looking like an idiot to regulate behavior (most of the time).</p>
<h2>ChatRoulette Weirdos</h2>
<p>As <a href="http://chatroulette.com" target="_new" rel="nofollow">ChatRoulette </a> takes off, it&#8217;s becoming plagued by pervs flashing their junk or otherwise being slimy. It&#8217;s certainly expected, as the anonymity provided by the web brings out that side of people. It&#8217;s just a fact of life on the Internet: if there is an opportunity for a guy to flash his weiner anonymously, he will.</p>
<p>And that&#8217;s fine. It&#8217;s the way of the world. It&#8217;s the way of the web.</p>
<p>But so, my friends, is community moderation.</p>
<h2>Enter ChatSnapper</h2>
<p>Let&#8217;s try an experiment.</p>
<ol>
<li>Follow <a href="http://twitter.com/chatsnapper" target="_new">@ChatSnapper</a> on Twitter. </li>
<li>DM or @reply to @ChatSnapper with a link to a screenshot from ChatRoulette (or other online chats) showing offensive (or just weird) behavior.</li>
<li>Check posted links and help shine a light on the offenders.</li>
</ol>
<p>Let&#8217;s see if the existence of a rogues&#8217; gallery has any effect on the actions of folks. </p>
<p>If this works, I&#8217;ll start calling elevator companies.</p>
<h2>ADDENDUM</h2>
<p>Alex Bisceglie alerted me to a similar effort: <a href="http://www.chatroulettecockmap.com/">ChatRoulette Cock Map</a>. It includes an app that can track the IP of offenders as well. </p>
<p>The very moment that Alex sent that, I was working on a WebKit browser with screencap and yfrog upload. For now, grab a build at: <a href="http://www.tobyjoe.com/2010/02/chatsnapper-alpha/">ChatSnapper &#8211; Alpha</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/02/chatroulette-elevators-and-panopticons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cartilage: A Monk Skeleton for DataMapper</title>
		<link>http://www.tobyjoe.com/2009/08/cartilage-a-monkrb-skeleton-for-datamapper/</link>
		<comments>http://www.tobyjoe.com/2009/08/cartilage-a-monkrb-skeleton-for-datamapper/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 21:17:36 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1255</guid>
		<description><![CDATA[I wanted to bootstrap a Monk project using DataMapper. It was very easy, so I extracted the skeleton and put it up on GitHub.]]></description>
			<content:encoded><![CDATA[<p>I created a skeleton for MonkRb that leverages <a href="http://datamapper.org/">DataMapper</a> and, of course, <a href="http://www.sinatrarb.com/">Sinatra</a>. </p>
<p>Check it out: <a href="http://github.com/tobyjoe/cartilage/tree/master">Cartilage</a>.</p>
<p>Add it to your Monk set up with the <code>monk</code> command.</p>
<pre><code>monk add cartilage git://github.com/tobyjoe/cartilage.git
</code></pre>
<p>Once it&#8217;s added, create a new project with the <code>monk init</code> command.</p>
<pre><code>monk init --skeleton=cartilage myapp
</code></pre>
<p>Once that is done, freeze all the dependencies.</p>
<pre><code>dep vendor --all
</code></pre>
<p>Easy as pie, right?</p>
<h2>Contributions</h2>
<p>I want to add optional memcached support to both <a href="http://github.com/tobyjoe/cartilage/tree/master">Cartilage</a> and <a href="http://github.com/tobyjoe/lazybones/tree/master">Lazybones</a>.</p>
<p>If you see anything wonky, fork it and let me know, or just leave a comment or file an issue at <a href="http://github.com/tobyjoe/cartilage/issues">the GitHub issue tracker</a>.</p>
<p>Cartilage is based on <a href="http://github.com/monkrb/skeleton/tree/master">the original skeleton</a> that ships with <a href="http://monkrb.com">Monk</a>, by the way. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/cartilage-a-monkrb-skeleton-for-datamapper/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lazybones: A Monk Skeleton for CouchDB and Sinatra</title>
		<link>http://www.tobyjoe.com/2009/08/monkrb-skeleton-for-couchdb-and-sinatra/</link>
		<comments>http://www.tobyjoe.com/2009/08/monkrb-skeleton-for-couchdb-and-sinatra/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 17:22:28 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1245</guid>
		<description><![CDATA[I created a skeleton for MonkRb that leverages CouchDB and Sinatra.]]></description>
			<content:encoded><![CDATA[<p>I created a skeleton for MonkRb that leverages <a href="http://couchdb.apache.org/">CouchDB</a> and <a href="http://www.sinatrarb.com/">Sinatra</a>. </p>
<p>You can find the project over at <a href="http://github.com">GitHub</a>.</p>
<p>Check it out: <a href="http://github.com/tobyjoe/lazybones/tree/master">Lazybones</a>.</p>
<p>Add it to your Monk set up with the <code>monk</code> command.</p>
<pre><code>monk add lazybones git://github.com/tobyjoe/lazybones.git
</code></pre>
<p>Once it&#8217;s added, create a new project with the <code>monk init</code> command.</p>
<pre><code>monk init --skeleton=lazybones myapp
</code></pre>
<p>Once that is done, freeze all the dependencies.</p>
<pre><code>dep vendor --all
</code></pre>
<p>Easy as pie, right?</p>
<h2>Contributions</h2>
<p>I am working on skeletons for Postgres and MySQL as well, and adding optional memcached support to all of them. </p>
<p>If you see anything wonky, fork it and let me know, or just leave a comment or file an issue at <a href="http://github.com/tobyjoe/lazybones/issues">the GitHub issue tracker</a>.</p>
<p>It&#8217;s based on <a href="http://github.com/monkrb/skeleton/tree/master">the original skeleton</a> that ships with <a href="http://monkrb.com">Monk</a>, by the way. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/monkrb-skeleton-for-couchdb-and-sinatra/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Renewed Interest in Rails</title>
		<link>http://www.tobyjoe.com/2009/08/renewed-interest-in-rails/</link>
		<comments>http://www.tobyjoe.com/2009/08/renewed-interest-in-rails/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 12:04:52 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1139</guid>
		<description><![CDATA[An episode of FLOSS featuring David Heinemeier Hansson rekindled my interest in Rails.]]></description>
			<content:encoded><![CDATA[<p>I like a lot of <a href="http://leoville.com/">Leo Laporte&#8217;s</a> <a href="http://twit.tv">podcasts</a> and listen to a few of them regularly: TWiT, MacBreak Weekly, Security Now, and FLOSS. </p>
<p>I killed a good chunk of time at the bus station listening to an <a href="http://twit.tv/floss79">episode of FLOSS featuring David Heinemeier Hansson</a>. For those not in the know, he&#8217;s the very bright and ambitious gent behind the Ruby on Rails framework.</p>
<p>FLOSS stands for &#8220;Free, Libre, Open-Source Software&#8221; and is a great way to either catch up on OSS you may not have encountered in the wild or dig into the people behind OSS you already use.</p>
<h2>My Rails History</h2>
<p>I was a <em>really</em> early adopter of Rails for professional work. Having spent my time with Struts and similar frameworks – the inspiration for Rails – I saw the familiar patterns and liked the quick bootstrapping. <a href="http://barbariangroup.com/">The Barbarian Group</a> was, as far as I know, the first advertising/marketing shop to deploy Rails apps – back in the 0.12 days. I wrote an early intro article about Rails in .net magazine and was scheduled, along with the former CTO of the company, to speak at the first RailsConf, in Chicago. (Unfortunately, some sudden staff changes at TBG forced us to cancel.) So, yeah – to paraphrase a t-shirt, Rails had me at, &#8220;Hello, world!&#8221;</p>
<p>I always loved the full-stackiness of Rails: from the generators, to the testing tools, to the console, to the plugins and helpers. It&#8217;s great to go from concept to boilerplate in under an hour. The Rails folks inspired people, divided the fuck out of people, and helped make OSS contributions massively hip. All in all, I&#8217;m really glad Rails came about and objectively support most of the hype.</p>
<h2>Gripes</h2>
<p>Subjectively, over time, I got pretty frustrated with Rails for the type of work I was doing. It&#8217;s really great for start-ups and clean room builds, but was always a little inflexible when special considerations popped up. For a long time, fitting Rails projects into larger ecosystems tasted quite strongly of vinegar. There is an amazing amount of flexibility in Ruby, and hot-patching the shit out of Rails is very easy. There&#8217;s a point at which you kind of pause and ask if you&#8217;re building on the wrong foundation for the job at hand.</p>
<p>For a long time (and maybe today), that kind of question would get you tarred and feathered in the #rails world. I got sick of the quasi-religious bickering between &#8220;Rails developers&#8221; and &#8220;web developers&#8221; at large and dropped out. Drama around a web framework? No, thanks.</p>
<p>We still run Rails projects and use it often, but we do so with a certain emotional detachment. We also do our best to be agnostic, which means giving an honest evaluation to the decision of a toolset for each and every project. </p>
<p>When we do pick Rails, we try to focus on the engineering and ignore the drama in the greater community. This has always meant, in large part, ignoring DHH and almost every Rails blogger out there. That choice means I occasionally miss out on some true gems (heh) of knowledge or interesting arguments, but I&#8217;ve rarely regretted dropping out of the conversation.</p>
<h2>Enter FLOSS</h2>
<p>I thought DHH did a killer job on FLOSS. He&#8217;s one of those folks who comes across one way in print and another in person. It&#8217;s not an inconsistency as much as a lack of nuance in the written form. I&#8217;ve never liked the written form of Mr. Hansson but he and Randal Schwartz had a blast during the interview and it was very endearing.</p>
<p>So DHH got me inspired about Rails again. Not converted to the golden path or anything, but a renewed interest in the future of the framework beyond keeping a competency for client needs.</p>
<h2>Getting Sidetracked</h2>
<p>As an aside, he also made me wonder if he really understands the architectural style he promotes so heavily: REST.</p>
<p>In the podcast, he explains REST to Randall Schwartz (the host) by describing &#8220;the four verbs&#8221; used to operate on resources. It seems like he&#8217;s still confusing CRUD with REST. Oddly, the <a href="http://github.com/rails/rails/blob/55d1d12c32a1b99f3f07d2346b49a63650ba2e9d/actionpack/lib/action_dispatch/http/request.rb">Rails source</a> doesn&#8217;t really make the confusion.</p>
<p>Maybe this explains little mysteries, like the default Rails asset helpers appending &#8220;cache buster&#8221; query strings to support files (like Javascript, CSS, and images) in production environments. REST is about using HTTP to the fullest – including caching. </p>
<p>It could be that he really understands REST, but chooses to dumb it <strong>way</strong> down for his audience. That seems a bit risky, though. Developers hate that.</p>
<h2>Getting Real?</h2>
<p>In either case, I won&#8217;t get too wrapped up in the dude. I will say, kudos to adding some much-needed sugar to balance out the vinegar. Rails PR could use some attention and clarity along with a taming of the &#8220;opinionated software&#8221; side of things.</p>
<p>I hope the conversation around Rails stays creative but keeps growing up – even if DHH wants to <a href="http://loudthinking.com/posts/42-we-need-both-engineers-and-artists-in-programming">avoid being too &#8220;professional.&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/renewed-interest-in-rails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

