<?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>Deploying a sub-folder of a git repository with Capistrano</title>
      <description>&lt;p&gt;Sometimes it makes sense to have several Rails applications (or other ruby projects) in a single git repository.  For example you might want to fork, tag or track changes on all the projects together (or you might just be too stingy to pay for a bigger Github plan).&lt;/p&gt;
&lt;p&gt;The problem is that if you want to deploy just one of the applications to your server, unfortunately Capistrano doesn&amp;#8217;t support deploying just sub-folders of git repositories.  You can get round this by adapting the &lt;code&gt;deploy_via :remote_cache&lt;/code&gt; option.&lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;vendor/plugins&lt;/code&gt; folder of your project create the following folder structure:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/vendor
|- /plugins
   |- /remote_cache_with_project_root
      |- /recipes
      |- /lib
      |  |- /capistrano
      |     |- /recipes
      |        |- /deploy
      |           |- /strategy
      |              |- remote_cache_with_project_root.rb
      |- recipe.rb
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Here are the contents of the files:&lt;/p&gt;
&lt;p&gt;recipe.rb:&lt;br /&gt;
&lt;script src="http://gist.github.com/426564.js?file=recipe.rb"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;remote_cache_with_project_root.rb:&lt;br /&gt;
&lt;script src="http://gist.github.com/426566.js?file=remote_cache_with_project_root.rb"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;In your project&amp;#8217;s deploy.rb file, set &lt;code&gt;remote_cache_with_project_root&lt;/code&gt; as the deployment method, and set the name of the subfolder as the &lt;code&gt;project_root&lt;/code&gt; option.&lt;/p&gt;
&lt;script src="http://gist.github.com/426568.js?file=deploy.rb"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=WJs0odEmen8:hESL2P22mGk: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=WJs0odEmen8:hESL2P22mGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=WJs0odEmen8:hESL2P22mGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=WJs0odEmen8:hESL2P22mGk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=WJs0odEmen8:hESL2P22mGk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=WJs0odEmen8:hESL2P22mGk: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=WJs0odEmen8:hESL2P22mGk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=WJs0odEmen8:hESL2P22mGk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=WJs0odEmen8:hESL2P22mGk: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, 05 Jun 2010 12:53:07 +0100</pubDate>
      <link>http://ricroberts.com/articles/deploying-a-sub-folder-with-capistrano</link>
      <guid>http://ricroberts.com/articles/deploying-a-sub-folder-with-capistrano?updated_at=2010-06-05T12:53:07</guid>
    </item>
    <item>
      <title>Video: TechCrunch/Techfluff.tv interview at EIE10</title>
      <description>&lt;p&gt;At the &lt;a href="http://eie10.com"&gt;Engage Invest Exploit 2010&lt;/a&gt; event in Edinburgh a couple of weeks ago, I was interviewed by &lt;a href="http://techfluff.tv/"&gt;Hermione Way&lt;/a&gt; about &lt;a href="http://www.swirrl.com"&gt;Swirrl&amp;#8217;s&lt;/a&gt; new service, &lt;a href="http://publishmydata.com"&gt;Publish My Data&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My interview is at around 4h 06m into the video. (Note: Safari seems to have to buffer the whole video before letting you skip, but Firefox lets you jump straight to any location.)  I was completely unprepared, so please forgive my waffling!&lt;/p&gt;
&lt;p&gt;&lt;object id="bplayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="460" height="360"&gt;&lt;embed name="bplayer" src="http://bambuser.com/r/player.swf" type="application/x-shockwave-flash" flashvars="vid=746987&amp;context=external" width="460" height="360" allowfullscreen="true" allowscriptaccess="always"&gt;&lt;/embed&gt;&lt;param name="movie" value="http://bambuser.com/r/player.swf"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vid=746987&amp;context=external"&gt;&lt;/param&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=EFTpLj-HrKo:2Ax1Bjlc588: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=EFTpLj-HrKo:2Ax1Bjlc588:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=EFTpLj-HrKo:2Ax1Bjlc588:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=EFTpLj-HrKo:2Ax1Bjlc588:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=EFTpLj-HrKo:2Ax1Bjlc588:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=EFTpLj-HrKo:2Ax1Bjlc588: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=EFTpLj-HrKo:2Ax1Bjlc588:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=EFTpLj-HrKo:2Ax1Bjlc588:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=EFTpLj-HrKo:2Ax1Bjlc588: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, 23 May 2010 14:03:36 +0100</pubDate>
      <link>http://ricroberts.com/articles/techcrunch-techfluff-tv-interview</link>
      <guid>http://ricroberts.com/articles/techcrunch-techfluff-tv-interview?updated_at=2010-05-23T14:03:36</guid>
    </item>
    <item>
      <title>PublishMyData: A New Platform for Publishing Linked Data</title>
      <description>&lt;p&gt;As Bill &lt;a href="http://www.webofdatablog.com/articles/got-data-want-linked-data"&gt;mentioned on his blog today&lt;/a&gt;, at Swirrl we&amp;#8217;re working on a new platform for publishing Linked Data, called PublishMyData.&lt;/p&gt;
&lt;p&gt;Please check out Bill&amp;#8217;s post and let us know your thoughts on our initial ideas.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=4b7gItoiQjk:EE96dlsVPr8: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=4b7gItoiQjk:EE96dlsVPr8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=4b7gItoiQjk:EE96dlsVPr8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=4b7gItoiQjk:EE96dlsVPr8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=4b7gItoiQjk:EE96dlsVPr8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=4b7gItoiQjk:EE96dlsVPr8: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=4b7gItoiQjk:EE96dlsVPr8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=4b7gItoiQjk:EE96dlsVPr8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=4b7gItoiQjk:EE96dlsVPr8: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, 31 Mar 2010 23:10:58 +0100</pubDate>
      <link>http://ricroberts.com/articles/publishmydata-a-new-platform-for-publishing-linked-data</link>
      <guid>http://ricroberts.com/articles/publishmydata-a-new-platform-for-publishing-linked-data?updated_at=2010-03-31T23:11:05</guid>
    </item>
    <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>
  </channel>
</rss>
