<?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 version="2.0">
  <channel>
    <title>ricroberts</title>
    <description>Articles from ricroberts.com</description>
    <link>http://ricroberts.com</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RichText" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="richtext" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/RichText" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://my.feedlounge.com/external/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://static.feedlounge.com/buttons/subscribe_0.gif">Subscribe with FeedLounge</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.inclue.com/client/1?feed=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.inclue.com/friends/chicklet.gif">Subscribe with inclue!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://odeo.com/listen/subscribe?feed=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://odeo.com/img/badge-channel-black.gif">Subscribe with ODEO</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.podnova.com/add.srf?url=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://www.podnova.com/img_chicklet_podnova.gif">Subscribe with Podnova</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FRichText" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><item>
      <title>Problems with this blog's feed</title>
      <description>&lt;p&gt;You may have noticed a bunch of articles about the semantic web appear in this feed over the last couple of days. Apologies for any confusion.&lt;/p&gt;
&lt;p&gt;It happened because my &lt;a href="http://www.swirrl.com"&gt;Swirrl&lt;/a&gt; co-founder, Bill, moved &lt;a href="http://www.webofdatablog.com"&gt;his blog&lt;/a&gt; over to this blog-engine at the weekend, and we had some caching/redirect issues on our server, so my blog was serving up Bill&amp;#8217;s feed for a while!&lt;/p&gt;
&lt;p&gt;I think that the feed should be sorted out now, but I&amp;#8217;ll keep an eye on it for a bit to make sure. :)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=VBuTcj6clJc:I_8bRFWY-7M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=VBuTcj6clJc:I_8bRFWY-7M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=VBuTcj6clJc:I_8bRFWY-7M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=VBuTcj6clJc:I_8bRFWY-7M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=VBuTcj6clJc:I_8bRFWY-7M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=VBuTcj6clJc:I_8bRFWY-7M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=VBuTcj6clJc:I_8bRFWY-7M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=VBuTcj6clJc:I_8bRFWY-7M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=VBuTcj6clJc:I_8bRFWY-7M:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 15 Feb 2010 10:08:48 +0000</pubDate>
      <link>http://ricroberts.com/articles/problems-with-this-blog-s-feed</link>
      <guid>http://ricroberts.com/articles/problems-with-this-blog-s-feed?updated_at=2010-02-15T10:08:48</guid>
    </item>
    <item>
      <title>Create Your Own Semantic Web-enabled Blog</title>
      <description>&lt;p&gt;A few weeks ago I &lt;a href="http://ricroberts.com/articles/semanticjournal-blog-engine"&gt;moved this blog&lt;/a&gt; over to Swirrl&amp;#8217;s own open-source Rails+CouchDB blog engine, &lt;strong&gt;SemanticJournal&lt;/strong&gt; (At Swirrl, we like to call it &amp;#8216;Semjo&amp;#8217; for short).&lt;/p&gt;
