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

<channel>
	<title>TobyJoe &#187; Web</title>
	<atom:link href="http://www.tobyjoe.com/topics/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tobyjoe.com</link>
	<description>Toby Joe Boudreaux on Tech, Creativity, UX, and All Things Digital</description>
	<lastBuildDate>Thu, 14 Apr 2011 00:28:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>ChatSnapper &#8211; Alpha</title>
		<link>http://www.tobyjoe.com/2010/02/chatsnapper-alpha/</link>
		<comments>http://www.tobyjoe.com/2010/02/chatsnapper-alpha/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 04:09:27 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Web]]></category>

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

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

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

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

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

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

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

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>If you get an error such as:</p><pre><code>near ")": syntax error</code></pre><p>Check to see if you have any models declaring themselves as DataMapper::Resource but <span class="caps">WITHOUT</span> any property declarations.</p>]]></description>
			<content:encoded><![CDATA[<p>If you get an error such as:</p>
<pre><code>near ")": syntax error</code></pre>
<p>Check to see if you have any models declaring themselves as DataMapper::Resource but <span class="caps">WITHOUT</span> any property declarations.</p>
<p>No meaningful error is reported for this case at the moment (with <span class="caps">HEAD</span> as of last night) so it&#8217;s a weird one to debug &#8211; especially if you generate a bunch of model classes ahead of defining their behavior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/datamapper-merb-ambiguous-sqlite-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitter-Free Fridays</title>
		<link>http://www.tobyjoe.com/2008/07/twitter-free-fridays/</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>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false"></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>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/07/twitter-free-fridays/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iTunes U Rules</title>
		<link>http://www.tobyjoe.com/2008/01/itunes-u-rules/</link>
		<comments>http://www.tobyjoe.com/2008/01/itunes-u-rules/#comments</comments>
		<pubDate>Sun, 06 Jan 2008 08:34:00 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false"></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>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2008/01/itunes-u-rules/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ActiveRecord to_xml Security Strategy</title>
		<link>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/</link>
		<comments>http://www.tobyjoe.com/2007/11/activerecord-to_xml-security-strategy/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 08:15:38 +0000</pubDate>
		<dc:creator>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>

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

		<guid isPermaLink="false"></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>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/11/freaks-and-geeks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Start a Web Site, Part 2</title>
		<link>http://www.tobyjoe.com/2007/03/how-to-start-a-web-site-part-2/</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>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false"></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>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/03/how-to-start-a-web-site-part-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>How to Start a Web Site, Part 1</title>
		<link>http://www.tobyjoe.com/2007/02/how-to-start-a-web-site-part-1/</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>Toby Joe Boudreaux</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false"></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>
]]></content:encoded>
			<wfw:commentRss>http://www.tobyjoe.com/2007/02/how-to-start-a-web-site-part-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

