<?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; Tech</title>
	<atom:link href="http://www.tobyjoe.com/topics/tech/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, 18 Feb 2010 15:47:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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>Too Much Buzz!</title>
		<link>http://www.tobyjoe.com/2010/02/too-much-buzz/</link>
		<comments>http://www.tobyjoe.com/2010/02/too-much-buzz/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 20:02:43 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1365</guid>
		<description><![CDATA[The word "Buzz" as a product name is a joke. Especially when applied to yet another microblog/status site and API.]]></description>
			<content:encoded><![CDATA[<p>Today, Google launched a new product, <a href="http://google.com/buzz/" target="_new">Google Buzz</a>, which is being touted as a Facebook killer, Twitter killer, and probably the killer of a few other things. </p>
<p>If the name – or functionality – sounds familiar, it&#8217;s because at least two other companies have launched (basically) the same service using the same name. </p>
<p>Yahoo! has <a href="http://buzz.yahoo.com/" target="_new">Yahoo! Buzz</a> along with status message integration into Yahoo! Mail. </p>
<p>The domain, <a href="http://buzz.com" target="_new">Buzz.com</a>, is owned by AT&amp;T and is&#8230; a social network for small and local businesses. </p>
<p>I hereby decree, as a passive armchair quarterback of the internet, that we retire the word &#8220;Buzz&#8221; along with any associated products, from today forward. </p>
<p>BTW &#8211; there is only one <em>true</em> <a href="http://twitter.com/buzz" target="_new">Buzz</a> on the internet. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/02/too-much-buzz/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Amazon vs Apple Has Gone Too Far</title>
		<link>http://www.tobyjoe.com/2010/02/amazon-vs-apple-has-gone-too-far/</link>
		<comments>http://www.tobyjoe.com/2010/02/amazon-vs-apple-has-gone-too-far/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 13:05:32 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1358</guid>
		<description><![CDATA[<p>I received a message from Amazon this morning letting me know that the Kindle Developer Kit application process was ready for the general public. I clicked the link and was taken to the KDK site, only to be told that Safari isn&#8217;t supported. </p>]]></description>
			<content:encoded><![CDATA[<p>I received a message from Amazon this morning letting me know that the Kindle Developer Kit application process was ready for the general public. I clicked the link and was taken to the KDK site, only to be told that Safari isn&#8217;t supported. </p>
<p><a href="http://www.tobyjoe.com/wp-content/uploads/2010/02/Kindle-Development-Kit-for-Active-Content.png" target="_blank"><img src="http://www.tobyjoe.com/wp-content/uploads/2010/02/kdk-thumb.png" alt="Kindle Developer Site Screenshot Showing Blocked Safari" width="500" height="520" /></a></p>
<p>Amazon was nice enough to give me a link to download Internet Explorer, so at least their user agent sniffing is tuned to perfection!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/02/amazon-vs-apple-has-gone-too-far/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Marketing the iPad</title>
		<link>http://www.tobyjoe.com/2010/01/marketing-the-ipad/</link>
		<comments>http://www.tobyjoe.com/2010/01/marketing-the-ipad/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 12:58:05 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1345</guid>
		<description><![CDATA[<p>Overall, I think the <a href="http://www.apple.com/ipad/">iPad</a> is an interesting device and once the dust settles I think the price point will be attractive for a supplement to our &#8220;main&#8221; computers. The iPad will fill a spot for people who consume more than they create – a large audience, for sure, and one most of us fit into depending on context and day-part.</p>]]></description>
			<content:encoded><![CDATA[<p>Overall, I think the <a href="http://www.apple.com/ipad/">iPad</a> is an interesting device and once the dust settles I think the price point will be attractive for a supplement to our &#8220;main&#8221; computers. The iPad will fill a spot for people who consume more than they create – a large audience, for sure, and one most of us fit into depending on context and day-part.</p>
<p>One criticism I have is the name. Many, many others have <a href="http://bust.com/blog/2010/01/27/the-ipad-a-product-from-the-he-mans-women-haters-club.html">criticized the name</a> because of the associations it brings to mind. There was a trending topic on Twitter called &#8220;<a href="http://twitter.com/#search?q=iTampon%20OR%20%23iTampon">iTampon</a>&#8221; that sums it up. </p>
<p>Apple is smart, though, and a Wednesday release means the &#8220;iTampon&#8221; reactions will be old, lame, and boring by Monday. </p>
<p>No, the reason the name <em>iPad</em> bugs me is more subtle, and more of a long-term marketing problem. </p>
<p>My gripe: the name is differentiated from the iPod by one letter &#8211; a soft vowel. It&#8217;s an almost meaningless distinction, and crams the iPad into the same cognitive bucket occupied by the many iPod releases. </p>
<p>Why is that a problem? Because the strongest (non-tampon) negative reaction I saw was that the iPad seems like a slightly larger iPod Touch.</p>
<p>If Apple is ok with that comparison, and with these products being differentiated only by size&#8230;well, fine. </p>
<p>But I think the iPad will take on a life of its own if it can get footing, and that life will always be anchored, from a marketing perspective, to the iPod.</p>
<p>A more inspirational, open-ended, and differentiated name would have been <em>Canvas</em>. No &#8220;i&#8221; prefix. New cognitive space. New brand trajectory. </p>
<p>Instead, we&#8217;re stuck with (an image of) the iPod that won&#8217;t quite fit into our pockets. After the more immature associations fade, that is.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/01/marketing-the-ipad/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Kindle vs Apple iPad</title>
		<link>http://www.tobyjoe.com/2010/01/kindle-vs-apple-tablet/</link>
		<comments>http://www.tobyjoe.com/2010/01/kindle-vs-apple-tablet/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 20:29:58 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1317</guid>
		<description><![CDATA[<p>Many have chimed in, ahead of the Apple tablet announcement, on whether the new Apple device will be a &#8220;Kindle killer&#8221;</p>]]></description>
			<content:encoded><![CDATA[<p>Many have chimed in, ahead of the Apple tablet announcement, on whether the new Apple device will be a &#8220;Kindle killer&#8221;</p>
<p>I don&#8217;t believe this will be the case. It&#8217;s not so much about the pros and cons of e-ink, backlights, or screen resolution.</p>
<p>To me, the <a href="http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015TG12Q/ref=kinww_ddp">Kindle DX</a> is a brilliant device because it forces me to read a f&#8217;ing book. </p>
<p>No dock icons blinking. No compulsive checking of <a href="http://twitter.com/tobyjoe">Twitter</a>, email, or stock quotes (or Texts from Last Night).</p>
<p>By offering a limited set of functionality and doing less, better, the Kindle forces me to eschew the kind of distractions that make me curl up with a book in the first place. </p>
<p>Apple can create the be-all, end-all Surface or Canvas or Slate or whatever. I will buy it. I will buy the shit out of it. I&#8217;m a developer and UX geek (and yuppie hipster scum) &#8211; I have to.</p>
<p>I won&#8217;t use it to read novels, poetry, or prose. Magazines and news? Sure. Tech books? Maybe, if live docs and errata were part of the mix. But then, that type of reading is work, not pleasure. Not therapy. That&#8217;s where the Kindle shines.</p>
<p>I have looked at (an early version of) the <a href="http://www.amazon.com/kdk">Kindle development kit</a> (the KDK) and though I&#8217;m tempted to create apps focused on distraction (Twitter client, anyone?) I don&#8217;t think I&#8217;d run them. Instead, I&#8217;m trying to dream up apps that boost the escapism the Kindle already affords me.</p>
<p>So far, nothing beats the core function: making me crave reading as much as my first library card did.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2010/01/kindle-vs-apple-tablet/feed/</wfw:commentRss>
		<slash:comments>7</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>UX in Bed</title>
		<link>http://www.tobyjoe.com/2009/08/ux-in-bed/</link>
		<comments>http://www.tobyjoe.com/2009/08/ux-in-bed/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 20:08:25 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Mobile Computing]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1201</guid>
		<description><![CDATA[One of the questions I ask when working on a new project is, "Where will people use this?"
]]></description>
			<content:encoded><![CDATA[<p>One of the questions I ask when working on a new project is, &#8220;Where will people use this?&#8221;</p>
<p>The question is obvious for mobile projects because highly variable environments are par for the course. It matters with all non-stationary touch points, though – from door handles on train cars to Android applications to the work we&#8217;ll surely be seeing from the new <a href="http://www.wpp.com/wpp/press/press/default.htm?guid=%7B7b7b4e2e-65e7-424d-a15e-fdcfb96bb7c1%7D">Schematic Touch</a> group.</p>
<p>Asking the question is easy. Using the response may not be. I see mobile apps all the time that are clearly made for users who are stationary, physically stable, connected to a consistent network, and with both hands free for interaction. High demands, right? They conflict with my more common usage patterns, and those apps rarely get launched. </p>
<p>A great example of a more subtle conflict – and one being addressed without much fanfare by many app developers – is iPhone usage in bed and auto-rotation.</p>
<h2>Welcome to My Boudoir</h2>
<p>My wife and I are incredibly lame. We tend to lie, side by side, reading news on our iPhones before falling asleep at night. </p>
<p>Apps that auto-rotate when the device orientation changes suck in bed. Or on the couch. Or in a reclining seat in first class. Or in a hammock. You get the point.</p>
<p>The problem is that we all flip-flop all over the place in bed (va-va-va-voom!), changing the point of reference for orientation. What makes a lot of sense when we&#8217;re upright is a pain in the ass when we&#8217;re horizontal.</p>
<h2>A Suggestion</h2>
<p>I&#8217;d like to encourage developers to carefully consider auto-rotation. A lot of devs are starting to catch on to this one as customers complain or make feature suggestions. I thought I might provide an example illustrating a really easy approach to disabling auto-rotation globally in an app. There are more sophisticated and <em>pattern-y</em> ways for the clever.</p>
<p>Don&#8217;t get me wrong – auto-rotation can be a great feature. I am all for it. But I have decided the baseline rule should be: <strong>If your views auto-rotate, you should provide a (preferably in-app) preference for disabling the feature.</strong></p>
<h2>An Example</h2>
<p>So how does a developer do that?</p>
<p>Well, the interface is up to you. Let&#8217;s assume you have a project with a button that brings up an in-app settings screen.</p>
<p>If you have a <code>UISwitch</code> in there that represents the global auto-rotation state, just save it to the user defaults when you close the settings.</p>
<pre><code>- (IBAction) dismiss:(id)sender
{
	// Update the defaults.
	NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
	BOOL autoRotationEnabled = self.autoRotationSwitch.on;
	[defaults setBool:autoRotationEnabled forKey:kAutoRotateKey];
	[defaults synchronize];

	// Close!
	[self.parentViewController dismissModalViewControllerAnimated:YES];
}
</code></pre>
<p>In your app delegate, declare a method to get the current global auto-rotation value.</p>
<pre><code>- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	return [[NSUserDefaults standardUserDefaults] boolForKey:kAutoRotateKey];
}
</code></pre>
<p>Finally, in each view controller that should obey the globals, ask the app delegate for the scoop.</p>
<pre><code>- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	PillowTalkAppDelegate *appDelegate = (PillowTalkAppDelegate *)[UIApplication sharedApplication].delegate;
	return ([appDelegate shouldAutorotateToInterfaceOrientation:interfaceOrientation]);
}
</code></pre>
<p>Here is a quickie example project that illustrates the concept: <a href="http://www.tobyjoe.com/wp-content/uploads/2009/08/PillowTalk.zip" title="PillowTalk.zip">PillowTalk.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/ux-in-bed/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Building Erlang on Snow Leopard</title>
		<link>http://www.tobyjoe.com/2009/08/building-erlang-on-snow-leopard/</link>
		<comments>http://www.tobyjoe.com/2009/08/building-erlang-on-snow-leopard/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 14:28:30 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1177</guid>
		<description><![CDATA[The macports install of CouchDB requires Erlang (naturally) and Erlang requires WxWidgets and Tk, which are probably pointless for most uses, and won't compile on 10.6.]]></description>
			<content:encoded><![CDATA[<p>The macports install of CouchDB requires Erlang (naturally) and Erlang requires WxWidgets and Tk, which are probably pointless for most uses, and won&#8217;t compile on 10.6.</p>
<p>Here is a <a href="http://www.tobyjoe.com/wp-content/uploads/2009/08/Portfile.diff">patch for the Erlang Portfile</a> that will let you build on pre-GM 10.6. </p>
<p>Save the patch to ~/Desktop/erlang.diff</p>
<h2>Patching icu</h2>
<p>You might also have to patch icu. To test, run:</p>
<pre><code>sudo port install icu
</code></pre>
<p>If it errors, grab the <a href="http://trac.macports.org/changeset/55654?format=diff&#038;new=55654">unified diff patch file</a> and save it to your ~/Desktop as &#8220;icu.diff&#8221; and run:</p>
<pre><code>cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/icu

sudo patch < ~/Desktop/icu.diff

sudo port install icu
</code></pre>
<h2>Patching Erlang</h2>
<p>To run the Erlang patch and install the port, just do the following:</p>
<pre><code>cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/lang/erlang

patch < ~/Desktop/erlang.diff

sudo port install erlang
</code></pre>
<h2>CouchDB?</h2>
<p>I can get CouchDB to build, but not to run. I think I'll let someone else solve this one. Maybe you?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/building-erlang-on-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Microsoft Deprecating IE6 the Right Way</title>
		<link>http://www.tobyjoe.com/2009/08/microsoft-deprecating-ie6-the-right-way/</link>
		<comments>http://www.tobyjoe.com/2009/08/microsoft-deprecating-ie6-the-right-way/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 15:11:46 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1164</guid>
		<description><![CDATA[Microsoft Office web apps will not officially support IE6. But they also won't block it.]]></description>
			<content:encoded><![CDATA[<p>I am pretty far from a Microsoft fanboy. In fact, most of what MS produces scares, worries, and downright nauseates me: UX, security, maintainability, compatibility&#8230;</p>
<p>Still, I like two things about <a href="http://blogs.msdn.com/officewebapps/archive/2009/08/05/9858563.aspx" rel="external nofollow">this blog post</a> about their Office web apps.</p>
<p>First, I like that they are officially focusing on (admittedly, a subset of) modern browsers for their very dynamic web apps. Developers and designers at Microsoft are just like the rest of us, after all: they want to do great work and hate clunky platforms and unfortunate constraints. Bravo for continuing the baby steps forward.</p>
<p>Second, I like that they aren&#8217;t blocking or filtering user agents. They are offering &#8220;unofficial&#8221; support to semi-modern and modern browsers. They aren&#8217;t showing upgrade notices that make users feel like losers. They aren&#8217;t blocking access as some goofy religious mission. They&#8217;re just being practical. </p>
<p>From the post:</p>
<blockquote><p>If you prefer to use another browser you should still give the Web Apps a try. While we cannot officially support all browsers, customers will not be blocked from using them. It is a goal of the Web Apps to have broad compatibility and reach.</p></blockquote>
<p>I hope (oh dear lord am I gonna say this?!?) others can follow in Microsoft&#8217;s footsteps here and be respectful to users.<a href="#snark">*</a></p>
<p><a name="snark">*</a> Yes, I also know Microsoft isn&#8217;t the first to do this. I&#8217;m being snarky.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/microsoft-deprecating-ie6-the-right-way/feed/</wfw:commentRss>
		<slash:comments>0</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>
		<item>
		<title>Don&#8217;t Stop Supporting IE6</title>
		<link>http://www.tobyjoe.com/2009/08/dont-stop-supporting-ie6/</link>
		<comments>http://www.tobyjoe.com/2009/08/dont-stop-supporting-ie6/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 17:25:33 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1112</guid>
		<description><![CDATA[Planning to drop support for IE 6? Instead, redefine "support" and stay positive.]]></description>
			<content:encoded><![CDATA[<p>Planning to drop support for IE 6? Instead, redefine “support” and stay positive.</p>
<p>Yes, creating cross-browser experiences can be painful when support for Internet Explorer 6 (IE6) is required. There are dozens of hacks to get around certain issues, and it is possible to design experiences that are functionally identical on IE6 and more <em>modern</em> browsers. It may mean designers don&#8217;t have carte blanche, but that should be fine if their companies or clients mandate full IE6 support. <strong>Any good experience designer can work within constraints and still kick ass.</strong></p>
<p>Still, a lot of folks are lobbying their companies, clients, and partners to <a href="http://webworkerdaily.com/2009/08/06/is-it-time-to-just-say-no-to-internet-explorer-6/">drop support for IE 6</a>. </p>
<p>My issue is how they&#8217;re doing it. The more dickish folks are throwing up an insulting roadblock, patronizing IE 6 users. </p>
<p>A more <a href="http://www.ie6nomore.com/code-samples.html">practical approach</a> is to encourage users to upgrade with prominent, consistent notices. This angle isn&#8217;t terrible, but still alienates users and disrupts the experience for those users almost as much as a modified or &#8220;broken&#8221; IE6 experience. It&#8217;s just not friendly, or consistent with the brand message that usually mandates an identical UI across target browsers.</p>
<h2>Another Option: Boring but Practical</h2>
<p>My suggestion is to take this to the contracts. Redefine the word &#8220;support&#8221; as it applies to user agents (like browsers). Look at the cost/benefit of all types of support for all types of user agents. This should be a part of your business modeling.</p>
<p>Instead of refusing content to IE6 users or breaking brand guidelines by disrupting their experience with a patronizing notice, why not relegate them into a tier of <strong>Content-Level Support</strong> as opposed to <strong>Design Support</strong>?</p>
<p>Good sites already do this with a stylesheet for print: we don&#8217;t penalize printers for their lack of a good box model. The same is true of screen readers and most RSS readers. Maybe you can think of IE6 as a <strong>perfectly viable</strong> user agent for <em>consuming content</em>, but <strong>cost prohibitive</strong> for <em>rendering top-tier experience design</em>. Serve your print styles to IE6 if you don&#8217;t want to offer design support. Or serve a basic white-on-black stylesheet. Or no stylesheet. Pretend IE6 is the Googlebot or JAWS or any other non-graphical user agent. Just don&#8217;t <strong>punish</strong> people or talk down to them.</p>
<h2>Channel Your Frustration Properly</h2>
<p>You don&#8217;t have to be a dick to your less-endowed users. Shift them, officially, to a tier you, your clients, your company, and your partners agree upon and move on. Just make sure you&#8217;ve built an economic model that includes the IE6 users and estimates the cost of all possible decisions. Look at the realities of <a href="http://blog.digg.com/?p=878">IE6 users of Digg</a> to understand the complexities facing the people your cocky designers and lazy developers want to patronize or abandon.</p>
<p>Justify relegating IE6 with real numbers or choose to give it design support and force your designers to work within the constraints. They do get paid to work, after all. If they can&#8217;t create great experience design that doesn&#8217;t fuck over the people coding those experiences, fire them. Hire designers who understand browsers.</p>
<p>No matter what you do, keep your users&#8217; needs first. They&#8217;re the ones you can&#8217;t replace.</p>
<h2>A Great Resource</h2>
<p>A few months back, I started up a <a href="http://github.com/tobyjoe">GitHub</a> project to create a baseline CSS file for all legacy browsers. Around the time I got contributions from folks at <a href="http://barbariangroup.com/">work</a>, I found out about similar (but completed) projects out in the wild. One such project can be found here: <a href="http://code.google.com/p/universal-ie6-css/">http://code.google.com/p/universal-ie6-css/</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/dont-stop-supporting-ie6/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Augmented Reality Bites</title>
		<link>http://www.tobyjoe.com/2009/07/augmented-reality-bites/</link>
		<comments>http://www.tobyjoe.com/2009/07/augmented-reality-bites/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 02:36:50 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Advertising]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=970</guid>
		<description><![CDATA[I have this new rule I'm working on: <strong>If it's easier to buy your product than to engage with your marketing, you're doing it wrong</strong>.
]]></description>
			<content:encoded><![CDATA[<p>I have this new rule I&#8217;m working on: <strong>If it&#8217;s easier to buy your product than to engage with your marketing, you&#8217;re doing it wrong</strong>. </p>
<p>If you are trying to raise awareness, forcing a user to work is generally a bad idea. You have to give users something of high value while minimizing their effort if you want to build a better reputation. </p>
<p>If your goal is conversion, you should be especially careful of the barriers to entry and usage. This seems obvious, but brands consistently require too much of users in their digital marketing efforts.</p>
<h2>Augmented Reality in Ads</h2>
<p>Industry rags and blogs have spent months reporting on a steady stream of <em>augmented reality</em> (AR) ideas in marketing ever since GE launched their <a href="http://ge.ecomagination.com/smartgrid/#/landing_page">Smart Grid</a> AR site.</p>
<p>A recent entry into the pool is for <a href="http://www.always.com/infinity/always_infinity.jsp#/experience-the-magic">Always Infinity</a>. The site claims to show you a magic trick. </p>
<p>All you have to do is follow the <strong>instructional video</strong> and simple <strong>two-step process</strong> of printing a graphic out on a sheet of paper and holding it up to the camera while it superimposes the <em>magic</em>. What&#8217;s the magic in this case? A 3d animation of a rabbit in a hat. It&#8217;s cute, but fluff. The real magic trick is making 5-10 minutes disappear with nothing to show for it &#8211; including a greater appreciation of their new pads. </p>
<p>This is how most of these campaigns work. I think they&#8217;re mostly flops. They&#8217;re ideas pulled out of the bookmarks bar of a desperate art director, sold to a client as the next big thing, and supported by an industry press with a shortage of interesting topics.</p>
<p>There were two instances of this particular form of webcam-based AR in recent marketing efforts that were successful. The first was the aforementioned GE project. This was the first big brand use of AR and it seemed like advanced – if novel – tech coming from GE. It was cool and not overtly pushing a product. </p>
<p>The second was <a href="https://www.prioritymail.com/simulator.asp">a project developed by AKQA</a> for the United States Postal Service (USPS) that let users hold items up to their camera to find the best Priority Mail shipping box. The damned thing had <strong>a purpose</strong>, and used the tech in an interesting way. </p>
<p>Everyone else doing this stuff has been trying to fit in, adding to the noise. They&#8217;ve expected users to find inspiration in the declining novelty of webcam AR, put in the work of printing an image, engage in the theatrics, and eagerly <em>send to a friend</em>.</p>
<p>Instead of patronizing your audience, pushing this gimmick as <em>new to them</em>, why not find a real reward for engagement? Make the payoff ten times as valuable as the work users put in. Only the first project to use a gimmick gets to call the work itself the payoff.</p>
<p>Let me repeat my new rule to the consumer brands out there looking for gimmicks that make demands of people: <strong>If it&#8217;s easier to buy your product than to engage with your marketing, you&#8217;re doing it wrong.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/augmented-reality-bites/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Twitter: 1, Robots: 0</title>
		<link>http://www.tobyjoe.com/2009/07/twitter-1-robots-0/</link>
		<comments>http://www.tobyjoe.com/2009/07/twitter-1-robots-0/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 17:26:08 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=937</guid>
		<description><![CDATA[With the insanity around the Yahoo and Bing/Microsoft relationship, I wonder if Twitter – or an app built around it – won't become the search and recommendation tool we all really want.]]></description>
			<content:encoded><![CDATA[<h2>Types of Recommendation</h2>
<p>Currently, systems deliver recommendations (like search results, products, or compelling content) based on two types of user input: explicit and implicit. </p>
<h3>What You Tell the Robots</h3>
<p>Explicit input is what you do to purposefully tune a system. You might opt out of tech news and opt in to sports. You might type in a couple of your key stock symbols. Explicit input is <em>configuration</em>. The cynical idea behind configurable services is that users will interact more with a tool they&#8217;ve spent time customizing. This can be true, but it can also alienate non-tinkerer audiences. More importantly, forcing someone to create their own portal removes any kind of authority from the service in question. It exposes the robot behind the curtain.</p>
<div class="note">Note: If personalization functionality is requested by users, you need to rethink your information architecture. That is, if focus groups and ethnographic research tell you that users are confused by and drowning in irrelevant content, you fucked up. Time for a do-over. Solve the personalization issue by tuning your architecture. Make the system easier to use. Kill the robots.</div>
<h3>The Robots are Watching You</h3>
<p>Implicit input is what you do without knowing you&#8217;re tuning a system. Where you click, what you search for, and what you ignore all contribute. Coming into a magazine site from a particular Google search might change the content you see on the page. Banner ads are usually served based on what you&#8217;re reading and what the ad network knows about you. On Amazon, anything you look at feeds into the recommendation system that shows you products that (may) interest you. In fact, I love pranking people by sending links to enema kits on Amazon. It pollutes their recommendations for a while. This is implicit input at work. </p>
<h3>The Robots are Watching Everyone</h3>
<p>An additional way that sites make recommendations is based on the stuff you tell them you want (explicit input), the stuff you show them you want (implicit input), and the input from other people like you. There are some sweet algorithms out there for determining that people are alike and using the tendencies of members in a group to recommend things to other members in the group. </p>
<p>In theory, the idea is compelling. Unfortunately, most of these algorithms end up turning individuals into caricatures of themselves or of their demographic group. It&#8217;s infeasible for a system to know enough about an individual to make consistently great recommendations. No computer will ever be able to recommend a book or a date or a pair of shoes with the same accuracy as a friend. More importantly, they can&#8217;t deliver the same accuracy as a casual acquaintance. </p>
<p>Humans can fill in gaps and infer rich meaning from subtle body language, tone, and personal experience. Those factors are noticeably absent in most online recommendation, search, and content delivery systems. </p>
<h2>The Perfect System</h2>
<p>I don&#8217;t think people want to interact much with systems to find information. Weird view, I know. </p>
<p>Some systems are certainly popular (Google) and and very successful (Amazon), but the affinity people feel for those systems is a form of Stockholm Syndrome. </p>
<p>What we all want is to have our grandfather (or an equivalent symbol of infinite wisdom and no-bullshit-taking) sitting on our shoulder, pointing us in the right direction at all times. We don&#8217;t need <em>confidence</em> in recommendations (of content, purchases, people) as much as <em>faith</em>. We want to Ask Jeeves, but we want Jeeves to have a clue – not a hundred page slush pile of possible hits. </p>
<p>Bad or boring recommendations lead to a lack of faith in recommendation systems in general and contribute to an overall fatigue. Recommendations need to inspire either confidence or faith. Confidence comes when you&#8217;re 100% accurate at all times. Faith comes when I feel like you understand me. Your &#8220;you might like&#8230;&#8221; recommendations are something I care about because I empathize with you. Confidence is for robots. Faith is for humans.</p>
<h2>Enter Social Networks</h2>
<p>There is a lot of potential in the networks of people we curate online, the reviews we write, the reservations we make, the choices we make on the spot in stores. The data doesn&#8217;t say who we are and how we feel, and no machine can step in to fill in the gaps and make the proper inferences. </p>
<p>The best system will have hints of the &#8220;#lazyweb&#8221; approach to Twitter. I ask my curated audience for advice. Even if I don&#8217;t know them all personally, and thus have little confidence in their individual experience and knowledge of my personality, I have high <em>faith</em> in the mechanism. I ask, and I receive. From people. </p>
<p>It&#8217;s a model as old as language. Until computers can empathize, algorithms need to shift their focus. Instead of attempting to <em>make</em> recommendations, technology should attempt to <em>facilitate</em> recommendations.</p>
<p>Twitter is on the right track with the new focus on search. I&#8217;ve long maintained that the best source of purchase advice is Twitter search. Twitter is a barometer. Nobody searches Twitter to find out definitive, high-confidence information. Instead, we search to get a feel for what people <em>seem to know</em>. We read short statements and either empathize with them automatically or shut them out. We have faith in our ability to read between the lines and derive answers. We use personal brands as clues to authority, bias, and brilliance.</p>
<p>It&#8217;s very personal and all too human.</p>
<p>With the insanity around the Yahoo and Bing/Microsoft relationship, I wonder if Twitter – or an app built around it – won&#8217;t become the search and recommendation tool we all really want.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/twitter-1-robots-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Emperor&#8217;s New API</title>
		<link>http://www.tobyjoe.com/2009/07/the-emperors-new-api/</link>
		<comments>http://www.tobyjoe.com/2009/07/the-emperors-new-api/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:10:59 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=816</guid>
		<description><![CDATA[<strong>If you're adding a REST API to your site, you're probably doing something wrong.</strong> Maybe.]]></description>
			<content:encoded><![CDATA[<div class="note">Note: this is being cross-posted, with additional content, from the Adobe Experience Design site, <a href="http://xd.adobe.com">Inspire</a>.</div>
<p>Strategists everywhere are pushing companies to add APIs to their online properties. Job postings for web developers and architects invariably require experience working with and developing APIs. It comes up in sales meetings, pitches, and casual conversations with industry folks all the time. I&#8217;m often left wondering if the term &#8220;API&#8221; has lost its real meaning and become sort of a stand-in for a handful of fuzzy concepts. </p>
<h2>REST APIs are Buzzworthy</h2>
<p>In the API chatter, there&#8217;s a huge focus on RESTful APIs. Everyone wants a RESTful API. Web developers love <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm">REST</a> architectures because the fixed semantics and stateless mapping of resources to URIs lowers the barrier to entry for integration tasks. Devs no longer have to struggle to understand proprietary architectural touches. No WSDL files need to be parsed. No expensive, scale-resistant state-managing caches need to be added. The URI we use in the browser is the same URI our apps use to read JSON or XML, etc. It&#8217;s a glorious thing, REST. I absolutely love the style, and preach the benefits to clients whenever possible.</p>
<p>Another thing I peach, when I can, sounds scandalous at first. That message: <strong>If you&#8217;re adding a REST API to your site, you&#8217;re probably doing something wrong.</strong> Maybe.</p>
<h2>REST APIs are Everywhere. Right?</h2>
<p>All the big sites are exposing REST APIs. Twitter has on. Flickr has one. Netflix. Microsoft SharePoint. Everyone, man. Everyone.</p>
<p>But how many are as RESTful as they could be?</p>
<p>If you see the value in a REST API, the last thing you want to do is create something separate from your &#8220;main&#8221; site or service. Your site <strong>is</strong> your &#8220;API&#8221; if you&#8217;re being RESTful. If you force a separation or bolt on a separate chunk of URIs meant for <em>API clients</em> you&#8217;re probably wasting resources and muddying your domain.</p>
<p>With REST, you should have a distinct, stateless URI for each <em>conceptual resource</em> you provide and should respond to the appropriate HTTP verbs (most commonly, GET, PUT, POST, DELETE, HEAD, TRACE, and OPTIONS). </p>
<p>For example, if you have the concept of a user profile for someone named &#8220;TobyJoe&#8221; you should have a single URI that represents that profile and that URI should serve any supported format a client application requests. It doesn&#8217;t matter what the URI looks like, but there should only be one way of accessing that conceptual resource. You can serve up XML, JSON, HTML, plain text, SVG, or any combination of formats you want. HTTP and the REST style already accommodate for this using certain HTTP request headers. This problem has been solved since the Web existed (basically). And yet, we see a lot of big sites offering two distinct sets of URIs: one for their &#8220;site&#8221; traffic and one for their &#8220;API&#8221; traffic.</p>
<p>Really, it shouldn&#8217;t matter if someone is requesting the resource at a URI from Safari, Tweetie, cURL, a Flash RIA, or any other HTTP client. The REST style can cover all the content switching and access management you need and you can have a single set of URIs, a single set of semantics, a single engineering team, and a single set of resources to support. The user experience for your third-party development partners will be improved as well.</p>
<h2>Twitter: An Easy Example</h2>
<p>So why are there two URIs for my Twitter status feed? One for the Twitter-branded HTML (with great microformat support!) at <a href="http://twitter.com/tobyjoe">http://twitter.com/tobyjoe</a> and one for XML at <a href="http://twitter.com/statuses/user_timeline/tobyjoe.xml">http://twitter.com/statuses/user_timeline/tobyjoe.xml</a>?</p>
<p>It&#8217;s the same data, in different formats. <strong>It&#8217;s the same concept: status messages for tobyjoe.</strong> Most of the formats Twitter supports are available at the <em>http://twitter.com/statuses/user_timeline/tobyjoe.{EXTENSION}</em> address. Why not the HTML version with the sweet microformats? </p>
<p>Note: I&#8217;m sure Twitter has many reasons for this separation. Legacy clients, their ever-changing architecture and unprecedented growth, organizational investment in this style. They have an amazing team over there. I&#8217;m only using Twitter as an example because so many developers are familiar with their API. </p>
<p>Still, as both a user and client developer, I&#8217;d prefer to see a single URI (or at least one URI template) for each conceptual resource rather than one URI for &#8220;people&#8221; and one URI template for &#8220;machines&#8221;.</p>
<h2>It&#8217;s Not Always That Easy</h2>
<p>I know that there are lots of hurdles with development around live products. I don&#8217;t discount the operational challenges. I don&#8217;t necessarily chastise folks who stray from REST. I would love to see the concept of the RESTful API default to a slightly different meaning that what I see on the web today. Instead of saying, &#8220;We are going to add a REST API to our site!&#8221; I&#8217;d love to see companies say, &#8220;We are expanding the choice of representation formats and verbs for some of our URLs!&#8221; Not as sexy sounding, but way sexier.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/the-emperors-new-api/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Toward the Bare Metal: From Flash to Processing, OpenFrameworks, and Beyond</title>
		<link>http://www.tobyjoe.com/2009/07/toward-the-bare-metal/</link>
		<comments>http://www.tobyjoe.com/2009/07/toward-the-bare-metal/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 14:47:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=787</guid>
		<description><![CDATA[There is a common pattern in the contemporary interactive digital art world: artists' tools are getting more hardcore under the hood.
]]></description>
			<content:encoded><![CDATA[<div class="note">Note: this is being cross-posted, with additional content, from the Adobe Experience Design site, <a href="http://xd.adobe.com">Inspire</a>.</div>
<p>There is a common pattern in the contemporary interactive digital art world: artists&#8217; tools are getting more hardcore under the hood.</p>
<p>A lot of the current stars cut their teeth (and still make their living) on Flash. I was a very active member of a messageboard in the late nineties geared towards web and interactive design and development – a distinction I share with many of the current stars. The messageboard (dreamless.org) is long gone, but most everyone is still in touch, still sharing code and competing or collaborating. It&#8217;s nice to a fairly constant community, even if their tools have changed.</p>
<p>A lot of people moved from Flash to <a href="http://processing.org">Processing</a> – a great Java-based framework and IDE – as their interests moved away from wide distribution (via the Flash player) towards lower-level access to the hardware. Being able to work (almost) directly with OpenGL, for example, was a huge benefit. Processing provides a set of capabilities that is different than that offered by the Flash player, making it a great supplement for digital artists.</p>
<p>These days, the most adventurous (Flash-using) artists are venturing outside of both Flash and Processing. They are leaving their virtual machines behind, diving down into C++, OpenGL, OpenAL, and raw C code. This is a scary place for a lot of digital artists, who often lack CS degrees. Instead of taking the usual CS approach of learning from the hardware up, touching higher level languages (like Java and Actionscript) and virtual machines (like the Java VM or Flash Player) dead last, artists start at the top and move down, stepping into dark, complex, fault-intolerant waters only when they need access to more powerful APIs or direct hardware access. Knowledge is built pragmatically instead of comprehensively – a fact that keeps their perspective unique and their work fresh.</p>
<p>The top toolset for the hardcore digital artists right now is <a href="http://www.openframeworks.cc/">OpenFrameworks</a>. It&#8217;s a great C++ library with a passionate community, not at all unlike, or separate from, the Processing and Flash communities. This summer, The Barbarian Group will be announcing a (possibly open) framework with a similar purpose. Flint is a framework for C++ and Objective-C development, allowing cross-platform development that is still platform-specific (if that makes any sense), and includes support for a certain popular mobile device&#8230;</p>
<p>These frameworks are vital for the progression of digital artwork because they take very tedious, daunting tasks and boilerplate code and wrap them up in attractive, semantically-appropriate domain-specific languages. In other words, <strong>they solve for the user experience of the digital artist</strong>. They help minimize painful context switches and free artists up to focus on the art. Instead of trying to remember all the arguments and gotchas with creating double-buffered windows on different operating systems, the artists can spend time creating textures and thinking of new interaction models.</p>
<p>For a framework to succeed, it has to become almost invisible to the coder. This is true of all assistive technologies, and, in my opinion, all technologies should be assistive. </p>
<p>Check out <a href="http://www.flickr.com/photos/flight404/sets/72157620887986256/">Robert Hodgin&#8217;s newest work</a>, using Flint.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/toward-the-bare-metal/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>SproutCore Article on O&#8217;Reilly InsideRIA Blog</title>
		<link>http://www.tobyjoe.com/2008/08/sproutcore-article-on-o-reilly-insideria-blog/</link>
		<comments>http://www.tobyjoe.com/2008/08/sproutcore-article-on-o-reilly-insideria-blog/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 22:33:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>I&#8217;m now blogging for <a href="http://insideria.com">InsideRIA</a>. ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m now blogging for <a href="http://insideria.com">InsideRIA</a>. My <a href="http://www.insideria.com/2008/08/thick-clients-with-sproutcore.html">first article</a> is on <a href="http://sproutcore.com/">SproutCore</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/08/sproutcore-article-on-o-reilly-insideria-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DataMapper/Merb Ambiguous SQLite Error</title>
		<link>http://www.tobyjoe.com/2008/07/datamapper-merb-ambiguous-sqlite-error/</link>
		<comments>http://www.tobyjoe.com/2008/07/datamapper-merb-ambiguous-sqlite-error/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 17:50:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>If you get an error such as:</p><pre><code>near ")": syntax error</code></pre><p>Check to see if you have any models declaring themselves as DataMapper::Resource but <span class="caps">WITHOUT</span> any property declarations.</p>]]></description>
			<content:encoded><![CDATA[<p>If you get an error such as:</p>
<pre><code>near ")": syntax error</code></pre>
<p>Check to see if you have any models declaring themselves as DataMapper::Resource but <span class="caps">WITHOUT</span> any property declarations.</p>
<p>No meaningful error is reported for this case at the moment (with <span class="caps">HEAD</span> as of last night) so it&#8217;s a weird one to debug &#8211; especially if you generate a bunch of model classes ahead of defining their behavior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/datamapper-merb-ambiguous-sqlite-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Business Value in rSpec Stories</title>
		<link>http://www.tobyjoe.com/2008/07/business-value-in-rspec-stories/</link>
		<comments>http://www.tobyjoe.com/2008/07/business-value-in-rspec-stories/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 16:23:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Because rSpec provides a friendly, more readable means of describing use cases/stories, I’ve taken to inserting business value statements directly into the specs. While this could get unwieldy, I think it helps keep stories focused while providing clear context and value to coders.</p>]]></description>
			<content:encoded><![CDATA[<p>Because rSpec provides a friendly, more readable means of describing use cases/stories, I’ve taken to inserting business value statements directly into the specs. While this could get unwieldy, I think it helps keep stories focused while providing clear context and value to coders.</p>
<pre><code>
describe "Filtered fields" do
it "should filter content on save to cache expensive transforms while preserving source" do
# do it
end
end
</code></pre>
<p>Doing this in xUnit would probably cause you to have a camel-induced nervous breakdown.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/business-value-in-rspec-stories/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPhone Unit Testing with Ruby</title>
		<link>http://www.tobyjoe.com/2008/07/iphone-unit-testing-with-ruby/</link>
		<comments>http://www.tobyjoe.com/2008/07/iphone-unit-testing-with-ruby/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 19:11:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Mobile Computing]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Well, <a href="http://drnicwilliams.com/">Dr. Nic</a> is kicking ass again.</p><p>Though I&#8217;m a recent convert to <a href="http://rspec.info/">rSpec</a> for my <a href="http://merbivore.com/">Merb</a> work, I actually prefer to unit test Objective-C with <a href="http://developer.apple.com/tools/unittest.html">OCUnit</a>. I think it&#8217;s just part of that prejudice that tests should be written in the language of the app. Also, the more &#8216;natural&#8217; it feels to write tests, the more likely folks will do so. In my experience, a great number of Obj-C developers have no interest in writing tests in the first place&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Well, <a href="http://drnicwilliams.com/">Dr. Nic</a> is kicking ass again.</p>
<p>Though I&#8217;m a recent convert to <a href="http://rspec.info/">rSpec</a> for my <a href="http://merbivore.com/">Merb</a> work, I actually prefer to unit test Objective-C with <a href="http://developer.apple.com/tools/unittest.html">OCUnit</a>. I think it&#8217;s just part of that prejudice that tests should be written in the language of the app. Also, the more &#8216;natural&#8217; it feels to write tests, the more likely folks will do so. In my experience, a great number of Obj-C developers have no interest in writing tests in the first place&#8230;</p>
<p>Still, <a href="http://drnicwilliams.com/2008/07/04/unit-testing-iphone-apps-with-ruby-rbiphonetest/">rbiphonetest</a> seems like a great project and I imagine several of the &#8220;pure&#8221; Web developers on my team who are itching to get into Objective-C will quite enjoy a familiar testing framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/iphone-unit-testing-with-ruby/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Eagerly Awaiting Merb 1.0, DataMapper 1.0</title>
		<link>http://www.tobyjoe.com/2008/07/eagerly-awaiting-merb-1-0-datamapper-1-0/</link>
		<comments>http://www.tobyjoe.com/2008/07/eagerly-awaiting-merb-1-0-datamapper-1-0/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 18:33:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>I&#8217;ve been having a blast with Merb and DataMapper lately.</p><p>Like everyone else who prefers clean over clever and true pragmatism over dogma, I prefer Merb over some of the other options out there for day to day Web apps.</p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been having a blast with Merb and DataMapper lately.</p>
<p>Like everyone else who prefers clean over clever and true pragmatism over dogma, I prefer Merb over some of the other options out there for day to day Web apps.</p>
<p>That said, I&#8217;ve not done any major work with the two yet. I have some of my long-shelved personal apps being rewritten/written on Merb master and DataMapper master, but I am kind of holding off on larger commitments until the 1.0 release.</p>
<p>If you haven&#8217;t checked out <a href="http://merbivore.com">Merb</a> and <a href="http://datamapper.org/">Datamapper</a> &gt; 0.9 you should.</p>
<p>I&#8217;m even coming around on rSpec, though I still prefer xUnit style testing because the language and flow is the same across all the types of development I do (PHP, Ruby, Objective-C, Java).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/eagerly-awaiting-merb-1-0-datamapper-1-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unit Testing and the iPhone SDK</title>
		<link>http://www.tobyjoe.com/2008/06/unit-testing-and-the-iphone-sdk/</link>
		<comments>http://www.tobyjoe.com/2008/06/unit-testing-and-the-iphone-sdk/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 22:40:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Mobile Computing]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>If anyone sorts out how to get the SenTest framework to play nice with Cocoa Touch apps, kindly let me know.</p>]]></description>
			<content:encoded><![CDATA[<p>If anyone sorts out how to get the SenTest framework to play nice with Cocoa Touch apps, kindly let me know.</p>
<p>I found a <a href="http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/UnitTesting/">Google project</a> that looks promising, but haven&#8217;t looked into it.</p>
<p>Do my footwork for me!</p>
<p>Coding blind (no tests) is causing my ulcer to flare up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/06/unit-testing-and-the-iphone-sdk/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>ActiveRecord to_xml Security Strategy</title>
		<link>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/</link>
		<comments>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 08:15:38 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>As noted on <a href="http://blog.wolfman.com/articles/2007/06/26/rest-scaffold_resource-security-warning">blog.wolfman.com</a>, there is a security problem when using the scaffolded respond_to set-up. By default, all columns in a given record will be displayed.</p>]]></description>
			<content:encoded><![CDATA[<p>As noted on <a href="http://blog.wolfman.com/articles/2007/06/26/rest-scaffold_resource-security-warning">blog.wolfman.com</a>, there is a security problem when using the scaffolded respond_to set-up. By default, all columns in a given record will be displayed.</p>
<p>The write-safety mechanism provided by attr_accessible doesn&#8217;t help in this situation, but having to write a custom to_xml method that steps through each of these already-whitelisted attributes is a bit silly and not very <span class="caps">DRY</span>.</p>
<p>My solution is to do something like:</p>
<pre><code>def to_xml(options = {})
    super({:only =&gt; self.class.accessible_attributes}.merge(options))
end
</code></pre>
<p>Breaking that out, as I do, into a SecureModel mix-in seems like a good move.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails in .net</title>
		<link>http://www.tobyjoe.com/2007/02/ruby-on-rails-in-net/</link>
		<comments>http://www.tobyjoe.com/2007/02/ruby-on-rails-in-net/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 07:26:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>A while back, I wrote an intro to Rails article for the FutureNet publication, <em>.net</em></p><p>I guess it was put online as well as in print (in a tough-to-find import mag). I just stumbled across the <a href="http://www.netmag.co.uk/zine/tools/ror-back-on-track">link</a> tonight.</p>]]></description>
			<content:encoded><![CDATA[<p>A while back, I wrote an intro to Rails article for the FutureNet publication, <em>.net</em></p>
<p>I guess it was put online as well as in print (in a tough-to-find import mag). I just stumbled across the <a href="http://www.netmag.co.uk/zine/tools/ror-back-on-track">link</a> tonight.</p>
<p>The formatting doesn&#8217;t seem to be there, but the info is clear enough. ;)</p>
<p>I don&#8217;t get a chance to write on tech topics as frequently as I&#8217;d like. I should work on that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/02/ruby-on-rails-in-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Big Nerd Ranch</title>
		<link>http://www.tobyjoe.com/2007/02/big-nerd-ranch/</link>
		<comments>http://www.tobyjoe.com/2007/02/big-nerd-ranch/#comments</comments>
		<pubDate>Fri, 23 Feb 2007 08:50:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Earlier this month, I managed to do something I&#8217;ve wanted to do for around five years: I attended the Cocoa Boot Camp at the <a href="http://www.bignerdranch.com/">Big Nerd Ranch</a> in Georgia.</p>]]></description>
			<content:encoded><![CDATA[<p>Earlier this month, I managed to do something I&#8217;ve wanted to do for around five years: I attended the Cocoa Boot Camp at the <a href="http://www.bignerdranch.com/">Big Nerd Ranch</a> in Georgia.</p>
<p>I first picked up <a href="http://aaron.bignerdranch.com/">Aaron Hillegass</a>&#8217; book, <a href="http://www.amazon.com/Cocoa-Programming-Mac-OS-2nd/dp/0321213149/sr=1-1/qid=1172200637/ref=sr_1_1/104-7371283-5311944?ie=UTF8&#38;s=books">Cocoa Programming for Mac <span class="caps">OS X</span></a>, back in 2001, immediately after it was published. I&#8217;d been on <span class="caps">OS X</span> since the earliest public builds, and loved it. The underlying tech &#8211; from the kernel to the app frameworks &#8211; was exciting to me as a relative newbie to both the Apple world and desktop app development.</p>
<p>I&#8217;ve since owned every edition of the book, and almost every other Cocoa/Obj-C book out there, but have never taken a class on the subject. I did attend <span class="caps">WWDC</span> last year, but the topical sessions aren&#8217;t the same as an in-depth classroom experience (though they are quite valuable).</p>
<p>One of the benefits of a session at <span class="caps">BNR</span> is that all distractions are removed for a week. Students are taken away from their families, comfy chairs, favorite bourbons, loud offices, DVRs and insane clients and locked away at a remote facility for five days. They are forced to learn, taking breaks only for meals comprised of fried food and iced tea so sweet the supersaturated sugars crystallize in plain site.</p>
<p>Another benefit of the Cocoa Boot Camp is that Aaron guides you through his book from start to finish, lecturing and answering questions as he goes. The structure, immediate feedback, and question sessions are worth the cash on their own.</p>
<p>Three of us from The Barbarian Group attended (Ashley Holtgraver, Keith Butters, and myself) and I think we all found the class inspiring, educational and fun. I&#8217;d recommend any of the <span class="caps">BNR</span> courses to folks without a second thought.</p>
<p>I&#8217;ll write a more in-depth review of the class soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/02/big-nerd-ranch/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