&lt;p&gt;As well as the standard blogging features, Semjo includes some Semantic Web features, in the form of helpers to aid with marking up elements on public-facing pages with RDFa (such as the date, author, title of articles etc).&lt;/p&gt;
&lt;p&gt;Earlier this week, I wrote a bit of documentation and made the Github repository public. So now, you can grab the code at &lt;a href="http://github.com/Swirrl/SemanticJournal/"&gt;github.com/Swirrl/SemanticJournal&lt;/a&gt;, and run your own Semjo blog.  The readme file in the repo explains how to get up and running, including designing your own theme.&lt;/p&gt;
&lt;p&gt;Current Features:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;CouchDB Storage. Each blog has its own CouchDB database.&lt;/li&gt;
	&lt;li&gt;Helpers for marking up elements with RDFa&lt;/li&gt;
	&lt;li&gt;Host multiple blogs using the same rails app&lt;/li&gt;
	&lt;li&gt;Write articles with Textile markup&lt;/li&gt;
	&lt;li&gt;Design the theme used for each blog, using &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;ERB&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Caching, using Rack/Cache&lt;/li&gt;
	&lt;li&gt;Just provides the blog engine only but&amp;#8230;&lt;/li&gt;
	&lt;li&gt;Easy to extend with 3rd party plugins (e.g. Disqus for comments, ShareThis for social bookmarking, Google for search etc., Gists for Code/Syntax highlighting, S3 for storing other assets used on your blog).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Semjo is still very much work in progress.  Please let me know if you encounter any bugs, or if there are any features you would like to see (the &lt;a href="http://github.com/Swirrl/SemanticJournal/blob/master/README"&gt;&lt;span class="caps"&gt;README&lt;/span&gt;&lt;/a&gt; contains my current list of todos).&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=8mYDkCXqOiU:WsnOizayT2E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=8mYDkCXqOiU:WsnOizayT2E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=8mYDkCXqOiU:WsnOizayT2E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=8mYDkCXqOiU:WsnOizayT2E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=8mYDkCXqOiU:WsnOizayT2E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=8mYDkCXqOiU:WsnOizayT2E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=8mYDkCXqOiU:WsnOizayT2E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=8mYDkCXqOiU:WsnOizayT2E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=8mYDkCXqOiU:WsnOizayT2E:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 17 Jan 2010 18:20:49 +0000</pubDate>
      <link>http://ricroberts.com/articles/create-your-own-semantic-enabled-blog</link>
      <guid>http://ricroberts.com/articles/create-your-own-semantic-enabled-blog?updated_at=2010-01-17T18:20:49</guid>
    </item>
    <item>
      <title>SemanticJournal blog engine</title>
      <description>&lt;p&gt;Sorry if I&amp;#8217;ve introduced lots of unread articles into your feed reader&amp;#8230; I moved this blog over to a new blog engine yesterday.&lt;/p&gt;
