<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>TobyJoe</title>
	
	<link>http://www.tobyjoe.com</link>
	<description>Toby Joe Boudreaux on Tech, Creativity, UX, and All Things Digital</description>
	<lastBuildDate>Wed, 28 Oct 2009 02:41:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TobyJoe" type="application/rss+xml" /><feedburner:emailServiceId>TobyJoe</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Of Mice and Men</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/IvR9b8RKGV8/</link>
		<comments>http://www.tobyjoe.com/2009/10/of-mice-and-men/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:18:55 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1301</guid>
		<description><![CDATA[We lost a cute house and an amazing opportunity... but gained... an amazing opportunity?]]></description>
			<content:encoded><![CDATA[<p>I wrote a post earlier today that outlined, in detail, plans <a href="http://mihow.com">Michele</a> and I had to leave NYC and buy a home in DC. Reading it over, I realized it didn&#8217;t belong here. We&#8217;ve already lost morale, money, time, and friendships and I don&#8217;t believe much in wallowing.</p>
<p>Instead, I thought I&#8217;d update the curious on our future. About the change of plans, I&#8217;ll just say that finding and buying a solid house is harder than it looks.</p>
<p>Starting next week, I will be working as Head of Product and Design for <a href="http://www.bloomberg.com">Bloomberg.com</a>. I probably can&#8217;t say much about it right now, but, to borrow a (trademarked) phrase from some friends down in SoHo, it&#8217;s gonna be awesome.</p>
<p>Though my days won&#8217;t be spent heads-down in a debugger, I&#8217;m excited to spend my free time picking up long-delayed side projects. Expect updates here on both iPhone and web stuff, as well as more of my standard UX, tech, and strategy ranting.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=IvR9b8RKGV8:gTfPfdwC-bk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=IvR9b8RKGV8:gTfPfdwC-bk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=IvR9b8RKGV8:gTfPfdwC-bk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=IvR9b8RKGV8:gTfPfdwC-bk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=IvR9b8RKGV8:gTfPfdwC-bk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=IvR9b8RKGV8:gTfPfdwC-bk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=IvR9b8RKGV8:gTfPfdwC-bk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=IvR9b8RKGV8:gTfPfdwC-bk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=IvR9b8RKGV8:gTfPfdwC-bk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=IvR9b8RKGV8:gTfPfdwC-bk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/IvR9b8RKGV8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/10/of-mice-and-men/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/10/of-mice-and-men/</feedburner:origLink></item>
		<item>
		<title>I Am the Former CTO of The Barbarian Group</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/f_52U8khEUc/</link>
		<comments>http://www.tobyjoe.com/2009/10/i-am-the-former-cto-of-the-barbarian-group/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 20:14:42 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1297</guid>
		<description><![CDATA[<p>I don&#8217;t have a big announcement drafted, but if you are a friend or colleague who uses my <a href="http://barbariangroup.com">Barbarian Group</a> email address, please switch over to my tobyjoe.com address. </p>]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t have a big announcement drafted, but if you are a friend or colleague who uses my <a href="http://barbariangroup.com">Barbarian Group</a> email address, please switch over to my tobyjoe.com address. </p>
<p>Today is my last day at the most fun, creative, weird, and politically-incorrect digital advertising agency in the world. Everything is mutual, long-planned, and awesome. It&#8217;s been hard keeping a secret for the past couple of months, but today is the day!</p>
<p>I&#8217;ll write something longer, with details about the future soon! For now, I&#8217;m trying to finish up some C++ code!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f_52U8khEUc:qg0sgT4dzZ8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f_52U8khEUc:qg0sgT4dzZ8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f_52U8khEUc:qg0sgT4dzZ8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f_52U8khEUc:qg0sgT4dzZ8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f_52U8khEUc:qg0sgT4dzZ8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f_52U8khEUc:qg0sgT4dzZ8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f_52U8khEUc:qg0sgT4dzZ8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f_52U8khEUc:qg0sgT4dzZ8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f_52U8khEUc:qg0sgT4dzZ8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f_52U8khEUc:qg0sgT4dzZ8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/f_52U8khEUc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/10/i-am-the-former-cto-of-the-barbarian-group/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/10/i-am-the-former-cto-of-the-barbarian-group/</feedburner:origLink></item>
		<item>
		<title>Cartilage: A Monk Skeleton for DataMapper</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/rWKnlVn8rx8/</link>
		<comments>http://www.tobyjoe.com/2009/08/cartilage-a-monkrb-skeleton-for-datamapper/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 20:17:36 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Ruby]]></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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=rWKnlVn8rx8:wWDZOVXWr7s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=rWKnlVn8rx8:wWDZOVXWr7s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=rWKnlVn8rx8:wWDZOVXWr7s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=rWKnlVn8rx8:wWDZOVXWr7s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=rWKnlVn8rx8:wWDZOVXWr7s:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=rWKnlVn8rx8:wWDZOVXWr7s:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=rWKnlVn8rx8:wWDZOVXWr7s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=rWKnlVn8rx8:wWDZOVXWr7s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=rWKnlVn8rx8:wWDZOVXWr7s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=rWKnlVn8rx8:wWDZOVXWr7s:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/rWKnlVn8rx8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/cartilage-a-monkrb-skeleton-for-datamapper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/cartilage-a-monkrb-skeleton-for-datamapper/</feedburner:origLink></item>
		<item>
		<title>Lazybones: A Monk Skeleton for CouchDB and Sinatra</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/PlsbRhP2OZo/</link>
		<comments>http://www.tobyjoe.com/2009/08/monkrb-skeleton-for-couchdb-and-sinatra/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 16:22:28 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Ruby]]></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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=PlsbRhP2OZo:vcAjcAY87XA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=PlsbRhP2OZo:vcAjcAY87XA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=PlsbRhP2OZo:vcAjcAY87XA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=PlsbRhP2OZo:vcAjcAY87XA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=PlsbRhP2OZo:vcAjcAY87XA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=PlsbRhP2OZo:vcAjcAY87XA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=PlsbRhP2OZo:vcAjcAY87XA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=PlsbRhP2OZo:vcAjcAY87XA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=PlsbRhP2OZo:vcAjcAY87XA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=PlsbRhP2OZo:vcAjcAY87XA:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/PlsbRhP2OZo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/monkrb-skeleton-for-couchdb-and-sinatra/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/monkrb-skeleton-for-couchdb-and-sinatra/</feedburner:origLink></item>
		<item>
		<title>UX in Bed</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/ALjgn3oLBQ4/</link>
		<comments>http://www.tobyjoe.com/2009/08/ux-in-bed/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 19:08:25 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[iPhone]]></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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ALjgn3oLBQ4:GvbScZRH6pU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ALjgn3oLBQ4:GvbScZRH6pU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ALjgn3oLBQ4:GvbScZRH6pU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ALjgn3oLBQ4:GvbScZRH6pU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ALjgn3oLBQ4:GvbScZRH6pU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ALjgn3oLBQ4:GvbScZRH6pU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ALjgn3oLBQ4:GvbScZRH6pU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ALjgn3oLBQ4:GvbScZRH6pU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ALjgn3oLBQ4:GvbScZRH6pU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ALjgn3oLBQ4:GvbScZRH6pU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/ALjgn3oLBQ4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/ux-in-bed/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/ux-in-bed/</feedburner:origLink></item>
		<item>
		<title>Building Erlang on Snow Leopard</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/ki0FLglDJx4/</link>
		<comments>http://www.tobyjoe.com/2009/08/building-erlang-on-snow-leopard/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 13:28:30 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apple]]></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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ki0FLglDJx4:TQW9DLlwWoQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ki0FLglDJx4:TQW9DLlwWoQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ki0FLglDJx4:TQW9DLlwWoQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ki0FLglDJx4:TQW9DLlwWoQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ki0FLglDJx4:TQW9DLlwWoQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ki0FLglDJx4:TQW9DLlwWoQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ki0FLglDJx4:TQW9DLlwWoQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ki0FLglDJx4:TQW9DLlwWoQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ki0FLglDJx4:TQW9DLlwWoQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ki0FLglDJx4:TQW9DLlwWoQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/ki0FLglDJx4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/building-erlang-on-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/building-erlang-on-snow-leopard/</feedburner:origLink></item>
		<item>
		<title>Microsoft Deprecating IE6 the Right Way</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/WnmWhfwOs3c/</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>tobyjoe</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WnmWhfwOs3c:k36PEO_TVa4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WnmWhfwOs3c:k36PEO_TVa4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WnmWhfwOs3c:k36PEO_TVa4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WnmWhfwOs3c:k36PEO_TVa4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WnmWhfwOs3c:k36PEO_TVa4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WnmWhfwOs3c:k36PEO_TVa4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WnmWhfwOs3c:k36PEO_TVa4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WnmWhfwOs3c:k36PEO_TVa4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WnmWhfwOs3c:k36PEO_TVa4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WnmWhfwOs3c:k36PEO_TVa4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/WnmWhfwOs3c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/microsoft-deprecating-ie6-the-right-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/microsoft-deprecating-ie6-the-right-way/</feedburner:origLink></item>
		<item>
		<title>My iPhone User Experience Book!</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/jPt_l1yqdYU/</link>
		<comments>http://www.tobyjoe.com/2009/08/my-iphone-user-experience-book/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 13:57:56 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1154</guid>
		<description><![CDATA[It's shorter than I would have liked, and took longer to write, but it's nice to have it in my hands.]]></description>
			<content:encoded><![CDATA[<p><img class="photograph" src="http://www.tobyjoe.com/wp-content/uploads/2009/08/book_and_haircut.jpg" alt="book_and_haircut.jpg" border="0" width="640" height="480" /></p>
<p>It’s shorter than I would have liked, and took longer to write, but it’s nice to have it in my hands.</p>
<p>You can buy it <a href="http://www.amazon.com/Programming-iPhone-User-Experience-Boudreaux/dp/0596155468/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1249912636&#038;sr=8-1">at Amazon</a>. </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jPt_l1yqdYU:LgwRRaruQ-4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jPt_l1yqdYU:LgwRRaruQ-4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jPt_l1yqdYU:LgwRRaruQ-4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jPt_l1yqdYU:LgwRRaruQ-4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jPt_l1yqdYU:LgwRRaruQ-4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jPt_l1yqdYU:LgwRRaruQ-4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jPt_l1yqdYU:LgwRRaruQ-4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jPt_l1yqdYU:LgwRRaruQ-4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jPt_l1yqdYU:LgwRRaruQ-4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jPt_l1yqdYU:LgwRRaruQ-4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/jPt_l1yqdYU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/my-iphone-user-experience-book/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/my-iphone-user-experience-book/</feedburner:origLink></item>
		<item>
		<title>Renewed Interest in Rails</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/Q-bXsfbq2ao/</link>
		<comments>http://www.tobyjoe.com/2009/08/renewed-interest-in-rails/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 11:04:52 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Ruby]]></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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Q-bXsfbq2ao:xIlpaoR7Hlo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Q-bXsfbq2ao:xIlpaoR7Hlo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Q-bXsfbq2ao:xIlpaoR7Hlo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Q-bXsfbq2ao:xIlpaoR7Hlo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Q-bXsfbq2ao:xIlpaoR7Hlo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Q-bXsfbq2ao:xIlpaoR7Hlo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Q-bXsfbq2ao:xIlpaoR7Hlo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Q-bXsfbq2ao:xIlpaoR7Hlo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Q-bXsfbq2ao:xIlpaoR7Hlo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Q-bXsfbq2ao:xIlpaoR7Hlo:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/Q-bXsfbq2ao" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/renewed-interest-in-rails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/renewed-interest-in-rails/</feedburner:origLink></item>
		<item>
		<title>Don’t Stop Supporting IE6</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/1RQuZ5KR9a8/</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>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=1RQuZ5KR9a8:M310scJ_WRM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=1RQuZ5KR9a8:M310scJ_WRM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=1RQuZ5KR9a8:M310scJ_WRM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=1RQuZ5KR9a8:M310scJ_WRM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=1RQuZ5KR9a8:M310scJ_WRM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=1RQuZ5KR9a8:M310scJ_WRM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=1RQuZ5KR9a8:M310scJ_WRM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=1RQuZ5KR9a8:M310scJ_WRM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=1RQuZ5KR9a8:M310scJ_WRM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=1RQuZ5KR9a8:M310scJ_WRM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/1RQuZ5KR9a8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/dont-stop-supporting-ie6/feed/</wfw:commentRss>
		<slash:comments>73</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/dont-stop-supporting-ie6/</feedburner:origLink></item>
		<item>
		<title>Wildly Successful AR Ads for Best Buy</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/f0xYwsdRJ0g/</link>
		<comments>http://www.tobyjoe.com/2009/08/wildly-successful-ar-ads-for-best-buy/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 17:02:45 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Advertising]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1110</guid>
		<description><![CDATA[Out of 43 million copies of their circular, 6500 people interacted with their AR tool. Wow.]]></description>
			<content:encoded><![CDATA[<p>Out of 43 million copies of their circular, <a href="http://adage.com/digital/article?article_id=138313">6500 people</a> interacted with their AR print campaign. Wow.</p>
<p>Who wouldn&#8217;t jump on a goofy bandwagon to get those kinds of numbers? Engagement rates of 0.00015% are a sure sign this Flash-based AR thing is going to take off. Or am I reading that wrong?</p>
<p><a href="http://www.tobyjoe.com/2009/07/augmented-reality-bites/">Read more on Flash-based AR in advertising.</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f0xYwsdRJ0g:AqCSthh76do:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f0xYwsdRJ0g:AqCSthh76do:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f0xYwsdRJ0g:AqCSthh76do:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f0xYwsdRJ0g:AqCSthh76do:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f0xYwsdRJ0g:AqCSthh76do:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f0xYwsdRJ0g:AqCSthh76do:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f0xYwsdRJ0g:AqCSthh76do:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f0xYwsdRJ0g:AqCSthh76do:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=f0xYwsdRJ0g:AqCSthh76do:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=f0xYwsdRJ0g:AqCSthh76do:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/f0xYwsdRJ0g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/wildly-successful-ar-ads-for-best-buy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/wildly-successful-ar-ads-for-best-buy/</feedburner:origLink></item>
		<item>
		<title>Social Media = Advertising Honeypot</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/vMkaGt7Afp4/</link>
		<comments>http://www.tobyjoe.com/2009/08/social-media-advertising-honeypot/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 14:45:44 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Advertising]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=840</guid>
		<description><![CDATA[Twitter and Facebook are be honeypots for brands. We reach in and pull them out when we want, but otherwise keep them at bay.]]></description>
			<content:encoded><![CDATA[<p>Brands are obsessed with &#8220;going where the conversation is happening&#8221; or &#8220;going where users live&#8221; these days. Ad rags give advice for using Twitter to clueless marketing types. Every ad campaign has a checklist of touch points on the &#8220;social&#8221; web. Every RFP demands an itemized list of social networks that will be a part of the campaign. Twitter is the new Flash intro.</p>
<p>Generally, the presence of brands and their representatives on social sites is well-tolerated. Everyone is used to the fact that brands are jumping in. We consumers have large, high-res displays and we&#8217;re great at building selective blindness. When brands participate in social media, though, we don&#8217;t necessarily need that blindness. They&#8217;re automatically invisible unless we want to see them.</p>
<h2>The Honeypot</h2>
<p>A honeypot is an attractive trap used to embargo a threat. In information security, a dummy server might be placed on the periphery of a network and left somewhat hackable. The dumber crooks break into the honeypot, thinking they&#8217;ve silently compromised a network, only to be kept at arm&#8217;s length and watched. A thriving, sensitive network might exist right behind the honeypot, but the attacker never knows. He&#8217;s satisfied with himself for breaking in and stealing (what he thinks are) the keys to the castle.</p>
<p>On social sites, <strong>we only engage with brands if and when we want to</strong>. We don&#8217;t bother following <a href="http://twitter.com/zappos">@zappos</a> if we don&#8217;t want to interact with <a href="http://zappos.com/">Zappos</a>. The model keeps the power dynamic shifted the way it should be: <strong>in the favor of the consumer</strong>.</p>
<p>In a way, a brand presence on Twitter is the antithesis of display advertising. Rather than covering every visible surface in a shotgun effort to sneak into the minds of consumers, social media advertising is more passive. </p>
<p>Twitter and Facebook are honeypots for brands, keeping consumers protected from the annoying noise we see everywhere else. We reach in and pull them out when we want, but otherwise keep them at bay. </p>
<p>Twitter is better at this role than Facebook because Twitter lacks display ads. I think that fact alone makes us love Twitter, where we simply tolerate Facebook.</p>
<h2>An Olive Branch</h2>
<p>So, to brands, I say, welcome. Don&#8217;t screw it up, and don&#8217;t speak unless you&#8217;re spoken to. You&#8217;re not &#8220;going where the conversation is happening&#8221; – you&#8217;re <em>going where people are, and letting them talk to you if, when, and how they prefer</em>. Play by the rules and you will, over time, build a community. You&#8217;ll earn a voice. Just don&#8217;t be insulted if we tune in and out at will. It&#8217;s better for all involved.</p>
<h2>An Example</h2>
<p>Ok, so R/GA is <a href="http://adage.com/agencynews/article?article_id=138294">about to bring Taco Bell</a> all up in our grills on Facebook and Twitter. God save us from the chalupa and volcano nachos.</p>
<p>Luckily, I can opt out by not opting in. We all can.</p>
<p>It feels good, doesn&#8217;t it?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=vMkaGt7Afp4:bHaNELCWPDc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=vMkaGt7Afp4:bHaNELCWPDc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=vMkaGt7Afp4:bHaNELCWPDc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=vMkaGt7Afp4:bHaNELCWPDc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=vMkaGt7Afp4:bHaNELCWPDc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=vMkaGt7Afp4:bHaNELCWPDc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=vMkaGt7Afp4:bHaNELCWPDc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=vMkaGt7Afp4:bHaNELCWPDc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=vMkaGt7Afp4:bHaNELCWPDc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=vMkaGt7Afp4:bHaNELCWPDc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/vMkaGt7Afp4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/social-media-advertising-honeypot/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/social-media-advertising-honeypot/</feedburner:origLink></item>
		<item>
		<title>Death of the Apple Halo Effect?</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/5_1i3Z1fMIk/</link>
		<comments>http://www.tobyjoe.com/2009/08/death-of-the-apple-halo-effect/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 17:24:20 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Experience]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=1028</guid>
		<description><![CDATA[Every iPhone and iPod Touch owner I know hates iTunes. Apple should take notice.]]></description>
			<content:encoded><![CDATA[<p>Every iPhone and iPod Touch owner I know hates iTunes. Apple should take notice.</p>
<p>I think iTunes has become the main interaction platform for Apple. Given the popularity of the iPod line and iPhone, combined with iTunes for both Windows and Mac OS X, I&#8217;d bet more hours are spent using iTunes than Finder every day. </p>
<p>As with the App Store, Apple seems to be stumbling over itself with the iTunes experience. They need to slow down, reset, and rethink the experience promised by the Apple brand. </p>
<p>We know that iTunes is slow. The UI is inconsistent. The store feels completely alien to the main UI and experience. The app does far too much, plays too many roles too slowly. <strong>iTunes is more Wal-Mart than Apple Store.</strong></p>
<p>People tolerate iTunes because it isn&#8217;t unbearable. It does <em>work</em>, after all. We all know the flaws I&#8217;ve mentioned and begrudgingly accept them because iTunes is the only choice we have. Another case of Software Stockholm Syndrome, I guess?</p>
<p>But here are two new (to me) insights.</p>
<ol>
<li>iTunes focuses on multiple mobile devices paired to one computer rather than treating all Apple machines as peers. If nothing else, Apple should invert the model they currently use. Instead of one machine and one or more peripherals, they should focus on the more common case of one device and multiple computers.</li>
<li>Syncing a device to iTunes gets more painful every day, pushing users away from iTunes. Syncing a single podcast from iTunes to an iPhone takes fifteen minutes. It&#8217;s painful. This is a big threat the the Apple halo effect.</li>
</ol>
<p>Mobile devices are for mobile people. Most of us operate in at least two computer-focused environments: home and work. Apple lets us buy, download, and sync content (apps, podcasts, audio, video) on a single computer, but on multiple iPhones or iPods. We still can&#8217;t easily add content – with or without DRM – to our devices from work and home. Aside from risky hacks to trick the phone into seeing multiple libraries as one, there are no practical ways to keep the whole <em>digital lifestyle</em> in sync.</p>
<p>My wife has stopped plugging her iPhone into her computer. In fact, she&#8217;s stopped opening her computer, save for writing posts on her <a href="http://mihow.com/">blog</a>. I asked why.</p>
<blockquote><p>&#8220;I can do everything I need to do on the iPhone. I can get podcasts and music and apps, and iTunes freaking sucks, so why bother?&#8221;</p></blockquote>
<p>The Apple lifestyle brand and experience is amazing when it&#8217;s strong, but like so many other things, it&#8217;s a bubble. iTunes is a thorn. Apple peripherals once caused a halo effect, but as they get better and iTunes gets worse, the iPhone and iPod Touch might cannibalize the Apple (desktop, laptop) computer market for lifestyle users.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=5_1i3Z1fMIk:su-HIpvL5Vw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=5_1i3Z1fMIk:su-HIpvL5Vw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=5_1i3Z1fMIk:su-HIpvL5Vw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=5_1i3Z1fMIk:su-HIpvL5Vw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=5_1i3Z1fMIk:su-HIpvL5Vw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=5_1i3Z1fMIk:su-HIpvL5Vw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=5_1i3Z1fMIk:su-HIpvL5Vw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=5_1i3Z1fMIk:su-HIpvL5Vw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=5_1i3Z1fMIk:su-HIpvL5Vw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=5_1i3Z1fMIk:su-HIpvL5Vw:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/5_1i3Z1fMIk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/08/death-of-the-apple-halo-effect/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/08/death-of-the-apple-halo-effect/</feedburner:origLink></item>
		<item>
		<title>Augmented Reality Bites</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/O7LcdV493yo/</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>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=O7LcdV493yo:jL3kHn4KSWI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=O7LcdV493yo:jL3kHn4KSWI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=O7LcdV493yo:jL3kHn4KSWI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=O7LcdV493yo:jL3kHn4KSWI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=O7LcdV493yo:jL3kHn4KSWI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=O7LcdV493yo:jL3kHn4KSWI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=O7LcdV493yo:jL3kHn4KSWI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=O7LcdV493yo:jL3kHn4KSWI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=O7LcdV493yo:jL3kHn4KSWI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=O7LcdV493yo:jL3kHn4KSWI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/O7LcdV493yo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/augmented-reality-bites/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/augmented-reality-bites/</feedburner:origLink></item>
		<item>
		<title>Twitter: 1, Robots: 0</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/KBCzrsZXDyc/</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>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KBCzrsZXDyc:gIeST9BHDnw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KBCzrsZXDyc:gIeST9BHDnw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KBCzrsZXDyc:gIeST9BHDnw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KBCzrsZXDyc:gIeST9BHDnw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KBCzrsZXDyc:gIeST9BHDnw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KBCzrsZXDyc:gIeST9BHDnw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KBCzrsZXDyc:gIeST9BHDnw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KBCzrsZXDyc:gIeST9BHDnw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KBCzrsZXDyc:gIeST9BHDnw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KBCzrsZXDyc:gIeST9BHDnw:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/KBCzrsZXDyc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/twitter-1-robots-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/twitter-1-robots-0/</feedburner:origLink></item>
		<item>
		<title>iPhone Apps are Not Banner Ads</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/yHW5C-lovi4/</link>
		<comments>http://www.tobyjoe.com/2009/07/iphone-apps-are-not-banner-ads/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 19:56:49 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Advertising]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=875</guid>
		<description><![CDATA[Installing an iPhone app is work. <strong>If you make users work, you owe them something valuable.</strong>]]></description>
			<content:encoded><![CDATA[<p>The trend is still alive. Brands and agencies continue to apply banner ad concepts to the iPhone. </p>
<p>The newest example: <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=322850940&#038;mt=8">Mastercard Priceless Picks</a>. </p>
<p><img src="http://www.tobyjoe.com/wp-content/uploads/2009/07/mastercard_iphone_screen.png" alt="mastercard_iphone_screen.png" width="485" height="325" /></p>
<p>Their location aware social review sharing tidbit finder app is a cute, ephemeral trinket (at best). It would have made a rather interesting location-aware banner ad. Unfortunately, someone told them they should ship an iPhone app instead of a ton of banners. Hey, why not, right? </p>
<p>Here&#8217;s one reason: installing an iPhone app is work. <strong>If you make users work, you owe them something valuable.</strong></p>
<p>Despite the attempt at &#8220;one-click&#8221; installation, the App Store is a nightmare. iTunes is still slow and unwieldy. Installing, updating, deleting, and managing applications is still quite a bit of <strong>work</strong>. </p>
<p>Contrast this to banners. A banner loads when a page loads. Users don&#8217;t have to do anything. Actually, users don&#8217;t <strong>get</strong> to do anything – including disabling ads or opting-in – but that&#8217;s a post for another day. <strong>Unlike iPhone apps, the barrier to entry for a banner is very low.</strong> Your debt to users is lower.</p>
<p>They&#8217;re fast to develop, cheap to run, and simple to measure. They probably get more traction than iPhone apps, especially as the &#8220;first in my category!&#8221; novelty slots are snapped up. But alas, the creatives are bored with them.</p>
<p>These days, many digital agencies won&#8217;t touch banners. They relegate banner work to a production ghetto, churning them out when they have to, and apologizing to the creatives forced to touch such dismal fare. They blame the format for the lack of satisfying creativity instead of looking at themselves.</p>
<p>Hey, don&#8217;t get me wrong: I agree that banners, as a format, are terrible. I want online display ads to die as much as the next normal, sane human – and with them, their concepts. </p>
<p>There is a class of creative concept that belongs in a banner/widget, if anywhere at all. Most of the iPhone apps spit out by brands belong in that class. Transposing formats is a distraction. Sleight of hand. Another paycheck. </p>
<p>The Mastercard app shows the warm reception from the public.</p>
<p><img src="http://www.tobyjoe.com/wp-content/uploads/2009/07/mastercard_iphone.png" alt="mastercard_iphone.png" border="0" width="344" height="129" /></p>
<p>Would so many agencies pitch iPhone apps if their compensation was usage-based? I don&#8217;t mean downloads, either. I mean repeat launches, with the first dozen per device being free. </p>
<h2>A Mantra</h2>
<p>Ad world creatives and strategists, repeat after me: <strong>My iPhone app idea sucks. It belongs in a banner. Leveraging the accelerometer,  magnetometer or location API doesn&#8217;t change that.</strong></p>
<p>If you&#8217;re the exception, I&#8217;ll buy you a pint. Of gold. </p>
<h2>Brand App User Scenario</h2>
<p>To those who will pitch their dumb ideas despite my sage advice, I offer a token of friendship: your primary user scenario. </p>
<p>The user will follow these ten steps.</p>
<ol>
<li>Hear about the application.</li>
<li>Search App Store or come in via link.</li>
<li>Click install, wait for download.</li>
<li>Plug in phone.</li>
<li>Sync. Take nap while backup and sync complete.</li>
<li>Find the app on the many screens of icons.</li>
<li>Launch it.</li>
<li>Close it.</li>
<li>Delete it.</li>
<li>One star.</li>
</ol>
<p>Ouch. I&#8217;m sure you&#8217;ll <a href="http://www.tobyjoe.com/2009/06/jeff-goodby-on-award-chasers/">win an industry award</a>, though.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=yHW5C-lovi4:eNx6VHAGzhM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=yHW5C-lovi4:eNx6VHAGzhM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=yHW5C-lovi4:eNx6VHAGzhM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=yHW5C-lovi4:eNx6VHAGzhM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=yHW5C-lovi4:eNx6VHAGzhM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=yHW5C-lovi4:eNx6VHAGzhM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=yHW5C-lovi4:eNx6VHAGzhM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=yHW5C-lovi4:eNx6VHAGzhM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=yHW5C-lovi4:eNx6VHAGzhM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=yHW5C-lovi4:eNx6VHAGzhM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/yHW5C-lovi4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/iphone-apps-are-not-banner-ads/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/iphone-apps-are-not-banner-ads/</feedburner:origLink></item>
		<item>
		<title>Is Google Ruining Mobile Advertising?</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/VaDSjtRG8J4/</link>
		<comments>http://www.tobyjoe.com/2009/07/is-google-ruining-mobile-advertising/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 16:06:46 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Advertising]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=831</guid>
		<description><![CDATA[Admittedly, my opinion is that mobile advertising should shrivel up and die. That said, if it's going to exist, the UX should be at least tolerable and, preferably, stellar. ]]></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>. I&#8217;m their featured guest this week.</div>
<p>According to <a href="http://admob.com/">AdMob</a>, a large portion of iPhone and iPod Touch users <a href="http://www.mediapost.com/publications/?fa=Articles.showArticle&#038;art_aid=109199">claim to use their mobile devices</a> to browse the web more often than they use their desktop or laptop computers. This number is undoubtedly going to grow. </p>
<p>Combine that with <a href="http://adage.com/digital/article?article_id=137806">an article in AdAge</a> this week examining the problems with Google&#8217;s AdSense for Mobile product, and you see the current, expanding dark period for users (victims?) of mobile ads. </p>
<p>Mix in <a href="http://www.noahbrier.com/archives/2009/07/google_and_what_it_means_to_be_a_market_leader.php">Noah Brier&#8217;s thoughts on Google as a market leader</a> and we see a larger risk: if Google ignores UX right now and users acclimate, nobody will have the weight to course-correct where the experience is concerned.</p>
<p>Admittedly, my opinion is that mobile advertising should shrivel up and die. That said, if it&#8217;s going to exist, the UX should be at least tolerable and, preferably, stellar. </p>
<p>This is the kind of problem that arises when engineers don&#8217;t obsess over UX.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=VaDSjtRG8J4:ZtnFYSZJqMo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=VaDSjtRG8J4:ZtnFYSZJqMo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=VaDSjtRG8J4:ZtnFYSZJqMo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=VaDSjtRG8J4:ZtnFYSZJqMo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=VaDSjtRG8J4:ZtnFYSZJqMo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=VaDSjtRG8J4:ZtnFYSZJqMo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=VaDSjtRG8J4:ZtnFYSZJqMo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=VaDSjtRG8J4:ZtnFYSZJqMo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=VaDSjtRG8J4:ZtnFYSZJqMo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=VaDSjtRG8J4:ZtnFYSZJqMo:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/VaDSjtRG8J4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/is-google-ruining-mobile-advertising/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/is-google-ruining-mobile-advertising/</feedburner:origLink></item>
		<item>
		<title>The Emperor’s New API</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/J34NdXxgW90/</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>tobyjoe</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=J34NdXxgW90:uugefKz2GFk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=J34NdXxgW90:uugefKz2GFk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=J34NdXxgW90:uugefKz2GFk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=J34NdXxgW90:uugefKz2GFk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=J34NdXxgW90:uugefKz2GFk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=J34NdXxgW90:uugefKz2GFk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=J34NdXxgW90:uugefKz2GFk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=J34NdXxgW90:uugefKz2GFk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=J34NdXxgW90:uugefKz2GFk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=J34NdXxgW90:uugefKz2GFk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/J34NdXxgW90" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/the-emperors-new-api/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/the-emperors-new-api/</feedburner:origLink></item>
		<item>
		<title>Toward the Bare Metal: From Flash to Processing, OpenFrameworks, and Beyond</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/jkdBz2JLAnQ/</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>tobyjoe</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jkdBz2JLAnQ:YKZUMzj7-KA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jkdBz2JLAnQ:YKZUMzj7-KA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jkdBz2JLAnQ:YKZUMzj7-KA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jkdBz2JLAnQ:YKZUMzj7-KA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jkdBz2JLAnQ:YKZUMzj7-KA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jkdBz2JLAnQ:YKZUMzj7-KA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jkdBz2JLAnQ:YKZUMzj7-KA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jkdBz2JLAnQ:YKZUMzj7-KA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=jkdBz2JLAnQ:YKZUMzj7-KA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=jkdBz2JLAnQ:YKZUMzj7-KA:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/jkdBz2JLAnQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/toward-the-bare-metal/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/toward-the-bare-metal/</feedburner:origLink></item>
		<item>
		<title>Mobile Designers and Empathy</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/9GqtuUYttRs/</link>
		<comments>http://www.tobyjoe.com/2009/07/mobile-designers-and-empathy/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 16:07:36 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=778</guid>
		<description><![CDATA[I think the growing importance of mobile devices in our everyday lives can give a new perspective on baseline users, perhaps leading to more time spent providing amazing, elegant assistive applications and reducing the importance placed on gimmicks.
]]></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>Mobile users are often on the move while interacting with their devices. By definition, their environments change almost constantly and often introduce unforeseen obstacles. Mobile conditions can place limits on many user attributes: focus, input precision, network connectivity, available time, personal space, and patience. Yet mobile devices are becoming as robust and powerful as laptops, inspiring tons of new, high-end functionality. The challenge is to reconcile the two factors, creating a helpful user experience that uses the new tech to the benefit of the largest number of users and the detriment of none.</p>
<p>User-centered designers face some interesting questions: How do you design an interface that allows someone to find directions or call a cab while carrying bags of groceries home from the market? How can an interface accommodate limited agility, gloved hands, a jostling subway train, or fat fingers? How do you let users subtly compose, edit, and erase email messages while in a long, boring meeting? (Hint: shake-to-edit or shake-to-delete or shake-to-<em>anything</em> are not very friendly requirements.) How do you model user behavior when the nature of mobile use is unpredictable and endlessly diverse? How can you solve problems as unobtrusively as possible? </p>
<p>I hear questions like these very often these days. Designers and developers who never paid much attention to the usability of their web or desktop applications are suddenly quite concerned about the UX of their mobile applications and mobile-optimized sites. I welcome the new interest in the topic, as I&#8217;ve always been a bit UX-obsessed, but I have to wonder about the inspiration. I think I&#8217;m witnessing a new empathy for users and a shift from the assumption that users crave every complex, novel, &#8220;innovative&#8221; idea a designer can throw at them.</p>
<h2>Progressive Enhancement to the Rescue</h2>
<p>One of the topics covered in my <a href="http://www.amazon.com/Programming-iPhone-User-Experience-Boudreaux/dp/0596155468/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242741411&#038;sr=8-2">iPhone book</a> is <i>progressive enhancement</i>. For those unfamiliar with progressive enhancement, it is the art of providing baseline value to all users and additional value to those in favorable environments or with extra abilities. A strong, accessible functional baseline is important for all software products and interfaces because we want our products to be user-centric. </p>
<p>Progressive enhancement patterns are familiar to a lot of web designers. I think a lot of folks kind of fudge the topic, though. They meet their stated requirements (such as 508 compliance), but often ignore the art. They provide baseline functionality, but they make it clear it&#8217;s only baseline. They passively penalize the audience that can only meet the minimum requirements and focus all elegance, fun, and inspiration on the most capable users.</p>
<h2>Building Empathy Through Adversity</h2>
<p>I think the growing importance of mobile devices in our everyday lives can give a new perspective on baseline users, perhaps leading to more time spent providing amazing, elegant assistive applications and reducing the importance placed on gimmicks.</p>
<p>Think about it: these days, we are all mobile users. As such, we all face adverse conditions for use. Suddenly, we all understand what it&#8217;s like to have external conditions impose limitations on our abilities. <strong>We are all handicapped in one subtle way or another as we go about our day.</strong> All it takes is a taste of frustration to ignite passion for assistive interfaces. </p>
<p>The applications we truly appreciate in the mobile space are those that enable us to accomplish our tasks no matter what our environment. We can compose emails in the absence of a network connection–they simply send when we are back online. The better Twitter clients and RSS readers store data on the iPhone to provide some value when users aren&#8217;t online. The better interfaces allow us to perform tasks with one free finger and minimal attention. They don&#8217;t impose gestural abilities on tasks for the sake of novelty. Or, if they do, they treat the novel interaction as an enhancement, allowing us to accomplish the same goals with the tap of a button. </p>
<p>In interactive design, including software and web design, progressive enhancement is often treated as an annoying requirement. Designers can now tap into their own experience using mobile devices to better empathize with users who lack full control of their environment, tools, and body, leading to a new respect for baselines and a shift in attention from the secondary enhancements to the primary use cases.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9GqtuUYttRs:BTa1c9iiz18:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9GqtuUYttRs:BTa1c9iiz18:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9GqtuUYttRs:BTa1c9iiz18:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9GqtuUYttRs:BTa1c9iiz18:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9GqtuUYttRs:BTa1c9iiz18:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9GqtuUYttRs:BTa1c9iiz18:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9GqtuUYttRs:BTa1c9iiz18:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9GqtuUYttRs:BTa1c9iiz18:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9GqtuUYttRs:BTa1c9iiz18:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9GqtuUYttRs:BTa1c9iiz18:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/9GqtuUYttRs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/07/mobile-designers-and-empathy/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/07/mobile-designers-and-empathy/</feedburner:origLink></item>
		<item>
		<title>Jeff Goodby on Award-Chasers and the Future of Ad-Tech</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/Vlpno_6H6SQ/</link>
		<comments>http://www.tobyjoe.com/2009/06/jeff-goodby-on-award-chasers/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 15:24:54 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Advertising]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=737</guid>
		<description><![CDATA[Jeff Goodby, from <a href="http://www.goodbysilverstein.com">Goodby, Silverstein, &#038; Partners</a> (one of my favorite agencies to work with BTW), wrote an article in AdAge that actually got me thinking. ]]></description>
			<content:encoded><![CDATA[<p>Jeff Goodby, from <a href="http://www.goodbysilverstein.com">Goodby, Silverstein, &#038; Partners</a> (one of my favorite agencies to work with BTW), wrote an article in AdAge that actually got me thinking. </p>
<p>The article is <a href="http://adage.com/cannes09/article?article_id=137525">Jeff Goodby: We are Becoming Irrelevant Award-Chasers</a>. </p>
<p>There are some real gems in this article and I agree with his core position. It echos something a friend of mine told me. He&#8217;s the Worldwide Creative Director at one of the world&#8217;s largest agencies. His group focuses on the shopper space and measures success in terms of direct sales. The motto he and his team operate under is, &#8220;We don&#8217;t take gold. We make gold.&#8221;</p>
<p>They focus on activation more than awareness, and obsess about ROI. Cases moved, not trophies from their peers. Definitely more MBA than MFA, though they&#8217;re no slouches on creativity. </p>
<p>This is a different position and purpose than awareness-building groups and campaigns, but I think the two are artificially separated.</p>
<p>My favorite paragraph from Mr. Goodby&#8217;s article sums up a problem a lot of folks joke about: using client dollars to build an agency brand first, client brand second.</p>
<blockquote><p>It&#8217;s a warning that we are, in effect, making things that serve our own agency brands instead of serving our clients and making a difference in the minds of the world.</p></blockquote>
<p>I see this all over the place. It&#8217;s an industry-rag myopia that often leaves consumers/shoppers/users out of the equation. It&#8217;s more prominent in the awareness-building side of advertising, because it&#8217;s easier to get away with there.</p>
<p>What I don&#8217;t agree with is the call for famousness as a driving force – at least not for the agencies themselves. </p>
<blockquote><p>I want us all to be famous again, outside the walls of our agencies. How can we accomplish this?</p></blockquote>
<p>I&#8217;d rather see the brands made more famous, the agencies fade into the shadows, and awards focus exclusively on metrics. The problem, of course, is finding new ways of measuring success.</p>
<h2>In Which Toby&#8217;s Optimism Takes Over</h2>
<p>If each major agency donated the time and brainpower of one pointless microsite or social network spam tool and focused on using technology to prove efficacy as it relates to activating sales all the way from display media to the credit card machine, they could transform the industry.</p>
<p>We&#8217;re all digital-obsessed anyway. Why are all the lines of code squandered on ephemeral campaign collateral? Why not come together and create standards that unify as many digital outlets as possible? Unify digital cable to mobile to web to shopper loyalty programs to e-commerce to out-of-the-home to in-store displays? </p>
<p>It could be awesome&#8230; A lot of work, for sure. A lot of ego set aside. Great care to liberate consumers/shoppers/users from privacy concerns, bad UX, and fatigue. A massive battle against inertia. But the payoff could be the ability to tune messages so effectively that we reduce the noise, stop fighting for eyeballs, and help people make decisions. </p>
<h2>In Which Toby&#8217;s Cynicism Takes Over</h2>
<p>But then, who wants to create tools that can measure success accurately? Who wants awards to go to campaigns that help move units if those campaigns end up straightforward and unobtrusive and inexpensive? What if your pet client is pushing a shitty product and user-centered advertising exposes it as worthless? Ouch. </p>
<p>And who can be famous for helping their clients get richer?</p>
<p>What if cabbies are unimpressed?!?!</p>
<h2>In Which He Makes a Call to Action</h2>
<p>So who wants to discuss the overall role, and future, of technology and user experience in advertising? Who can think outside of their current assignment? Who among us would like to be the Tim O&#8217;Reilly of ad-tech? Where are the visionaries? </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Vlpno_6H6SQ:251gB8BJn-U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Vlpno_6H6SQ:251gB8BJn-U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Vlpno_6H6SQ:251gB8BJn-U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Vlpno_6H6SQ:251gB8BJn-U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Vlpno_6H6SQ:251gB8BJn-U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Vlpno_6H6SQ:251gB8BJn-U:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Vlpno_6H6SQ:251gB8BJn-U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Vlpno_6H6SQ:251gB8BJn-U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Vlpno_6H6SQ:251gB8BJn-U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Vlpno_6H6SQ:251gB8BJn-U:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/Vlpno_6H6SQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/06/jeff-goodby-on-award-chasers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/06/jeff-goodby-on-award-chasers/</feedburner:origLink></item>
		<item>
		<title>Badge Blindness and iPhone Push Notifications</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/Bzp982JdLHY/</link>
		<comments>http://www.tobyjoe.com/2009/06/badge-blindness-and-iphone-push-notifications/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 22:01:02 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=702</guid>
		<description><![CDATA[Don't flood devices with flippant text or audio push notifications. Understand the disruptive impact of those messages and avoid them unless they are absolutely necessary. And repeat this mantra: "Push notifications are rarely necessary!"]]></description>
			<content:encoded><![CDATA[<p>So iPhone OS 3.0, drops very soon (aka, tomorrow).</p>
<p>Most folks will eagerly update their devices as the new OS is truly stellar. </p>
<p>Many applications will be updated to take advantage of new features like the Push Notification Service, In-App Purchases, and Bluetooth-powered Private Area Networking (with GameKit).</p>
<p>I can&#8217;t wait to watch the Twitter chatter. </p>
<p>See, I&#8217;m obsessed with UX – especially on the iPhone. I get bent out of shape about ugly applications, hijacked gestures, disruptive branding and flippant differentiation. I fully acknowledge the delicate bubble Apple has created in the form of the iPhone UX, and I hate to see folks pushing blindly at the edges. The aesthetic and experience are what really differentiate the platform from similar devices, and it&#8217;s worth maintaining.</p>
<p>Cocoa Touch developers, like Cocoa developers, spend a lot of time thinking about user experience. With Cocoa Touch, there is an additional onus on folks to think about the experience outside their application because the device has limited resources: memory, CPU, battery life. Mobile users also have more limitations than desktop users: attention, coordination, time, tolerance, physical ability.</p>
<p>With iPhone OS 3.0, I am especially worried about the Push Notification Service and its potential for misuse, abuse, and overuse. Without consistency in the meaning of push messages, we might collectively burn users out on notifications.</p>
<h2>Notification Misuse: Audio and Text Alerts</h2>
<p>Developers can use the push service to send three types of notices to devices: short audio events, strings of text, and a number shown in a red circle (aka badge) on the application icon. Each of these has a place, and Apple cautions developers against using notification mechanisms that are disproportionate to the importance of messages. </p>
<p>For example, you should avoid sending audio alerts unless users are in the application context (that is, the application is running and users are interacting solely with it) and have opted into receiving audio. Nobody wants their phone to chirp away with random noise when they&#8217;re trying to listen to music or play a game.</p>
<p>Text alerts can be used to communicate very important events, but they too should be used with care. Text alerts trigger a full-screen, modal alert box that not only steals the focus of the entire phone but requires users to dismiss the alert by tapping a button. It&#8217;s pretty cocky to hijack an iPhone for a trivial note, so make sure the message is worthy. </p>
<h2>Notification Abuse: Audio and Text Alerts</h2>
<p>Don&#8217;t flood devices with flippant text or audio push notifications. Understand the disruptive impact of those messages and avoid them unless they are absolutely necessary. And repeat this mantra: &#8220;Push notifications are rarely necessary!&#8221;</p>
<p>Consider an asynchronous chat service in a social application. It might be awesome to use the push service to send messages to users, SMS-style, even when the app isn&#8217;t running. Now mix into the equation the presence of other applications. Most of us have at least two social apps on our iPhones. Suddenly, modal alert messages are popping up for each of them. God forbid you have multiple Twitter clients installed that send alerts for direct messages – redundant popups flooding in would be pretty annoying.</p>
<p>Don&#8217;t fall into the &#8220;I can, so I should!&#8221; mindset. Applications have worked well without notifications thus far. You won&#8217;t increase <em>stickiness</em> by pushing notifications to users, catching their attention and helping your icon stand out on the screen. Stickiness is a terrible concept carried over from the ad-driven web and is the banner under which advertising ruined online UX. Even if your application is ad-supported, your best bet for success is to create a tool that fits into the whole iPhone experience rather than trying to use every feature available to you in hopes of standing out. Beat your competition by doing less, better. Don&#8217;t steal focus. Earn it.</p>
<h2>Notification Overuse: Badges</h2>
<p>You should also avoid overuse of icon badging. Think about mobile development holistically. Every badge added to an application icon impacts the overall user experience. It&#8217;s your duty (yes, <strong>duty</strong>) to play nicely and work with the iPhone developer community to create a strong experience. You are not an island. Your app is nothing without the experience provided by Apple, and that experience must be ruthlessly maintained. Your application is a guest on a very expensive, aspirational fetish device. Don&#8217;t trash the place, lest you be trashed.</p>
<h3>Badge Blindness</h3>
<p>So why should badging be limited? Overuse of badging will lead to <em>badge blindness</em>. Badge blindness occurs when users lose faith in the importance of icon badges. RSS readers provide a really great example of this phenomenon. </p>
<p>Imagine you subscribe to 50 feeds – a modest number – and have your feed reader set to poll for updates every hour. If your reader shows a badge that reflects the current number of unread stories in your collection of feeds, you can almost guarantee that you will always have a badge present. Often, it will have a very large number inside. You will never reach zero, and the badge will never disappear. The badge becomes a <em>permabadge</em> – an annoyingly persistent reminder that the application wants your attention. You will probably <em>declare RSS bankruptcy</em> – marking all feed items as read – just to get the satisfaction of seeing the badge disappear&#8230; for less than an hour.</p>
<p>Imagine that, on the Mac desktop, several applications in your Dock show badges. Mail, iChat, NetNewsWire, iCal, and Xcode. Suddenly, you don&#8217;t feel as though your computer is trying to direct your attention towards an important, but non-critical, focal point. Instead, you feel as though your computer is constantly nagging you.</p>
<p>Now picture the equivalent on your iPhone. A screen of greedy little icons, all raising their hands wildly, begging for attention. You&#8217;ll start to ignore the mechanism. You&#8217;ll stop seeing the badges.</p>
<p>You&#8217;ll delete the annoying apps and leave one-star reviews on the App Store.</p>
<h2>Advice</h2>
<p>Imagine you&#8217;re in a crowded coffee shop. A friend is across the room, reading a book, or chatting with a crush. You think of something you think they may, possibly, maybe want to know. Would you shout the message out across the room? Wave your arms wildly, hoping they make eye contact? Send them a text? Email them? Leave a note with their server? </p>
<p>Whatever your message, make sure the transmission protocol is suitable. In some cases, this will mean badging. When badging, make sure the badge will be invisible more often than not, or it will lose its impact. If the message merits completely stealing focus, send a text alert or sound. Do so only in the rarest of cases, unless users have opted-in and can just as easily opt-out. Be nice. Don&#8217;t pop any bubbles.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Bzp982JdLHY:b0XLzgeoj9g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Bzp982JdLHY:b0XLzgeoj9g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Bzp982JdLHY:b0XLzgeoj9g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Bzp982JdLHY:b0XLzgeoj9g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Bzp982JdLHY:b0XLzgeoj9g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Bzp982JdLHY:b0XLzgeoj9g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Bzp982JdLHY:b0XLzgeoj9g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Bzp982JdLHY:b0XLzgeoj9g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Bzp982JdLHY:b0XLzgeoj9g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Bzp982JdLHY:b0XLzgeoj9g:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/Bzp982JdLHY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/06/badge-blindness-and-iphone-push-notifications/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/06/badge-blindness-and-iphone-push-notifications/</feedburner:origLink></item>
		<item>
		<title>The Twitpocalypse and Unit Testing</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/6v5zTJqMoL4/</link>
		<comments>http://www.tobyjoe.com/2009/06/the-twitpocalypse-and-unit-testing/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 19:00:35 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=689</guid>
		<description><![CDATA[If ever there was a clear example of the need for unit testing during builds, it's the integer overflow problem on Twitter - aka, the <em>Twitpocalypse</em>.
]]></description>
			<content:encoded><![CDATA[<p>If ever there was a clear example of the need for unit testing during builds, it&#8217;s the integer overflow problem on Twitter &#8211; aka, the <em>Twitpocalypse</em>.</p>
<p>For those not in the know, Twitter uses an incrementing integer as an identifier for each message on the site. On June 12, 2009, a message crossed the maximum integer value that could be stored in a 32-bit signed integer (2,147,483,647).</p>
<p>All messages created after that moment had integer values that would overflow the space allocated to the id. </p>
<p>This wasn&#8217;t a problem on Twitter.com. They&#8217;re surely on some rockin&#8217; 64-bit systems and are continuing along as always.</p>
<p>The problem is with third-party applications using their API. When an application requests a list of status messages from Twitter, it receives the data in a format like XML or JSON. All values are stored as strings in those formats.</p>
<p>When the response is parsed, the string representing the status message id will be converted to a number. Applications that still use signed 32-bit integers will not be able to properly convert the string to an integer and will probably crash. </p>
<p>This problem is hitting a few Cocoa Touch applications. Tweetie seems immune, but the current release of Twitterrific and the in-beta Birdfeed both suffer. This is through no fault of either Craig Hockenberry or Buzz Andersen, though. </p>
<p>Buzz&#8217;s app, Birdfeed, is still in beta. Those of us testing it understand that beta means beta. He&#8217;s cracking on a fix now.</p>
<p>Craig preemptively fixed his issue well in advance, but – as I understand it – Apple is sitting on it instead of pushing it into the App Store. </p>
<p>This is just one of many ways Apple continues to please developers endlessly with their transparent, fair, open distribution channel.</p>
<p>Lots of folks want to blame Twitter, or shift some of the blame to them.</p>
<p>This is not a Twitter problem. They adapted their system and encouraged developers who use the Twitter API to remain in parity.</p>
<p>It&#8217;s probably true that Twitter could have made a bigger deal of the issue, but I think they did a solid job of keeping people informed. </p>
<p>Most people had ample time to update their code, and many of them did. </p>
<p>Daniel Jalkut suggested that Twitter might have provided an endpoint for the API that simulated large integer values, so application developers could test against the newer ids. I heard similar statements by folks attending WWDC.</p>
<p>I think this exposes a slightly dirty secret in the Cocoa world: most Cocoa and Cocoa Touch devs avoid automated testing. Unit tests are few and far between. From what I hear, Apple doesn&#8217;t even enforce units.</p>
<p>When you see regression bugs in Cocoa apps, you can assume the issue is in a lacking test suite. </p>
<p>The Cocoa community should learn two things from the Twitocalypse:</p>
<p>1. Write your units.<br />
2. Submit to the App Store at least time * infinity in advance. </p>
<p>I&#8217;m about 50% on having test suites in my (admittedly, unreleased) iPhone apps. The half that have tests have strong coverage, though. Those that don&#8217;t are from the early SDK days, when the only way to test was with the Google Toolkit. </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=6v5zTJqMoL4:v-pabM2jgkY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=6v5zTJqMoL4:v-pabM2jgkY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=6v5zTJqMoL4:v-pabM2jgkY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=6v5zTJqMoL4:v-pabM2jgkY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=6v5zTJqMoL4:v-pabM2jgkY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=6v5zTJqMoL4:v-pabM2jgkY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=6v5zTJqMoL4:v-pabM2jgkY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=6v5zTJqMoL4:v-pabM2jgkY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=6v5zTJqMoL4:v-pabM2jgkY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=6v5zTJqMoL4:v-pabM2jgkY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/6v5zTJqMoL4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/06/the-twitpocalypse-and-unit-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/06/the-twitpocalypse-and-unit-testing/</feedburner:origLink></item>
		<item>
		<title>Preaching iPhone UX</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/Efhs0puHR1k/</link>
		<comments>http://www.tobyjoe.com/2009/05/preaching-iphone-ux/#comments</comments>
		<pubDate>Tue, 19 May 2009 14:01:19 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.tobyjoe.com/?p=675</guid>
		<description><![CDATA[I have spent a fair portion of the last year preaching good UX for iPhone developers.]]></description>
			<content:encoded><![CDATA[<div style="float:right;"><a href="http://www.amazon.com/Programming-iPhone-User-Experience-Boudreaux/dp/0596155468/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242741411&#038;sr=8-2"><img src="http://ecx.images-amazon.com/images/I/51Lnf1WEulL._SL500_AA240_.jpg" alt="Programming the iPhone User Experience" /></a></div>
<p>Wow, long time no write&#8230; Typical of me.</p>
<p>I&#8217;m wrapping up my newest tech book. <a href="http://www.amazon.com/Programming-iPhone-User-Experience-Boudreaux/dp/0596155468/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242741411&#038;sr=8-2">Programming the iPhone User Experience</a> will be released by O&#8217;Reilly this July.</p>
<p>I spoke at the Web 2.0 Expo (SF) this year on the subject of <a href="http://www.web2expo.com/webexsf2009/public/schedule/detail/7829">iPhone UX Anti-Patterns</a>. It was the highest-rated mobile session. Great validation, and I think it&#8217;ll go a long way towards squelching the desire to jump off a building every time I have to get on stage.</p>
<p>After the book wraps, I hope to write more often here, on <a href="http://insideria.com">InsideRIA</a>, and for other publications. </p>
<p>Or, I may just drink a lot and lay around.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Efhs0puHR1k:yrpVmMOaHzc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Efhs0puHR1k:yrpVmMOaHzc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Efhs0puHR1k:yrpVmMOaHzc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Efhs0puHR1k:yrpVmMOaHzc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Efhs0puHR1k:yrpVmMOaHzc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Efhs0puHR1k:yrpVmMOaHzc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Efhs0puHR1k:yrpVmMOaHzc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Efhs0puHR1k:yrpVmMOaHzc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Efhs0puHR1k:yrpVmMOaHzc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Efhs0puHR1k:yrpVmMOaHzc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/Efhs0puHR1k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2009/05/preaching-iphone-ux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2009/05/preaching-iphone-ux/</feedburner:origLink></item>
		<item>
		<title>SproutCore Article on O’Reilly InsideRIA Blog</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/thFaLzG7LqY/</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>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">urn:uuid:3969d35a-99cd-4b8a-932c-97ebc3ec7e55</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=thFaLzG7LqY:5TyUlbN1sag:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=thFaLzG7LqY:5TyUlbN1sag:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=thFaLzG7LqY:5TyUlbN1sag:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=thFaLzG7LqY:5TyUlbN1sag:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=thFaLzG7LqY:5TyUlbN1sag:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=thFaLzG7LqY:5TyUlbN1sag:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=thFaLzG7LqY:5TyUlbN1sag:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=thFaLzG7LqY:5TyUlbN1sag:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=thFaLzG7LqY:5TyUlbN1sag:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=thFaLzG7LqY:5TyUlbN1sag:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/thFaLzG7LqY" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://www.tobyjoe.com/2008/08/sproutcore-article-on-o-reilly-insideria-blog/</feedburner:origLink></item>
		<item>
		<title>DataMapper/Merb Ambiguous SQLite Error</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/CWDmJ_D-wqE/</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>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">urn:uuid:fa51aa70-b200-4754-9009-865496715709</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CWDmJ_D-wqE:DFkTdJQbfmE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CWDmJ_D-wqE:DFkTdJQbfmE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CWDmJ_D-wqE:DFkTdJQbfmE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CWDmJ_D-wqE:DFkTdJQbfmE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CWDmJ_D-wqE:DFkTdJQbfmE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CWDmJ_D-wqE:DFkTdJQbfmE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CWDmJ_D-wqE:DFkTdJQbfmE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CWDmJ_D-wqE:DFkTdJQbfmE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CWDmJ_D-wqE:DFkTdJQbfmE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CWDmJ_D-wqE:DFkTdJQbfmE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/CWDmJ_D-wqE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/datamapper-merb-ambiguous-sqlite-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2008/07/datamapper-merb-ambiguous-sqlite-error/</feedburner:origLink></item>
		<item>
		<title>Twitter-Free Fridays</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/BihamRByb6U/</link>
		<comments>http://www.tobyjoe.com/2008/07/twitter-free-fridays/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 21:00:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">urn:uuid:951fe756-3763-47e5-9663-b067a3c93896</guid>
		<description><![CDATA[<p>I complied with corporate mandate and wrote a post about <a href="http://rasterweb.net/raster/2008/07/10/twitter-free-friday-explained/">Twitter-Free Fridays</a> over on <a href="http://www.barbariangroup.com/posts/751-twitter_free_fridays_are_stupid">The Barbarian Group blog</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>I complied with corporate mandate and wrote a post about <a href="http://rasterweb.net/raster/2008/07/10/twitter-free-friday-explained/">Twitter-Free Fridays</a> over on <a href="http://www.barbariangroup.com/posts/751-twitter_free_fridays_are_stupid">The Barbarian Group blog</a>.</p>
<p>I understand the irony of complaining impotently about an impotent complainer, naturally. Hey, that&#8217;s what blogs are for, right?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=BihamRByb6U:j8-j5QQVIws:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=BihamRByb6U:j8-j5QQVIws:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=BihamRByb6U:j8-j5QQVIws:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=BihamRByb6U:j8-j5QQVIws:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=BihamRByb6U:j8-j5QQVIws:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=BihamRByb6U:j8-j5QQVIws:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=BihamRByb6U:j8-j5QQVIws:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=BihamRByb6U:j8-j5QQVIws:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=BihamRByb6U:j8-j5QQVIws:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=BihamRByb6U:j8-j5QQVIws:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/BihamRByb6U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/twitter-free-fridays/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2008/07/twitter-free-fridays/</feedburner:origLink></item>
		<item>
		<title>Business Value in rSpec Stories</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/DA3kUvpohqY/</link>
		<comments>http://www.tobyjoe.com/2008/07/business-value-in-rspec-stories/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 15:23:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">urn:uuid:b2f0288e-b6c5-4fd9-824a-ba840355a9e9</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=DA3kUvpohqY:PqVvp2G6UnI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=DA3kUvpohqY:PqVvp2G6UnI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=DA3kUvpohqY:PqVvp2G6UnI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=DA3kUvpohqY:PqVvp2G6UnI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=DA3kUvpohqY:PqVvp2G6UnI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=DA3kUvpohqY:PqVvp2G6UnI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=DA3kUvpohqY:PqVvp2G6UnI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=DA3kUvpohqY:PqVvp2G6UnI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=DA3kUvpohqY:PqVvp2G6UnI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=DA3kUvpohqY:PqVvp2G6UnI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/DA3kUvpohqY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/business-value-in-rspec-stories/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2008/07/business-value-in-rspec-stories/</feedburner:origLink></item>
		<item>
		<title>iPhone Unit Testing with Ruby</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/Z41GRi21MuA/</link>
		<comments>http://www.tobyjoe.com/2008/07/iphone-unit-testing-with-ruby/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 18:11:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">urn:uuid:c35f67c4-ef1e-4bab-9829-b4633b152a21</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Z41GRi21MuA:X1LENAaexnQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Z41GRi21MuA:X1LENAaexnQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Z41GRi21MuA:X1LENAaexnQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Z41GRi21MuA:X1LENAaexnQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Z41GRi21MuA:X1LENAaexnQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Z41GRi21MuA:X1LENAaexnQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Z41GRi21MuA:X1LENAaexnQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Z41GRi21MuA:X1LENAaexnQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Z41GRi21MuA:X1LENAaexnQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Z41GRi21MuA:X1LENAaexnQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/Z41GRi21MuA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/iphone-unit-testing-with-ruby/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2008/07/iphone-unit-testing-with-ruby/</feedburner:origLink></item>
		<item>
		<title>Eagerly Awaiting Merb 1.0, DataMapper 1.0</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/WManlVxWRvU/</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>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">urn:uuid:a838188c-9b9d-4518-8765-8f11bdd983ba</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WManlVxWRvU:TopVhQv0U8U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WManlVxWRvU:TopVhQv0U8U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WManlVxWRvU:TopVhQv0U8U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WManlVxWRvU:TopVhQv0U8U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WManlVxWRvU:TopVhQv0U8U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WManlVxWRvU:TopVhQv0U8U:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WManlVxWRvU:TopVhQv0U8U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WManlVxWRvU:TopVhQv0U8U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=WManlVxWRvU:TopVhQv0U8U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=WManlVxWRvU:TopVhQv0U8U:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/WManlVxWRvU" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://www.tobyjoe.com/2008/07/eagerly-awaiting-merb-1-0-datamapper-1-0/</feedburner:origLink></item>
		<item>
		<title>Unit Testing and the iPhone SDK</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/-hwsZ6QGZr8/</link>
		<comments>http://www.tobyjoe.com/2008/06/unit-testing-and-the-iphone-sdk/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 21:40:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">urn:uuid:6d4a4661-a664-4dc0-9f6f-e540ee2a8ae0</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=-hwsZ6QGZr8:yglYfCqU1y8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=-hwsZ6QGZr8:yglYfCqU1y8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=-hwsZ6QGZr8:yglYfCqU1y8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=-hwsZ6QGZr8:yglYfCqU1y8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=-hwsZ6QGZr8:yglYfCqU1y8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=-hwsZ6QGZr8:yglYfCqU1y8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=-hwsZ6QGZr8:yglYfCqU1y8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=-hwsZ6QGZr8:yglYfCqU1y8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=-hwsZ6QGZr8:yglYfCqU1y8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=-hwsZ6QGZr8:yglYfCqU1y8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/-hwsZ6QGZr8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/06/unit-testing-and-the-iphone-sdk/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2008/06/unit-testing-and-the-iphone-sdk/</feedburner:origLink></item>
		<item>
		<title>iTunes U Rules</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/cs9vg9LhB-4/</link>
		<comments>http://www.tobyjoe.com/2008/01/itunes-u-rules/#comments</comments>
		<pubDate>Sun, 06 Jan 2008 07:34:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">urn:uuid:73011eab-bec2-4fb7-9ed1-1fec06acb31f</guid>
		<description><![CDATA[<p>I am already fearing the point at which the velocity with which I consume content allows me to see the bottom of the proverbial barrel.</p>]]></description>
			<content:encoded><![CDATA[<p>I am already fearing the point at which the velocity with which I consume content allows me to see the bottom of the proverbial barrel.</p>
<p>Please, dear God, let Frontline start releasing content under iTunes U. And <span class="caps">MIT</span> Media Lab, and&#8230;</p>
<p>All I can hope is that they don&#8217;t kill the series before I can download it all.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=cs9vg9LhB-4:R6poK6KIHw8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=cs9vg9LhB-4:R6poK6KIHw8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=cs9vg9LhB-4:R6poK6KIHw8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=cs9vg9LhB-4:R6poK6KIHw8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=cs9vg9LhB-4:R6poK6KIHw8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=cs9vg9LhB-4:R6poK6KIHw8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=cs9vg9LhB-4:R6poK6KIHw8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=cs9vg9LhB-4:R6poK6KIHw8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=cs9vg9LhB-4:R6poK6KIHw8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=cs9vg9LhB-4:R6poK6KIHw8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/cs9vg9LhB-4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/01/itunes-u-rules/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2008/01/itunes-u-rules/</feedburner:origLink></item>
		<item>
		<title>ActiveRecord to_xml Security Strategy</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/KsyvMMU5Rx8/</link>
		<comments>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 07:15:38 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">urn:uuid:01a7d439-e935-4fe2-a15b-5f60f8ba5608</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KsyvMMU5Rx8:34jhxClm32g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KsyvMMU5Rx8:34jhxClm32g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KsyvMMU5Rx8:34jhxClm32g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KsyvMMU5Rx8:34jhxClm32g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KsyvMMU5Rx8:34jhxClm32g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KsyvMMU5Rx8:34jhxClm32g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KsyvMMU5Rx8:34jhxClm32g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KsyvMMU5Rx8:34jhxClm32g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=KsyvMMU5Rx8:34jhxClm32g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=KsyvMMU5Rx8:34jhxClm32g:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/KsyvMMU5Rx8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/</feedburner:origLink></item>
		<item>
		<title>Freaks and Geeks</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/9EMgU10KF3w/</link>
		<comments>http://www.tobyjoe.com/2007/11/freaks-and-geeks/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 01:34:54 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[About]]></category>

		<guid isPermaLink="false">urn:uuid:2e73d9e6-c41e-47a3-953d-4447368ed7db</guid>
		<description><![CDATA[<p>Most cultural classification systems to which I&#8217;ve been privy would probably qualify me as a member of the nerd family.</p>]]></description>
			<content:encoded><![CDATA[<p>Most cultural classification systems to which I&#8217;ve been privy would probably qualify me as a member of the nerd family.</p>
<p>For a living, I program computers. I use a dozen or so made-up, unspeakable (well, except for Ruby) languages to write stories that tell electricity how to flow across networks, through processors and from one magnetic point to another. Because I work in advertising, the last page of each of these fairy tales is (hopefully) a swarm of consumers choosing one breakfast cereal or male body spray over another.</p>
<p>I also dress poorly, by most non-nerd standards. No, I&#8217;m not fat. Nor am I especially thin. My clothes aren&#8217;t dirty. But aside from those clichés, I have an Aspbergers-like lack of comprehension of fashion. My ideal outfit is a plain black t-shirt, slim jeans, and the least-memorable sneakers available. On its own, my fashion sense doesn&#8217;t make me sound especially nerdy &#8211; just boring. It&#8217;s more than the choices, though &#8211; it&#8217;s the driver behind them. I dress myself by way of negation. I imagine everyone I see in a typical day, and I reduce and reduce by eliminating anything that stands out from one person to the next. Dressing seems to be, for me, a passive act of nihilism.</p>
<p>In fact, I am downright angered by the ironic trendwhores and hypebeasts and whatever other terms you want to use for idiots who spend good money on overpriced haircuts and clothing in order to eschew sincerity. It drives me wild. And yes, somehow I still manage to live in Greenpoint. But I digress&#8230;</p>
<p>What else makes me a nerd? Hrm. We have computers, we have lack of fashion passion.</p>
<p>Growing up, I was in gifted classes from second grade on. I competed in <a href="http://en.wikipedia.org/wiki/Odyssey_of_the_Mind">Olympics of the Mind</a> (later <a href="http://en.wikipedia.org/wiki/Odyssey_of_the_Mind">Odyssey of the Mind</a> due to a litigious <a href="http://en.wikipedia.org/wiki/International_Olympic_Committee"><span class="caps">IOC</span></a>) and usually won on the conceptual events and never on the performance-based events. Yeah, that&#8217;s right: I was the kid with stage fright <span class="caps">AT THE NERD OLYMPICS</span>.</p>
<p>Other nerdlies:</p>
<ul>
<li>One of my better friends releases software under the name <a href="http://bytesofspring.com/">Bytes of Spring</a> and I will never, ever stop chuckling proudly about that fact.</li>
</ul>
<ul>
<li>I have a brass bell on my bike. Ding-a-ling.</li>
</ul>
<ul>
<li>I have Robert Frost poetry tattooed on my arms.</li>
</ul>
<ul>
<li>I&#8217;ve never danced, and, in fact, can&#8217;t watch people dance without burying my head in a pillow for shame.</li>
</ul>
<p>Pretty nerdy stuff.</p>
<h2>Non-Nerd by Omission</h2>
<p>The subject of this post, really, is about the things that make me a <strong>bad nerd</strong>. The truth is, I have very few items on any of the requisite cultural consumption lists: the nerd list, the indy list, the political conscience list.<br />
In my younger days, I might have obscured this fact in order to seem cooler. You know &#8211; the way you grimace dismissively when someone mentions a band you don&#8217;t know, implying something along the lines of, &#8220;Meh.&#8221; but really meaning, &#8220;Meh. I don&#8217;t even know what that is, but all &#8216;Mehs&#8217; are the same to you, ya idiot.&#8221;</p>
<p>Well, I&#8217;m gonna fess up. Slightly. It would take forever to list the consumables I&#8217;ve not yet consumed. The meat is here. The exposed truth of the matter. The details are unimportant.</p>
<p>So let&#8217;s have a list, yeah?</p>
<h3>Missing from the Geek Checklist</h3>
<ul>
<li>2001: A Space Odyssey</li>
<li>Gremlins</li>
<li>ET before the re-release in 2002(ish)</li>
<li>Anything Star Trek</li>
<li>Any Star Wars <span class="caps">OTHER</span> than Episode 1, which I saw in a theater a few years ago</li>
<li>Most every video game ever made. I love games, but am non-committal. I own last-gen systems and like one game for each.</li>
<li>Commodore 64 and other classic computer systems. I began &#8220;doing computers&#8221; in like 1997. What can I say? I was a poor kid growing up&#8230;</li>
<li>Thinking 9/11 was a government conspiracy</li>
<li>Like the item above, visiting digg.com</li>
<li>Using Quicksilver for the Mac</li>
<li>Ever liking They Might Be Giants</li>
<li>Buying stuff from ThinkGeek</li>
<li>Being a fanboy of any type</li>
<li>Going to a <span class="caps">LAN</span> party</li>
<li>Reading a graphic novel</li>
<li>Collecting anything at all</li>
<li>Playing any <span class="caps">MMORPG</span>, any <span class="caps">RPG</span>, or Zelda</li>
<li>Reading Douglas Adams, Tolkien, Vonnegut, or Heinlein</li>
<li>Ever seeing an episode of Dr. Who</li>
<li>Being able to quote any Monty Python (movie, show, book, actor)</li>
<li>Ever seeing an episode of <a href="http://en.wikipedia.org/wiki/Freaks_and_Geeks">Freaks and Geeks</a></li>
<li>So very, very, very many more.</li>
</ul>
<h2>The Road to Recovery</h2>
<p>I received <a href="http://en.wikipedia.org/wiki/Freaks_and_Geeks">Freaks and Geeks</a>, Season 1, disc 1 in the mail recently from <a href="http://netflix.com/">Netflix</a>. I can&#8217;t stop reliving every moment of all three of the episodes I&#8217;ve seen thus far. I can&#8217;t believe how awesomely funny and perfectly tuned that show was.<br />
Freaks and Geeks has joined <a href="http://www.hbo.com/thewire/">The Wire</a> and <a href="http://en.wikipedia.org/wiki/Dexter_(TV_series)">Dexter</a> in my Best Stuff Ever on TV list.</p>
<p>I&#8217;m inspired, folks.</p>
<p>I&#8217;m gonna watch the rest of <a href="http://en.wikipedia.org/wiki/Freaks_and_Geeks">Freaks and Geeks</a>. When I&#8217;m done I&#8217;m gonna start exploring some of the other omissions. Maybe I&#8217;ve found the tip of an iceberg here.</p>
<p>This must be what it feels like to get sucked into a cult, like Scientology or Reagan Republicanism.</p>
<p>It feels mighty fine.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9EMgU10KF3w:MyyAkESUGK8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9EMgU10KF3w:MyyAkESUGK8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9EMgU10KF3w:MyyAkESUGK8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9EMgU10KF3w:MyyAkESUGK8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9EMgU10KF3w:MyyAkESUGK8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9EMgU10KF3w:MyyAkESUGK8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9EMgU10KF3w:MyyAkESUGK8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9EMgU10KF3w:MyyAkESUGK8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=9EMgU10KF3w:MyyAkESUGK8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=9EMgU10KF3w:MyyAkESUGK8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/9EMgU10KF3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/11/freaks-and-geeks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/11/freaks-and-geeks/</feedburner:origLink></item>
		<item>
		<title>RSS in Leopard Mail Sucks. For Me.</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/m_YczHEw3K8/</link>
		<comments>http://www.tobyjoe.com/2007/10/rss-in-leopard-mail-sucks-for-me/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 15:39:34 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">urn:uuid:1cfece39-658f-402a-bc01-14b2b89f832c</guid>
		<description><![CDATA[<p>I gave it a shot. I hoped it would work.<br />Unfortunately, I&#8217;ve become hooked on NetNewsWire Lite over the years.</p>]]></description>
			<content:encoded><![CDATA[<p>I gave it a shot. I hoped it would work.<br />
Unfortunately, I&#8217;ve become hooked on NetNewsWire Lite over the years.</p>
<p>My main gripes with the <span class="caps">RSS</span>/Atom support in Mail on Leopard are:</p>
<ul>
<li>It&#8217;s a pain to import <span class="caps">OPML</span> files. I <a href="/2007/10/27/leopard-mail-rss">posted a fix for that</a>, though.</li>
<li>The arrow keys aren&#8217;t incredibly useful for navigating between panels, through feeds and items, like they are in <span class="caps">NNWL</span>. Having to use my trackpad is lame. Having to tab focus on panes is bad.</li>
<li>I haven&#8217;t yet seen any way to customize the display of feeds in Mail. Not a biggie, but the default view is kind of blah.</li>
<li>Sorting seems to be alphabetical only.</li>
<li>When Mail is handling more than a couple of accounts (especially <span class="caps">IMAP</span> with server-side folders) it&#8217;s invariable that you&#8217;ll have to scroll to see your feeds. I&#8217;d rather Apple+Tab over to NetNewsWire Lite or Vienna.</li>
<li>It&#8217;s called &#8216;RSS&#8217; instead of &#8216;Feeds&#8217; or similar. This might seem nit-picky, but it&#8217;s like calling all computers &#8216;Windows&#8217; instead of&#8230; computers.</li>
</ul>
<p>I like the idea of having feeds in my Mail reader, aggregating the bulk of my passive reading. It&#8217;s kind of like using Adium to group all IM-type accounts (I don&#8217;t, but I see why folks do it).</p>
<p>Currently, the feed support in Mail is fine if you subscribe to one or two feeds I guess. The UI just isn&#8217;t conducive to someone with hundreds of feeds that are updated frequently.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=m_YczHEw3K8:dVFLsKZaC-k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=m_YczHEw3K8:dVFLsKZaC-k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=m_YczHEw3K8:dVFLsKZaC-k:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=m_YczHEw3K8:dVFLsKZaC-k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=m_YczHEw3K8:dVFLsKZaC-k:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=m_YczHEw3K8:dVFLsKZaC-k:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=m_YczHEw3K8:dVFLsKZaC-k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=m_YczHEw3K8:dVFLsKZaC-k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=m_YczHEw3K8:dVFLsKZaC-k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=m_YczHEw3K8:dVFLsKZaC-k:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/m_YczHEw3K8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/10/rss-in-leopard-mail-sucks-for-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/10/rss-in-leopard-mail-sucks-for-me/</feedburner:origLink></item>
		<item>
		<title>Leopard: Mail, RSS, RMagick, ImageMagick</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/xvqozacC7HM/</link>
		<comments>http://www.tobyjoe.com/2007/10/leopard-mail-rss/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 03:30:46 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">urn:uuid:a8f85995-822e-43bf-8c20-babb75d12b14</guid>
		<description><![CDATA[<p>Like a lot of developers, I&#8217;ve been running Leopard in one form or another for a couple of years now. In that time, I&#8217;ve had my share of frustrations. Of course, knowing at all times that I was evaluating pre-release software, I rolled with the punches with little more than the occasional bitch and moan (Apple: Don&#8217;t sue me. I only complained to others who&#8217;d signed an <span class="caps">NDA</span>. I swear. Don&#8217;t sue me.)</p>]]></description>
			<content:encoded><![CDATA[<p>Like a lot of developers, I&#8217;ve been running Leopard in one form or another for a couple of years now. In that time, I&#8217;ve had my share of frustrations. Of course, knowing at all times that I was evaluating pre-release software, I rolled with the punches with little more than the occasional bitch and moan (Apple: Don&#8217;t sue me. I only complained to others who&#8217;d signed an <span class="caps">NDA</span>. I swear. Don&#8217;t sue me.)</p>
<p>During my evaluation, I also found a few gotchas, tips, and compile tricks that might have been useful to others.</p>
<p>Given that the Apple <span class="caps">NDA</span> very clearly prohibited writing about Leopard before the release, I filed these things away.</p>
<p>A couple of the topics I didn&#8217;t write about were building ImageMagick and RMagick on Leopard and a how to on executing the Widget &#8216;flip&#8217; with CoreAnimation.</p>
<h2>Install RMagick on Leopard</h2>
<p>The RMagick stuff seems mostly figured out now, as MacPorts has stuff updated pretty well. My instructions after that first release included compiling everything by hand with special flags and a sacrificed chicken. Now it&#8217;s as simple as:</p>
<pre><code>sudo port install tiff -macosx
sudo port install ImageMagick
sudo gem install rmagick
</code></pre>
<p>Hopefully, someone can get FreeImage working soon&#8230; But I digress.</p>
<h2>CoreAnimation Widget Flip</h2>
<p>The CoreAnimation tip is something I&#8217;ll cover soon, once I confirm that everything is teh same on the official Leopard release.</p>
<h2>Import <span class="caps">OPML</span> Into Mail.app</h2>
<p>Today, I wanted to write about the pain in the ass of <span class="caps">RSS</span> on Mail.</p>
<p>I decided to export all my feeds from NetNewsWire Lite to <span class="caps">OPML</span> in hopes of giving Mail&#8217;s <span class="caps">RSS</span> features a shot. After all &#8211; mail, plus to-dos, plus iCal integration, plus <span class="caps">RSS</span> could make Mail my main app for non-dev work.</p>
<p>The main complaint I have is that Mail doesn&#8217;t support <span class="caps">OPML</span>. In fact, it doesn&#8217;t support any form of mass-import of feeds or bookmarks, aside from a klunky Safari-as-proxy import.</p>
<p>Safari, of course, doesn&#8217;t support <span class="caps">OPML</span>. Instead, it uses Netscape bookmark files (NETSCAPE-Bookmark-file-1 <span class="caps">DTD</span>). Yay, cutting edge!</p>
<p>It&#8217;s dumb, but here&#8217;s what you have to do:</p>
<ol>
<li>Export to <span class="caps">OPML</span> from NetNewsWire Lite (or Vienna, or whatever you use)</li>
<li>Run the <span class="caps">PHP</span> script at the end of this post with <strong>php convert_opml_flat_to_nbm.php MySubscriptions.opml &gt; MySubscriptions.html</strong></li>
<li>Import MySubscriptions.html into Safari</li>
<li>In Mail, go to File &gt; Add <span class="caps">RSS</span> Feeds&#8230;</li>
<li>Check the radio button for Browse feeds in Safari Bookmarks</li>
<li>Check whichever feeds you want added</li>
</ol>
<p>Wow. That was simple. And painless. <span class="caps">OMG TOTALLY NOT PSYCHE YOUR MIND</span>!</p>
<p>Before you do all that, though, let me point out an apparent failure on the part of the Mail <span class="caps">RSS</span> reader: it doesn&#8217;t pass the referrer on requests for assets. This sucks because <a href="http://mihow.com/">mihow.com</a>, along with tons of other sites, turn off hotlinking.</p>
<p>What&#8217;s interesting about this, to me, is that Safari sends referrers. I&#8217;d have thought Mail would have used the same lib (or functionality) as Safari for request management. Seems like a WebKit no-brainer to me.</p>
<h2><span class="caps">PHP</span> Script to Convert <span class="caps">OPML</span> to Netscape Bookmarks</h2>
<p>Save this to your machine as &#8216;convert.php&#8217; (or whatever you want to call it). If you export your <span class="caps">OPML</span> to your ~/Desktop, you may as well save this as ~/Desktop/convert.php, which will enable you to easily run the command from Terminal.</p>
<pre><code>
&lt;?php
    function usage(){
        return "Usage: php convert.php /path/to/opml_file.opml &gt; output.html\r\n";
    }
    #    Print usage if need be.
    if(count($argv) &lt; 2) die(usage());
    #    Grab the file path.
    $f = $argv[1];
    #    Load it into a SimpleXML.
    $xml = simplexml_load_file($f);
    #    Output buffer
    $out = '';
    #    Run through the nodes in the OPML and buffer the Netscape output
    foreach($xml-&gt;xpath("//outline") as $outline ){
        $title = htmlspecialchars($outline['title'], ENT_QUOTES);
        $feed = htmlspecialchars($outline['xmlUrl']);
        if($feed){
            $out .= "\r\n\t" . '&lt;dt&gt;&lt;a href="' . str_replace("http://", "feed://", $feed) . '"&gt;' . $title . '&lt;/a&gt;';
        }else{
            $out .= "&lt;/dl&gt;&lt;p&gt;\r\n&lt;dt&gt;&lt;h3&gt;$title&lt;/h3&gt;&lt;dl&gt;&lt;p&gt;";
        }
    }
    $out .= "\r\n"
?&gt;
&lt;!DOCTYPE NETSCAPE-Bookmark-file-1&gt;
&lt;title&gt;MyBookmarks&lt;/title&gt;
&lt;h1&gt;MyBookmarks&lt;/h1&gt;
&lt;dl&gt;&lt;p&gt;
&lt;?php echo $out; ?&gt;
&lt;/dl&gt;&lt;p&gt;
</code></pre>
<h2>Alternate Method for Importing Feeds</h2>
<p>I can&#8217;t believe I didn&#8217;t try it first, but as someone commented, you can just drag feeds from NetNewsWire or Vienna into the accounts area of Mail and <span class="caps">BAM</span> &#8211; feeds. Man, what a simple solution. Oh well, given the traffic to this post, I&#8217;m not the only idiot out there <img src='http://www.tobyjoe.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=xvqozacC7HM:Q_P2SQZZiYA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=xvqozacC7HM:Q_P2SQZZiYA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=xvqozacC7HM:Q_P2SQZZiYA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=xvqozacC7HM:Q_P2SQZZiYA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=xvqozacC7HM:Q_P2SQZZiYA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=xvqozacC7HM:Q_P2SQZZiYA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=xvqozacC7HM:Q_P2SQZZiYA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=xvqozacC7HM:Q_P2SQZZiYA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=xvqozacC7HM:Q_P2SQZZiYA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=xvqozacC7HM:Q_P2SQZZiYA:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/xvqozacC7HM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/10/leopard-mail-rss/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/10/leopard-mail-rss/</feedburner:origLink></item>
		<item>
		<title>West Coast Beaner</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/Y5S-sk2zcwU/</link>
		<comments>http://www.tobyjoe.com/2007/04/west-coast-beaner/#comments</comments>
		<pubDate>Tue, 10 Apr 2007 22:05:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">urn:uuid:fb5ed668-41c5-45fe-8d98-2792d36c8a8d</guid>
		<description><![CDATA[<p>I&#8217;m flying to San Francisco to spend some a couple of days with our friends in Cupertino. There is much work to be done on our <span class="caps">WWDC</span> talk, so Keith and I are heading out today. Chandler will join us tomorrow.</p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m flying to San Francisco to spend some a couple of days with our friends in Cupertino. There is much work to be done on our <span class="caps">WWDC</span> talk, so Keith and I are heading out today. Chandler will join us tomorrow.</p>
<p>As much as I want to see friends out there, the workload and short duration of the trip might limit me to dinner on Thursday evening.</p>
<p>I hate flying, but at least I&#8217;ll be on JetBlue and will have a few hours of podcasts (Rachel Maddow, Intelligence Squared) to catch up on.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Y5S-sk2zcwU:qSt2UotMBog:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Y5S-sk2zcwU:qSt2UotMBog:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Y5S-sk2zcwU:qSt2UotMBog:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Y5S-sk2zcwU:qSt2UotMBog:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Y5S-sk2zcwU:qSt2UotMBog:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Y5S-sk2zcwU:qSt2UotMBog:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Y5S-sk2zcwU:qSt2UotMBog:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Y5S-sk2zcwU:qSt2UotMBog:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=Y5S-sk2zcwU:qSt2UotMBog:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=Y5S-sk2zcwU:qSt2UotMBog:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/Y5S-sk2zcwU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/04/west-coast-beaner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/04/west-coast-beaner/</feedburner:origLink></item>
		<item>
		<title>WWDC 2007</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/uJ5If5xLrG0/</link>
		<comments>http://www.tobyjoe.com/2007/03/wwdc-2007/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 23:10:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">urn:uuid:791017b7-6f28-458d-8fc6-0a2c497ab088</guid>
		<description><![CDATA[<p>Chandler, Keith and I were just given clearance to promote the fact that we are speaking at the Apple developer conference (WWDC) this year. You can read about our session <a href="http://developer.apple.com/wwdc/tracks/contentmedia.html">here</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Chandler, Keith and I were just given clearance to promote the fact that we are speaking at the Apple developer conference (WWDC) this year. You can read about our session <a href="http://developer.apple.com/wwdc/tracks/contentmedia.html">here</a>.</p>
<p>We&#8217;re doing the Hybrid Web/Cocoa Application Development Lab and Designing and Developing Hybrid-Web/Cocoa Applications session.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=uJ5If5xLrG0:bpXaxktoWwM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=uJ5If5xLrG0:bpXaxktoWwM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=uJ5If5xLrG0:bpXaxktoWwM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=uJ5If5xLrG0:bpXaxktoWwM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=uJ5If5xLrG0:bpXaxktoWwM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=uJ5If5xLrG0:bpXaxktoWwM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=uJ5If5xLrG0:bpXaxktoWwM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=uJ5If5xLrG0:bpXaxktoWwM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=uJ5If5xLrG0:bpXaxktoWwM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=uJ5If5xLrG0:bpXaxktoWwM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/uJ5If5xLrG0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/03/wwdc-2007/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/03/wwdc-2007/</feedburner:origLink></item>
		<item>
		<title>How to Start a Web Site, Part 2</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/NvZlBKVJm5A/</link>
		<comments>http://www.tobyjoe.com/2007/03/how-to-start-a-web-site-part-2/#comments</comments>
		<pubDate>Wed, 07 Mar 2007 23:26:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">urn:uuid:4b9d24bf-ac74-4710-887a-b66f1ea2adb3</guid>
		<description><![CDATA[<p>In <a href="/2007/2/28/how-to-start-a-web-site-part-1">How to Start a Web Site, Part 1</a>, I lightly outlined the process for obtaining a domain name, starting a shared hosting account, and setting <span class="caps">DNS</span> servers.</p>]]></description>
			<content:encoded><![CDATA[<p>In <a href="/2007/2/28/how-to-start-a-web-site-part-1">How to Start a Web Site, Part 1</a>, I lightly outlined the process for obtaining a domain name, starting a shared hosting account, and setting <span class="caps">DNS</span> servers.</p>
<p>In this installment, I&#8217;ll give a bit of insight into some of the publishing/blog software out there. I&#8217;ll focus only on the ones I&#8217;ve used, of course.</p>
<p>Before discussing specific packages, though, I guess I should touch on what software <strong>is</strong>, how it relates to resources (like pages), and where a database fits into everything.</p>
<p>I&#8217;ll also tell you how to set up the very cool <a href="http://haveamint.com">Mint</a> stats package on a host running <span class="caps">PHP</span> and MySQL.</p>
<h2>The Server</h2>
<p>Remember in <a href="/2007/2/28/how-to-start-a-web-site-part-1">Part 1</a> when I described a server as a computer that sends information out in response to requests from a Web browser? I was <strong>totally</strong> telling the truth. I was also <strong>totally</strong> skipping an important, yet confusing distinction.</p>
<p>The actual hardware <strong>is</strong> called a &#8220;server&#8221; but so is a piece of software running <strong>on</strong> that computer. Maybe it&#8217;s best to say that the combination of the two is really what constitutes a server versus a normal computer. A server is a computer running server software, in other words.</p>
<p>Most Web servers are running the Apache <span class="caps">HTTP</span> server. Apache is great. It&#8217;s a classic. It&#8217;s a workhorse. There are alternatives, of course, but Apache is sort of king.</p>
<h2>Static vs. Dynamic</h2>
<p>Generally, there are two ways in which a given resource (like a blog entry) can be served: statically and dynamically.</p>
<p>A static resource is a file living inside a folder. When the Web server software receives a request for a file (represented by a <span class="caps">URI</span>, like &#8220;tobyjoe.com/about/index.html&#8221;) it looks inside of a given folder, finds the file, and sends it to the browser that requested it.</p>
<p>Dynamic resources are the results of programs and are often recreated every time a user sends a request. Leaving a comment on a blog or performing other operations that add information to a page is a good example of a dynamic request.</p>
<h2>Databases</h2>
<p>You may wonder what happens when you add a comment to a blog and where the comment is stored so that other folks can see it. The answer is that most dynamic content is stored in a database.</p>
<p>A database is any collection of persisted, or stored, data. A text file can be considered a database, though most folks prefer to use a more complex system for storing their data.</p>
<p>On most Web servers, the database of choice is a special software package called MySQL. There are lots of different database types and systems out there, though. Another excellent database system is called PostgreSQL. It&#8217;s not quite as popular as MySQL, but it&#8217;s catching up. A few others you may have heard of are Oracle, <span class="caps">MSSQL</span>, Sybase, SQLite, and Access (yuck!)</p>
<p>In all likelihood, your shared hosting account will use Apache, MySQL, and a scripting language.</p>
<h2>Scripting</h2>
<p>When a dynamic request hits a server, the server software needs to know how to respond. The most common and essential functionality, like sending an image file, is usually handled by Apache. It&#8217;s excellent at doing the cookie-cutter stuff that all sites need to do: sending files, recording a log message for every hit to your site, and deciding what <strong>type</strong> of resource is needed by a given request.</p>
<p>Because Apache is so solid, we developers don&#8217;t like to go fiddling with its insides. It&#8217;s just not that fun. Or safe.</p>
<p>So how do we write programs that can do whatever we want if we aren&#8217;t modifying Apache? As you may have deduced from the title of this section (you&#8217;re so clever!), the answer is to use server scripting.</p>
<p>The most popular scripting language for the Web is <span class="caps">PHP</span>. It&#8217;s so popular, in fact, I decided to write a book about it.</p>
<p>You can think of <span class="caps">PHP</span> (or server scripting in general) as a simple way to write a custom application for processing Web requests. When Apache sees a request for a <span class="caps">PHP</span> script (usually ending in &#8220;.php&#8221;) it will use its <span class="caps">PHP</span> interpreter to read the script and perform whatever actions are inside before sending the result back to the browser.</p>
<p>Common tasks of <span class="caps">PHP</span> are to do things like connect to a database system, retrieve all the blog posts that mention pizza, create a page that shows a list of links to those posts, and send the resulting dynamically-generated page back to the browser.</p>
<p>I know, it&#8217;s daunting.</p>
<p>Some of the common languages used to write Web applications are: <span class="caps">PHP</span>, Ruby, Python, Java, C#, and perl. There are, of course, more &#8211; but who cares?</p>
<h2>Publishing and/or Blog Software</h2>
<p>Now that I&#8217;ve described all that semi-technical crap, we can get to the point: Unless you&#8217;re a developer with an itch to scratch, you should consider using established and respected software written by other folks and reviewed by endless smarties before writing your own. That isn&#8217;t true for everything, but this also isn&#8217;t an article for developers, so I&#8217;ll digress.</p>
<p>I&#8217;ve installed and used a few of the popular self-publishing packages and can speak fondly of a couple of them.</p>
<p>Most of them are fairly similar to a newbie, and you will probably be fine with whichever you choose.</p>
<p>The big players are:</p>
<ul>
<li><a href="http://mephistoblog.com">Mephisto</a></li>
<li><a href="http://movabletype.org">MovableType</a></li>
<li><a href="http://www.textpattern.com/">TextPattern</a></li>
<li><a href="http://wordpress.org/">WordPress</a></li>
</ul>
<p>I&#8217;ve had experience with each of these. Honestly, they&#8217;re all just fine and have active development communities adding plug-ins and enhancements.<br />
I used <a href="http://www.textpattern.com/">TextPattern</a> back when <a href="http://ian.fiftymillimeter.com/">Ian Kennedy</a> and I were running <a href="http://fiftymillimeter.com">FiftyMillimeter</a>. It worked fine, but the UI wasn&#8217;t great.</p>
<p>I personally use <a href="http://mephistoblog.com">Mephisto</a>, but that&#8217;s in large part because it&#8217;s written in <a href="http://rubyonrails.org">Rails</a> and I&#8217;m a pretty active Rails developer.</p>
<p>Check out the sites for each, peep the screenshots, and check around on sites that you enjoy to see what tools they use. It&#8217;s often mentioned somewhere in a footer or sidebar.</p>
<h2>Stats</h2>
<p>I work in advertising, and build sites for giant brands, small hip brands, and have done just about every-damn-type of project on the Web. One consistent desire, naturally, is to monitor stats: how many people visit, how many come back, where they&#8217;re from, how they found you, etc.</p>
<p>There are too many reporting packages out there. Most of them were &#8216;designed&#8217; by developers and are clunky and geared towards information you probably won&#8217;t care about.</p>
<p>Enter <a href="http://haveamint.com">Mint</a>.</p>
<p>Mint was developed and designed by <a href="http://shauninman.com">Shaun Inman</a> and reflects his interests (and yours, I bet): good UI, good usability and good info design. The code is pretty solid and the plugin architecture is nice. I have a few nitpicks, but what geek doesn&#8217;t nitpick <span class="caps">EVERYTHING</span> under the sun?</p>
<p>I wholeheartedly endorse the use of Mint if you have access to a server that runs <span class="caps">PHP</span> and MySQL. It&#8217;s $30 for a license, but worth it.</p>
<h2>Next</h2>
<p>As you can see, there are so many options at every turn that writing a general tutorial is daunting if not impossible. I think the next steps are to cover Google Adsense. What else?</p>
<p>Holler.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=NvZlBKVJm5A:TGTk_ikM7tc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=NvZlBKVJm5A:TGTk_ikM7tc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=NvZlBKVJm5A:TGTk_ikM7tc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=NvZlBKVJm5A:TGTk_ikM7tc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=NvZlBKVJm5A:TGTk_ikM7tc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=NvZlBKVJm5A:TGTk_ikM7tc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=NvZlBKVJm5A:TGTk_ikM7tc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=NvZlBKVJm5A:TGTk_ikM7tc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=NvZlBKVJm5A:TGTk_ikM7tc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=NvZlBKVJm5A:TGTk_ikM7tc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/NvZlBKVJm5A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/03/how-to-start-a-web-site-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/03/how-to-start-a-web-site-part-2/</feedburner:origLink></item>
		<item>
		<title>How to Start a Web Site, Part 1</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/SnX7_OTMg1c/</link>
		<comments>http://www.tobyjoe.com/2007/02/how-to-start-a-web-site-part-1/#comments</comments>
		<pubDate>Thu, 01 Mar 2007 03:58:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">urn:uuid:ccf63d4d-c7af-40ab-bc78-051e90c85a17</guid>
		<description><![CDATA[<p>Over the past year or so, I&#8217;ve had several friends ask for assistance in starting a site. Often enough, the cheap bastards ask for hosting or free design as well. Some people&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Over the past year or so, I&#8217;ve had several friends ask for assistance in starting a site. Often enough, the cheap bastards ask for hosting or free design as well. Some people&#8230;</p>
<p>So here I am, giving away some <span class="caps">GEMS</span> of knowledge for nothing at all. The trade-off is that I don&#8217;t know what format to use here and will probably edit and refine this a bit to impart some grace. Take a moment now to screen-cap anything you want to hold against me in the future.</p>
<p>Oh, and for the geeks &#8211; I know this shit inside and out, and am taking some liberties with simplification for the sake of clarity here.</p>
<p>(Much thanks to <a href="http://destructuring.net/">Jon Vanasco</a> for helping me see that my narrative for <span class="caps">DNS</span> queries by browsers was kind of obtuse!)</p>
<h2>The Domain</h2>
<p>Here&#8217;s the scoop on how domain names work. Consider these two statements.</p>
<ul>
<li>Every site lives on a server. A server is a computer. Every computer has a number used to reach it.</li>
<li>TobyJoe has a phone. A phone is a computer. Every phone has a number used to reach it.</li>
</ul>
<p>Much like the numbers we use for our phones, computers use IP addresses. An IP address is a set of numbers with some dots tossed in to make it techy-looking.</p>
<p>Because it&#8217;s tough to remember IP addresses, people create nicknames for them. The domain name &#8216;tobyjoe.com&#8217; is a nickname for an IP address. You already use nicknames in the phonebook of your cell phone. Domain names are just like those entries in your phonebook.</p>
<p><strong><span class="caps">STEP 1</span>:</strong> Find yourself a domain name. Think something up. Make it good.</p>
<h2>Registrars</h2>
<p>Now that you have an awesome domain name picked out, I&#8217;ll tell you how to find out that it&#8217;s already taken and that you&#8217;ll have to find a less-awesome replacement.</p>
<p>To check on the availability of a domain name, the easiest thing to do is go to a registrar.</p>
<p>You might ask, &#8220;What is a registrar?&#8221;</p>
<p>Registrars are companies that overcharge you for something that actually costs fifty cents. Seriously. Registrars can seem kind of sleazy (and some are) but there are a few out there worthy of your trust and cash.</p>
<p>For no great reason, I use <a href="http://godaddy.com">GoDaddy</a>. They have a few downsides, sure. They&#8217;re far too aggressive in trying to trick folks into buying stupid options and upgrades. Their site is cluttered and tacky as hell. But you know what? They&#8217;ve never done me wrong.</p>
<p>Use whomever you want, of course. Try to stick with someone you&#8217;ve heard good things about.</p>
<p>Just keep this in mind: skip all the bull. Don&#8217;t go for multiple years. Don&#8217;t go for anonymous registration. Don&#8217;t go for adding .net, .org, .blah to the order. Don&#8217;t add site hosting. Just get the domain. That&#8217;s all. Seriously.</p>
<p><strong><span class="caps">STEP 2</span>:</strong> Register your domain with a registrar.</p>
<h2>Hosting</h2>
<p>Remember all that stuff above that you read entirely and comprehended completely? Well, the <strong>server</strong> living at a certain <strong>IP address</strong> and pointed to by a <strong>domain name</strong> has to exist or your site is nothing. Nada. A blog.</p>
<p>To get access to a server, you have to pay. I recommend a shared hosting plan from <a href="http://railsmachine.com>Rails Machine</a> or <a href="http://textdrive.com">TextDrive</a>. There are lots of good hosts out there. These two are recommended by me, so they&#8217;re better than others, obviously.</p>
<p><strong><span class="caps">STEP 3</span>:</strong> Set up a hosting account. Use RailsMachine if you&#8217;re doing a Rails site (like a Mephisto blog). Use TextDrive otherwise. Or whatever. You&#8217;ll need a credit card, your domain name, and email address. Pick a Linux hosting plan. Stay away from Windows. It&#8217;s just trash, <span class="caps">IMO</span>.</p>
<h2>Setting Your Nameservers</h2>
<p>Nameservers, or <span class="caps">DNS</span> servers, confuse a lot of people at first. Hell, a lot of people have had sites for years and still have no idea what <span class="caps">DNS</span> servers do. It isn&#8217;t really required knowledge, but it&#8217;s good to have.</p>
<p><span class="caps">DNS</span> servers are where you set up an entry saying &#8220;The computer address for &#8216;tobyjoe.com&#8217; is (209.59.180.50).&#8221;</p>
<p>To stick with the metaphor above, a <span class="caps">DNS</span> server is the phone book on your cutsie-wootsie wittle blinged-out Sidekick. You pick a name, it knows the number. You never have to know the number. You become dumber. It&#8217;s awesome.</p>
<p>Your browser and mail client and most every other networked app refer to <span class="caps">DNS</span> servers when they don&#8217;t already know the address for a domain. For new domains, like yours, most machines will have to grab the entry from a <span class="caps">DNS</span> server the first time a user tries to visit. This all happens behind the scenes and usually takes only a few milliseconds. Neat, eh?</p>
<p>The way the <span class="caps">DNS</span> (aka, global domain phonebook) system was designed allows for changes on one server to propagate to all <span class="caps">DNS</span> servers within a day or two. This is good because it means everyone will have a <span class="caps">DNS</span> server nearby that can be used to find the addresses for a given domain name. If there were only a small number of <span class="caps">DNS</span> servers, they would be overwhelmed immediately.</p>
<p>When you set up your hosting plan, you will receive one or more (usually two) <span class="caps">DNS</span> server names. They might be something like &#8220;ns1.blahblah.com&#8221; or &#8220;192.168.1.3&#8243;</p>
<p>You will need to use your registrar&#8217;s site (like GoDaddy) to set the nameservers for your domain to whatever your new host sent you. Each registrar is different, but it&#8217;s usually pretty clear. Often, you&#8217;ll select your domain, and click something like &#8216;Edit Nameservers&#8217; or &#8216;Add Nameservers&#8217; and just paste in the &#8220;ns1.blahblah.com&#8221; or &#8220;192.168.1.3&#8243; bits.</p>
<p><strong><span class="caps">STEP 4</span>:</strong> Set the nameservers for your new domain at your registrar.</p>
<h2>Waiting</h2>
<p>The world-wide domain name system will have to be updated to reflect this new domain-to-IP address relationship you&#8217;ve created. To stick with the cell phone metaphor, all the phonebooks in all the cell phones in the world will automatically receive your name and number combo. You&#8217;re gonna be <span class="caps">SO POPULAR</span>!</p>
<p>This process takes around 24-72 hours. It takes roughly the same amount of time to die from acetaminophen toxicity, btw.</p>
<p><strong><span class="caps">STEP 5</span>:</strong> Wait. Every few hours, anxiously type your domain name into a browser and see if you get something other than &#8216;not found&#8217; in response. When you do, come back here for part two of this enthralling series.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=SnX7_OTMg1c:HQ8s1EHXlVg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=SnX7_OTMg1c:HQ8s1EHXlVg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=SnX7_OTMg1c:HQ8s1EHXlVg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=SnX7_OTMg1c:HQ8s1EHXlVg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=SnX7_OTMg1c:HQ8s1EHXlVg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=SnX7_OTMg1c:HQ8s1EHXlVg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=SnX7_OTMg1c:HQ8s1EHXlVg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=SnX7_OTMg1c:HQ8s1EHXlVg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=SnX7_OTMg1c:HQ8s1EHXlVg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=SnX7_OTMg1c:HQ8s1EHXlVg:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/SnX7_OTMg1c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/02/how-to-start-a-web-site-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/02/how-to-start-a-web-site-part-1/</feedburner:origLink></item>
		<item>
		<title>Ruby on Rails in .net</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/CgbFqLuDjHk/</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>tobyjoe</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">urn:uuid:362f29f7-955f-49d3-bcb3-ae53c3640f97</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. <img src='http://www.tobyjoe.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CgbFqLuDjHk:cMfAfdq6U50:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CgbFqLuDjHk:cMfAfdq6U50:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CgbFqLuDjHk:cMfAfdq6U50:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CgbFqLuDjHk:cMfAfdq6U50:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CgbFqLuDjHk:cMfAfdq6U50:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CgbFqLuDjHk:cMfAfdq6U50:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CgbFqLuDjHk:cMfAfdq6U50:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CgbFqLuDjHk:cMfAfdq6U50:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=CgbFqLuDjHk:cMfAfdq6U50:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=CgbFqLuDjHk:cMfAfdq6U50:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/CgbFqLuDjHk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/02/ruby-on-rails-in-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/02/ruby-on-rails-in-net/</feedburner:origLink></item>
		<item>
		<title>The Big Nerd Ranch</title>
		<link>http://feedproxy.google.com/~r/TobyJoe/~3/ibL9uvt1P5k/</link>
		<comments>http://www.tobyjoe.com/2007/02/big-nerd-ranch/#comments</comments>
		<pubDate>Fri, 23 Feb 2007 07:50:00 +0000</pubDate>
		<dc:creator>tobyjoe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">urn:uuid:0e4e848d-88f9-45cd-a2b7-49ada1ae08e3</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ibL9uvt1P5k:1G-u9hvTOkE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ibL9uvt1P5k:1G-u9hvTOkE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ibL9uvt1P5k:1G-u9hvTOkE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ibL9uvt1P5k:1G-u9hvTOkE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/TobyJoe?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ibL9uvt1P5k:1G-u9hvTOkE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ibL9uvt1P5k:1G-u9hvTOkE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ibL9uvt1P5k:1G-u9hvTOkE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ibL9uvt1P5k:1G-u9hvTOkE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TobyJoe?a=ibL9uvt1P5k:1G-u9hvTOkE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TobyJoe?i=ibL9uvt1P5k:1G-u9hvTOkE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TobyJoe/~4/ibL9uvt1P5k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/02/big-nerd-ranch/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.tobyjoe.com/2007/02/big-nerd-ranch/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.236 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-10-31 16:33:21 -->