&lt;p&gt;Previously, it was running on &lt;a href="http://wiki.github.com/fdv/typo/"&gt;Typo&lt;/a&gt;, an open source Rails-based blogging app, which has served me well for a few years, but at times I found it a little frustrating and inflexible to work with. It&amp;#8217;s now running on my own blogging platform codenamed &lt;em&gt;&lt;strong&gt;SemanticJournal&lt;/strong&gt;&lt;/em&gt; &amp;#8211; still based on Rails, but using &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt; for storage rather than &lt;a href="http://dev.mysql.com/"&gt;MySql&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SemanticJournal was written partly as an exercise in using CouchDB, and partly to serve as a testing ground and vehicle for some new technology that we&amp;#8217;re working on at &lt;a href="http://www.swirrl.com"&gt;Swirrl&lt;/a&gt;. As the name suggests, SemanticJournal combines some &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;Semantic Web&lt;/a&gt; features with a blogging platform.&lt;/p&gt;
&lt;p&gt;If you view the source for this page (or use an RDFa-inspector like this &lt;a href="http://ubiquity-rdfa.googlecode.com/svn/trunk/install-checker.html"&gt;bookmarklet&lt;/a&gt;), then you&amp;#8217;ll notice that certain elements are marked-up with &lt;a href="http://www.w3.org/TR/xhtml-rdfa-primer/"&gt;RDFa&lt;/a&gt;.&lt;/p&gt;
&lt;script src="http://gist.github.com/266017.js?file=SemanticJournal_RDFa_example.html"&gt;&lt;/script&gt;&lt;p&gt;RDFa is just a way of enhancing web pages with additional metadata by combining html with &lt;a href="http://en.wikipedia.org/wiki/Resource_Description_Framework"&gt;&lt;span class="caps"&gt;RDF&lt;/span&gt;-triples&lt;/a&gt;. (i.e. machine-readable statements about resources consisting of subject, predicate and object).  For example, one such statement embedded in this page describes when the article was published.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&amp;#8217;s the point of adding RDFa to a web page?&lt;/strong&gt; Using RDFa helps other computers understand its content more easily, as it gives the marked-up text a context. Terms mentioned in the page can be made less ambiguous (e.g. If I mention &amp;#8220;Paris Hilton&amp;#8221;, am I talking about the celebrity or the hotel?). By providing some of the content as &lt;span class="caps"&gt;RDF&lt;/span&gt; it becomes more easily accessible by other services on the web, making it more &amp;#8220;mashup-able&amp;#8221; and providing &lt;a href="http://www.webofdatablog.com/articles/2009/12/11/use-rdfa-get-more-traffic"&gt;potential &lt;span class="caps"&gt;SEO&lt;/span&gt; benefits&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At the moment, SemanticJournal only adds RDFa to the basic blog article metadata, such as the title, author and date, but at Swirrl, we&amp;#8217;re working on providing ways to make it easier to publish machine readable content on the Web.&lt;/p&gt;
&lt;p&gt;Once I&amp;#8217;ve had a chance to tidy up the code a bit (and make it a bit more generically useful) I plan on making the code for SemanticJournal openly available.  Watch this space &amp;#8211; I&amp;#8217;ll announce it on this blog when we do.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=QuhwEiD6Eto:mnkzG7DmKG0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=QuhwEiD6Eto:mnkzG7DmKG0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=QuhwEiD6Eto:mnkzG7DmKG0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=QuhwEiD6Eto:mnkzG7DmKG0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=QuhwEiD6Eto:mnkzG7DmKG0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=QuhwEiD6Eto:mnkzG7DmKG0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=QuhwEiD6Eto:mnkzG7DmKG0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=QuhwEiD6Eto:mnkzG7DmKG0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=QuhwEiD6Eto:mnkzG7DmKG0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 30 Dec 2009 17:07:07 +0000</pubDate>
      <link>http://ricroberts.com/articles/semanticjournal-blog-engine</link>
      <guid>http://ricroberts.com/articles/semanticjournal-blog-engine?updated_at=2009-12-30T17:07:07</guid>
    </item>
    <item>
      <title>DailyJS: a new Javascript blog </title>
      <description>&lt;p&gt;&lt;a href="http://alexyoung.org"&gt;Alex Young&lt;/a&gt; and I (with a bit of help from &lt;a href="http://gusg.us/"&gt;Justin (Gus) Knowlden&lt;/a&gt; – of &lt;a href="http://github.com/thumblemonks/riot"&gt;Riot&lt;/a&gt; fame), have started up a new Javascript blog called &lt;a href="http://dailyjs.com"&gt;DailyJS&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Although still chiefly a Ruby developer, I’ve had much more to do with Javascript recently, but I’ve had trouble finding a technically-focused blog (i.e. along the lines of &lt;a href="http://rubyinside.com"&gt;RubyInside&lt;/a&gt;, but for Javascript).  Blogs like Ajaxian are cool, but they’re quite general, and focus on high-level topics.&lt;/p&gt;


	&lt;p&gt;So, DailyJS.com was born.  &lt;a href="http://dailyjs.com"&gt;Check it out&lt;/a&gt; for regular Javascript-related code, tips and news. It might not turn out to actually be updated &lt;strong&gt;daily&lt;/strong&gt;, but we’ll try to keep posts coming fairly frequently …it will certainly be available daily, anyway! :)&lt;/p&gt;


	&lt;p&gt;If you want to get involved with contributing to, or sponsoring, DailyJS please get in touch.&lt;/p&gt;

      &lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=ZM3sChSp5-U:h6SJdAYCJkg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=ZM3sChSp5-U:h6SJdAYCJkg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=ZM3sChSp5-U:h6SJdAYCJkg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=ZM3sChSp5-U:h6SJdAYCJkg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=ZM3sChSp5-U:h6SJdAYCJkg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=ZM3sChSp5-U:h6SJdAYCJkg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=ZM3sChSp5-U:h6SJdAYCJkg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=ZM3sChSp5-U:h6SJdAYCJkg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=ZM3sChSp5-U:h6SJdAYCJkg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 05 Nov 2009 00:00:00 +0000</pubDate>
      <link>http://ricroberts.com/articles/dailyjs-a-new-javascript-blog</link>
      <guid>http://ricroberts.com/articles/dailyjs-a-new-javascript-blog?updated_at=2009-12-28T19:54:06</guid>
    </item>
    <item>
      <title>Using a different Couch DB for each web-request with CouchRest </title>
      <description>&lt;p&gt;If data for each different account in your web application is stored in a separate CouchDB database, you need a way to tell your web app which database to use for that request.&lt;/p&gt;


	&lt;p&gt;Here’s solution using CouchRest and Ruby, based on a  discussion from the &lt;a href="http://groups.google.com/group/couchrest/browse_thread/thread/b8e41ab989294c27"&gt;CouchRest Google Group&lt;/a&gt;.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;RequestSpecificDocument&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;CouchRest&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;ExtendedDocument&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.database&lt;/span&gt;
    &lt;span class="constant"&gt;Thread&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;current&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:request_db&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;All models which need to use the request-specific database should derive from this:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Article&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;RequestSpecificDocument&lt;/span&gt;
  &lt;span class="comment"&gt;# normal stuff for your CouchRest document here.&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;So in your application controller (if you’re using Rails), you might add a &lt;code&gt;before_filter&lt;/code&gt; which does something like this:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;set_database&lt;/span&gt;
  &lt;span class="comment"&gt;# determine the database_name from the host, url or whatever. &lt;/span&gt;
  &lt;span class="ident"&gt;svr&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;CouchRest&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Server&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;("&lt;/span&gt;&lt;span class="string"&gt;http://127.0.0.1:5984&lt;/span&gt;&lt;span class="punct"&gt;")&lt;/span&gt;
  &lt;span class="ident"&gt;couch_db&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;CouchRest&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Database&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;svr&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;database_name&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;        
  &lt;span class="constant"&gt;Thread&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;current&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:request_db&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;couch_db&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

      &lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=XmanmBidBxU:yKrPqYCW9c8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=XmanmBidBxU:yKrPqYCW9c8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=XmanmBidBxU:yKrPqYCW9c8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=XmanmBidBxU:yKrPqYCW9c8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=XmanmBidBxU:yKrPqYCW9c8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=XmanmBidBxU:yKrPqYCW9c8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=XmanmBidBxU:yKrPqYCW9c8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=XmanmBidBxU:yKrPqYCW9c8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=XmanmBidBxU:yKrPqYCW9c8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 01 Nov 2009 00:00:00 +0000</pubDate>
      <link>http://ricroberts.com/articles/using-a-different-couch-db-for-each-web-request-with-couchrest</link>
      <guid>http://ricroberts.com/articles/using-a-different-couch-db-for-each-web-request-with-couchrest?updated_at=2009-12-28T19:54:06</guid>
    </item>
    <item>
      <title>Stardotstar blog article: Relax, Stop worrying about the structure of your data </title>
      <description>&lt;p&gt;I’ve been working as a Ruby developer with Manchester digital agency, &lt;a href="http://www.stardotstar.com"&gt;Stardotstar&lt;/a&gt;, for a few months now.  Last week, I wrote my &lt;a href="http://www.stardotstar.com/stories/1102-relax_stop_worrying_about_the_structure_of_your_data"&gt;first post&lt;/a&gt; on the &lt;a href="http://www.stardotstar.com/stories/1012-well_blog_here"&gt;new Stardotstar blog&lt;/a&gt;:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;When thinking about web application design, it doesn’t take long before the realisation hits you: to achieve any kind of efficiency you need to ignore or abuse key principles of relational database design, employing strategies such as sharding your information across multiple databases, abandoning the use of transactions, and the wholesale denormalisation of data…&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Read the full article: &lt;strong&gt;&lt;a href="http://www.stardotstar.com/stories/1102-relax_stop_worrying_about_the_structure_of_your_data"&gt;Relax: Stop worrying about the structure of your data&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

      &lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rD6n7Q16yAI:vJsqZLK2TDg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rD6n7Q16yAI:vJsqZLK2TDg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=rD6n7Q16yAI:vJsqZLK2TDg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rD6n7Q16yAI:vJsqZLK2TDg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=rD6n7Q16yAI:vJsqZLK2TDg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rD6n7Q16yAI:vJsqZLK2TDg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rD6n7Q16yAI:vJsqZLK2TDg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=rD6n7Q16yAI:vJsqZLK2TDg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rD6n7Q16yAI:vJsqZLK2TDg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 25 Oct 2009 00:00:00 +0100</pubDate>
      <link>http://ricroberts.com/articles/stardotstar-blog-article-relax-stop-worrying-about-the-structure-of-your-data</link>
      <guid>http://ricroberts.com/articles/stardotstar-blog-article-relax-stop-worrying-about-the-structure-of-your-data?updated_at=2009-12-28T19:54:06</guid>
    </item>
    <item>
      <title>Blink #3 - 24th October 2009 </title>
      <description>&lt;p&gt;It’s been a while since my &lt;a href="http://www.ricroberts.com/articles/2009/09/21/blink-2-21st-september-2009"&gt;last link-blog entry&lt;/a&gt;, so this will be quite a big list!&lt;/p&gt;


	&lt;h4&gt;Ruby&lt;/h4&gt;


	&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.rubyinside.com/mustache-for-logicfree-views-in-your-ruby-web-apps-2599.html"&gt;Mustache&lt;/a&gt; – for logic-free views in your Ruby web apps&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.rubyinside.com/watchr-generic-autotest-alternativ-2511.html"&gt;Watchr&lt;/a&gt; – a replacement for autotest&lt;/li&gt;
		&lt;li&gt;New Thoughtbot-designed &lt;a href="http://gemcutter.org"&gt;Gemcutter&lt;/a&gt; site launched&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://groups.google.com/group/phusion-passenger/browse_thread/thread/7aa67c253cd90089"&gt;Getting ImageMagick and Passenger to play nicely together on &lt;span class="caps"&gt;OS X&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://merbist.com/2009/10/05/macruby-soon-to-reach-a-new-milestone"&gt;MacRuby approaching a Milestone&lt;/a&gt; – Blog post by Matt Aimonetti.&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://github.com/flavorjones/loofah"&gt;Loofah&lt;/a&gt; – &lt;span class="caps"&gt;HTML&lt;/span&gt; sanitizer based on Nokogiri.&lt;/li&gt;
		&lt;li&gt;Old, but still neat and useful: &lt;a href="http://gist.github.com/45076"&gt;Subdomain routing in rails&lt;/a&gt;
&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://github.com/rtomayko/tilt"&gt;Tilt&lt;/a&gt; – a generic interface to various Ruby templating engines.&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://github.com/thumblemonks/riot/"&gt;Riot&lt;/a&gt; – A fast unit test framework for Ruby&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://github.com/mocoso/code-beautifier.tmbundle"&gt;Ruby code-beautifier TextMate Bundle&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;h4&gt;General Web/Software&lt;/h4&gt;


	&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://code.google.com/chrome/chromeframe/"&gt;Google ChromeFrame&lt;/a&gt; for sabotaging IE (this feels like old news now!)&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://wearecolorblind.com/"&gt;We are colorblind&lt;/a&gt;. About 8% of the male population has some sort of color blindness (like me). The patterns and examples on this site help you create websites that we color blind can use without problems&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.slideshare.net/amyhoy/pimpin-software-projects-aint-easy"&gt;Pimpin’ (Software Projects) Ain’t Easy&lt;/a&gt; – Great marketing-software-for-non-marketers presentation by Amy Hoy&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://derivadow.com/2009/10/11/theres-only-metadata-and-uris/"&gt;There’s only Metadata and &lt;span class="caps"&gt;URLS&lt;/span&gt;&lt;/a&gt; – Interesting blog post by Tom Scott.&lt;/li&gt;
	&lt;/ul&gt;
&lt;h4&gt;Git&lt;/h4&gt;


	&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://github.com/blog/500-state-of-the-hub-rackspace-day-0"&gt;Github moves to rackspace&lt;/a&gt; and &lt;a href="http://github.com/blog/515-gem-building-is-defunct"&gt;ditches gem building&lt;/a&gt;
&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://caiustheory.com/ignore-gitignore-in-git"&gt;Tips&lt;/a&gt; from &lt;a href="http://twitter.com/caius"&gt;@Cauis&lt;/a&gt; on .gitignore&lt;/li&gt;
	&lt;/ul&gt;
&lt;h4&gt;CouchDB&lt;/h4&gt;


	&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jchrisa.net/drl/_design/sofa/_show/post/Why-CouchDB-is-the-File-System-for-the-Open-Web"&gt;Why CouchDB is the filesystem for the Web&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://damienkatz.net/2009/10/apache_couchdb_0100_escapes.html"&gt;CouchDB goes beta!&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://labs.mozilla.com/raindrop/2009/10/22/introducing-raindrop/"&gt;Mozilla Raindrop&lt;/a&gt; – a messaging system built on CouchDB&lt;/li&gt;
		&lt;li&gt;Some &lt;a href="http://till.klampaeckel.de/blog/archives/61-Small-notes-on-CouchDBs-views.html"&gt;CouchDB performance tips&lt;/a&gt; from Till Klampaeckel&lt;/li&gt;
	&lt;/ul&gt;&lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=425gq3ojDys:O8imYJJi_AA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=425gq3ojDys:O8imYJJi_AA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=425gq3ojDys:O8imYJJi_AA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=425gq3ojDys:O8imYJJi_AA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=425gq3ojDys:O8imYJJi_AA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=425gq3ojDys:O8imYJJi_AA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=425gq3ojDys:O8imYJJi_AA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=425gq3ojDys:O8imYJJi_AA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=425gq3ojDys:O8imYJJi_AA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sat, 24 Oct 2009 00:00:00 +0100</pubDate>
      <link>http://ricroberts.com/articles/blink-3-24th-october-2009</link>
      <guid>http://ricroberts.com/articles/blink-3-24th-october-2009?updated_at=2009-12-28T19:54:06</guid>
    </item>
    <item>
      <title>Swirrl linked data consultancy </title>
      <description>&lt;p&gt;From the &lt;a href="http://blog.swirrl.com"&gt;Swirrl Blog&lt;/a&gt; ...&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Alongside developing our &lt;a href="http://www.swirrl.com"&gt;online database application&lt;/a&gt;, we spend time talking to our users and potential users about how they can manage their data. As well as being useful to them (we hope!) this helps us understand the range of problems people are facing and gets us thinking about the kinds of solution that are needed, helping us set the future direction of our software tools.  Because this seems to be a useful activity all round, we’re now putting a bit more emphasis on it and making it more widely known that this is a service we offer. So we’ve put up a new &lt;a href="http://www.swirrl.com/services"&gt;services&lt;/a&gt; page on our website to give some more details.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Read the full article &lt;a href="http://blog.swirrl.com/articles/2009/09/22/swirrl-linked-data-consultancy"&gt;here&lt;/a&gt;.&lt;/p&gt;

      &lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rskGtGzZtm8:ZiPJnqqMS0M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rskGtGzZtm8:ZiPJnqqMS0M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=rskGtGzZtm8:ZiPJnqqMS0M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rskGtGzZtm8:ZiPJnqqMS0M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=rskGtGzZtm8:ZiPJnqqMS0M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rskGtGzZtm8:ZiPJnqqMS0M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rskGtGzZtm8:ZiPJnqqMS0M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=rskGtGzZtm8:ZiPJnqqMS0M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=rskGtGzZtm8:ZiPJnqqMS0M:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 22 Sep 2009 00:00:00 +0100</pubDate>
      <link>http://ricroberts.com/articles/swirrl-linked-data-consultancy</link>
      <guid>http://ricroberts.com/articles/swirrl-linked-data-consultancy?updated_at=2009-12-28T19:54:06</guid>
    </item>
    <item>
      <title>Blink #2 - 21st September 2009 </title>
      <description>&lt;p&gt;My second installment of “interesting” links.&lt;/p&gt;


	&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.zeldman.com/2009/09/04/html5-redefines-footer/"&gt;&lt;span class="caps"&gt;HTML 5&lt;/span&gt; redefines ‘footer’ element&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://janl.github.com/couchdbx/"&gt;Couch &lt;span class="caps"&gt;DBX&lt;/span&gt;&lt;/a&gt; – A quick way to get CouchDB running on your Mac.&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://islayer.com/apps/istatmenus/"&gt;iStat Menus 2.0&lt;/a&gt; – A Snow Leopard compatible verison of iStat Menus&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.akitaonrails.com/2009/09/08/user-editable-liquid-templates-in-the-database"&gt;User-editable Liquid templates in the database&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://alexyoung.org/2009/07/09/new-blog/"&gt;Hosting a blog on Jekyll and Github&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://shapeshed.com/journal/testing_with_ie6_ie7_and_ie8_on_virtualbox/"&gt;VirtualBox on a Mac for IE testing&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://rvm.beginrescueend.com/"&gt;Ruby Version Manager&lt;/a&gt; Easy installation and switching between available Ruby versions, without messing up your current Ruby install &lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.rubyinside.com/coulda-a-cucumber-like-dsl-for-bdd-2461.html"&gt;Coulda&lt;/a&gt; – shoulda and cucumber’s love child&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.virtuosimedia.com/tutorials/ultimate-ie6-cheatsheet-how-to-fix-25-internet-explorer-6-bugs"&gt;The Ultimate &lt;span class="caps"&gt;IE6&lt;/span&gt; Cheatsheet&lt;/a&gt; – How To Fix 25+ Internet Explorer 6 Bugs&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://github.com/norman/friendly_id"&gt;FriendlyId&lt;/a&gt; is the “Swiss Army bulldozer” of slugging and permalink plugins for Ruby on Rails.&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/"&gt;Cutting out the middle-man with Sammy.js&lt;/a&gt; – Javascript &lt;span class="caps"&gt;MVC&lt;/span&gt; with CouchDB&lt;/li&gt;
	&lt;/ul&gt;&lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=RVvs_v6Ev3U:aMVFnCvsny8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=RVvs_v6Ev3U:aMVFnCvsny8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=RVvs_v6Ev3U:aMVFnCvsny8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=RVvs_v6Ev3U:aMVFnCvsny8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=RVvs_v6Ev3U:aMVFnCvsny8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=RVvs_v6Ev3U:aMVFnCvsny8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=RVvs_v6Ev3U:aMVFnCvsny8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=RVvs_v6Ev3U:aMVFnCvsny8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=RVvs_v6Ev3U:aMVFnCvsny8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 21 Sep 2009 00:00:00 +0100</pubDate>
      <link>http://ricroberts.com/articles/blink-2-21st-september-2009</link>
      <guid>http://ricroberts.com/articles/blink-2-21st-september-2009?updated_at=2009-12-28T19:54:07</guid>
    </item>
    <item>
      <title>5 Ruby-related Blogs for September </title>
      <description>&lt;p&gt;Another set of Ruby blogs…&lt;/p&gt;


	&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://caiustheory.com"&gt;Caius Theory&lt;/a&gt; – Blog from Caius Durling, Ruby developer and &lt;a href="http://www.brightbox.co.uk"&gt;Brightbox&lt;/a&gt; employee (who I met at last month’s &lt;a href="http://nwrug.org/"&gt;&lt;span class="caps"&gt;NWRUG&lt;/span&gt;&lt;/a&gt;).&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.hivelogic.com"&gt;HiveLogic&lt;/a&gt; – Dan Benjamin’s blog. Not 100% Ruby, but some really great stuff crops up now and then (notably his instructions for &lt;a href="http://hivelogic.com/articles/compiling-ruby-rubygems-and-rails-on-snow-leopard/"&gt;compiling Ruby&lt;/a&gt; on Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;, etc.).&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://www.mendable.com/"&gt;Mendable&lt;/a&gt; – Some interesting posts from a seemingly anonymous UK-based Rails developer! Who are you!?&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://jasonseifer.com/"&gt;Jason Seifer&lt;/a&gt; – Personal blog of the &lt;a href="http://railsenvy.com/"&gt;RailsEnvy&lt;/a&gt; podcaster.&lt;/li&gt;
		&lt;li&gt;
&lt;a href="http://rubylearning.com/"&gt;Ruby Learning&lt;/a&gt; – A blog focused on learning about Ruby, by Satish Talim.&lt;/li&gt;
	&lt;/ul&gt;
&lt;p&gt;Please also check out &lt;a href="http://www.ricroberts.com/articles/2009/06/06/5-ruby-related-blogs-for-june"&gt;June’s&lt;/a&gt;, &lt;a href="http://www.ricroberts.com/articles/2009/07/01/5-ruby-related-blogs-for-july"&gt;July’s&lt;/a&gt; and &lt;a href="http://www.ricroberts.com/articles/2009/08/11/5-ruby-related-blogs-for-august"&gt;August’s&lt;/a&gt; previous installments.&lt;/p&gt;

      &lt;style type="text/css"&gt;
	  
		#content code { 
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
		}

		#content pre {
			color: #63FF00;
			background: #000;
			overflow: auto;
			font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
			margin: 0.9em 0; padding: 2em;
		}
	
	  .typocode_ruby .normal {
		}
		.typocode_ruby .comment {
		color:#7BEA36;
		font-style:italic;
		}
		.typocode_ruby .keyword {
		color:#AA0000;
		font-weight:bold;
		}
		.typocode_ruby .method {
		color:#007777;
		}
		.typocode_ruby .class {
		color:#007744;
		}
		.typocode_ruby .module {
		color:#005500;
		}
		.typocode_ruby .punct {
		color:#FFFFFF;
		font-weight:bold;
		}
		.typocode_ruby .symbol {
		color:#FBDC22;
		}
		.typocode_ruby .string {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#333333 none repeat scroll 0 0;
		color:#FFFFEE;
		}
		.typocode_ruby .char {
		color:#FF0077;
		}
		.typocode_ruby .ident {
		color:#FFFFFF;
		}
		.typocode_ruby .constant {
		color:#0077FF;
		}
		.typocode_ruby .regex {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:#663333 none repeat scroll 0 0;
		color:#FFFFAA;
		}
		.typocode_ruby .number {
		color:#FF9999;
		}
		.typocode_ruby .attribute {
		color:#77BBBB;
		}
		.typocode_ruby .global {
		color:#77FFBB;
		}
		.typocode_ruby .expr {
		color:#222277;
		}
		.typocode_ruby .escape {
		color:#227777;
		}
		.typocode_xml .normal {
		}
		.typocode_xml .namespace {
		color:#BB6666;
		font-weight:bold;
		}
		.typocode_xml .tag {
		color:#FF8888;
		}
		.typocode_xml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_xml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_xml .string {
		color:#994444;
		}
		.typocode_xml .number {
		color:#FF9999;
		}
		.typocode_xml .attribute {
		color:#BBBB77;
		}
		.typocode_yaml .normal {
		}
		.typocode_yaml .document {
		color:#0077FF;
		font-weight:bold;
		}
		.typocode_yaml .type {
		color:#0055CC;
		font-weight:bold;
		}
		.typocode_yaml .key {
		color:#FF8888;
		}
		.typocode_yaml .comment {
		color:#000055;
		font-style:italic;
		}
		.typocode_yaml .punct {
		color:#444477;
		font-weight:bold;
		}
		.typocode_yaml .string {
		color:#994444;
		}
		.typocode_yaml .number {
		color:#FF9999;
		}
		.typocode_yaml .time {
		color:#FF9999;
		}
		.typocode_yaml .date {
		color:#FF9999;
		}
		.typocode_yaml .ref {
		color:#994444;
		}
		.typocode_yaml .anchor {
		color:#994444;
		}
		.typocode {
		background-color:#000000;
		color:#FFFFFF;
		font-size:10px;
		margin:5px 5px 1em 0;
		padding:0;
		}
		.typocode pre, pre {
		-moz-background-clip:border;
		-moz-background-inline-policy:continuous;
		-moz-background-origin:padding;
		background:transparent none repeat scroll 0 0;
		font-family:monospace;
		margin:0;
		overflow:auto;
		padding:2em;
		}
		.typocode .lineno {
		font-family:monospace;
		padding-right:1em;
		text-align:right;
		}
		code {
		font-size:120%;
		}
		e {
		font-size:120%;
		}

	&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=NdnpG8yf0Dw:aXt3cMX_4ys:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=NdnpG8yf0Dw:aXt3cMX_4ys:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=NdnpG8yf0Dw:aXt3cMX_4ys:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=NdnpG8yf0Dw:aXt3cMX_4ys:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=NdnpG8yf0Dw:aXt3cMX_4ys:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=NdnpG8yf0Dw:aXt3cMX_4ys:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=NdnpG8yf0Dw:aXt3cMX_4ys:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=NdnpG8yf0Dw:aXt3cMX_4ys:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=NdnpG8yf0Dw:aXt3cMX_4ys:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 13 Sep 2009 00:00:00 +0100</pubDate>
      <link>http://ricroberts.com/articles/5-ruby-related-blogs-for-september</link>
      <guid>http://ricroberts.com/articles/5-ruby-related-blogs-for-september?updated_at=2009-12-28T19:54:06</guid>
    </item>
  </channel>
</rss>
