<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>RicRoberts : </title>
    <link>http://www.ricroberts.com/articles.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Ruby on Rails developer and founder of &lt;a href="http://www.swirrl.com"&gt;swirrl.com&lt;/a&gt;</description>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/RichText" type="application/rss+xml" /><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><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Ruby on Rails Linked Data content negotiation skeleton code</title>
      <description>&lt;p&gt;&lt;a href="http://www.webofdatablog.com/"&gt;Bill&lt;/a&gt; wrote on his blog a few days ago about an example Rails app that he created to demonstrate the basics of how we do Linked Data content negotation at &lt;a href="http://www.swirrl.com"&gt;Swirrl&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;As he mentions &lt;a href="http://www.webofdatablog.com/articles/2009/07/10/tools-for-linked-data-content-negotiation"&gt;in the article&lt;/a&gt;, Bill put this together partly in response to a &lt;a href="http://lists.w3.org/Archives/Public/public-lod/2009Jun/0341.html"&gt;discussion on the &lt;span class="caps"&gt;LOD&lt;/span&gt; mailing list&lt;/a&gt; about ways of implementing the content negotiation process without reliance on Apache.&lt;/p&gt;


	&lt;p&gt;Take a look at the &lt;span class="caps"&gt;README&lt;/span&gt; in the &lt;a href="http://github.com/Swirrl/contentnegotiation/tree/master"&gt;Github Repository&lt;/a&gt; for more details.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=5sL6dvPTqq4:P-MgQQwn7nM: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=5sL6dvPTqq4:P-MgQQwn7nM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=5sL6dvPTqq4:P-MgQQwn7nM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=5sL6dvPTqq4:P-MgQQwn7nM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=5sL6dvPTqq4:P-MgQQwn7nM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=5sL6dvPTqq4:P-MgQQwn7nM: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=5sL6dvPTqq4:P-MgQQwn7nM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=5sL6dvPTqq4:P-MgQQwn7nM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=5sL6dvPTqq4:P-MgQQwn7nM: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, 15 Jul 2009 18:10:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:80e1b262-5316-4ab9-aa13-0e0ee89ff508</guid>
      <comments>http://www.ricroberts.com/articles/2009/07/15/ruby-on-rails-linked-data-content-negotiation-skeleton-code#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=ruby-on-rails-linked-data-content-negotiation-skeleton-code&amp;day=15&amp;month=07&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/07/15/ruby-on-rails-linked-data-content-negotiation-skeleton-code</link>
    </item>
    <item>
      <title>RubyInside roundup</title>
      <description>&lt;p&gt;I&amp;#8217;ve recently started blogging regularly over at &lt;a href="http://www.rubyinside.com"&gt;RubyInside.com&lt;/a&gt; (the Ruby news, links, code and tips blog), which explains why I&amp;#8217;ve been a little bit quiet of late.  To try to fill the silence, I thought I&amp;#8217;d post a list of links to my recent posts:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.rubyinside.com/hirb-an-easy-to-use-view-framework-for-irb-1853.html"&gt;Hirb: an Easy-to-use View Framework for irb&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.rubyinside.com/getting-started-mongodb-ruby-1875.html"&gt;Getting started with MongoDB and Ruby&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.rubyinside.com/web-spidering-with-anemone-1927.html"&gt;Easy Web Spidering in Ruby with Anemone&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.rubyinside.com/robustthread-for-safer-ruby-daemons-1948.html"&gt;Build Safer Ruby Daemons with RobustThread&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.rubyinside.com/parkaby-faster-html-generation-with-ruby-1965.html"&gt;Parkaby: Faster &lt;span class="caps"&gt;HTML&lt;/span&gt; Generation with Ruby&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Now that I&amp;#8217;ve got used to the style and content required for RubyInside, I&amp;#8217;ll try to step-up activity on this blog again.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=2hrqq2fq-G0:1h5fYRr9rRQ: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=2hrqq2fq-G0:1h5fYRr9rRQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=2hrqq2fq-G0:1h5fYRr9rRQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=2hrqq2fq-G0:1h5fYRr9rRQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=2hrqq2fq-G0:1h5fYRr9rRQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=2hrqq2fq-G0:1h5fYRr9rRQ: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=2hrqq2fq-G0:1h5fYRr9rRQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=2hrqq2fq-G0:1h5fYRr9rRQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=2hrqq2fq-G0:1h5fYRr9rRQ: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, 13 Jul 2009 12:50:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:3245aa66-526b-4a6c-b9ca-97b4d82bceeb</guid>
      <comments>http://www.ricroberts.com/articles/2009/07/13/rubyinside-roundup#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=rubyinside-roundup&amp;day=13&amp;month=07&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/07/13/rubyinside-roundup</link>
    </item>
    <item>
      <title>5 Ruby-related blogs for July</title>
      <description>&lt;p&gt;&lt;a href="http://www.ricroberts.com/articles/2009/06/06/5-ruby-related-blogs-for-june"&gt;Last month&lt;/a&gt;, I posted my first set of five ruby-related blogs for your delectation.  Here&amp;#8217;s five more for your &lt;span class="caps"&gt;RSS&lt;/span&gt; reader:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://rubyinside.com/" target="_blank"&gt;Ruby Inside&lt;/a&gt;: A Ruby news, links, code and tips blog, to which I&amp;#8217;ve recently started contributing.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robbyonrails.com/" target="_blank"&gt;Robby On Rails&lt;/a&gt;: A blog by Robby Russell from Planet Argon. Full of useful rails tidbits.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://afreshcup.com/" target="_blank"&gt;A Fresh Cup&lt;/a&gt;: Mike Gunderloy&amp;#8217;s mostly link-based blog focusing on Ruby On Rails.  I always find something interesting here.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://alexyoung.org/" target="_blank"&gt;Alex Young&lt;/a&gt;: Blog from a London-based web developer, who runs &lt;a href="http://helicoid.net" target="_blank"&gt;Helicoid&lt;/a&gt; and &lt;a href="http://quiteuseful.co.uk" target="_blank"&gt;QuiteUseful&lt;/a&gt;.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.igvita.com/" target="_blank"&gt;Igvita&lt;/a&gt;: Ilya Grigorik&amp;#8217;s blog, often featuring Ruby-related articles.&lt;/li&gt;
	&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=3h9Jo_QYCp0:MctwNI7GYp8: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=3h9Jo_QYCp0:MctwNI7GYp8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=3h9Jo_QYCp0:MctwNI7GYp8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=3h9Jo_QYCp0:MctwNI7GYp8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=3h9Jo_QYCp0:MctwNI7GYp8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=3h9Jo_QYCp0:MctwNI7GYp8: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=3h9Jo_QYCp0:MctwNI7GYp8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=3h9Jo_QYCp0:MctwNI7GYp8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=3h9Jo_QYCp0:MctwNI7GYp8: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, 01 Jul 2009 11:59:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:003a067d-31b5-4d54-b061-826f498e9a51</guid>
      <comments>http://www.ricroberts.com/articles/2009/07/01/5-ruby-related-blogs-for-july#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=5-ruby-related-blogs-for-july&amp;day=01&amp;month=07&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/07/01/5-ruby-related-blogs-for-july</link>
    </item>
    <item>
      <title>Getting to grips with git - Part 3: rebasing</title>
      <description>&lt;p&gt;This is the third post in my &lt;em&gt;Getting to grips with git series&lt;/em&gt;. In previous articles, I&amp;#8217;ve covered &lt;a href="http://www.ricroberts.com/articles/2009/06/01/getting-to-grips-with-git"&gt;the basics&lt;/a&gt; and &lt;a href="http://www.ricroberts.com/articles/2009/06/13/getting-to-grips-with-git-part-2-branches-and-tags"&gt;merging, branching &amp;#38; tags&lt;/a&gt;.  This time, I&amp;#8217;m going to introduce the concept of rebasing.  I think it justifies its own article as it&amp;#8217;s a potentially confusing subject.&lt;/p&gt;


	&lt;h2&gt;Rebasing&lt;/h2&gt;


	&lt;p&gt;Rebasing is similar to merging in that it allows you to apply changes from one branch to another.   Rebasing lets you replay/rewrite the history in your current branch against a particular point on another branch, so you can choose where in the history your changes appear.&lt;/p&gt;


	&lt;p&gt;For example, if say you branched from master to work on a new feature.  When you branched, the state of the master branch was A, and after you&amp;#8217;ve added some code, the state of your new feature&amp;#8217;s branch is AB (i.e. A plus some new stuff B).&lt;/p&gt;


&lt;pre&gt;
---A        master
   \
    ----AB  new feature branch
&lt;/pre&gt;

	&lt;p&gt;After working on your new feature for a bit, the state of the master branch might have moved on (maybe some bug fixes have been applied).&lt;/p&gt;


&lt;pre&gt;
---A---------A'  master
   \
    ----AB       new feature branch
&lt;/pre&gt;

	&lt;p&gt;Now, to get those fixes into your new feature&amp;#8217;s branch, you can &lt;em&gt;rebase&lt;/em&gt;.  From the new feature branch, run:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt; git rebase master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This will bring the fixes into your new feature&amp;#8217;s branch, as if you branched after the fixes were applied to master.&lt;/p&gt;


&lt;pre&gt;
---A---------A'        master
             \
              ----A'B  new feature branch
&lt;/pre&gt;

	&lt;p&gt;A quick look at the history will confirm this.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt; git log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Finally, to get your new feature into master, you can just do a merge as described in my previous blog post (from master):&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git merge &amp;lt;new_feature_branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;The steps I&amp;#8217;ve just described form a common workflow. i.e.&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Create a new branch B from an existing branch A&lt;/li&gt;
		&lt;li&gt;Make changes on new branch B&lt;/li&gt;
		&lt;li&gt;Rebase updates from branch A into branch B&lt;/li&gt;
		&lt;li&gt;Merge changes from branch B into branch A&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;Useful references on rebasing&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html" target="_blank"&gt;git rebase man page&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://gitguru.com/2009/02/03/rebase-v-merge-in-git/" target="_blank"&gt;Gitguru: rebase vs merge&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://jbowes.wordpress.com/2007/01/26/git-rebase-keeping-your-branches-current/" target="_blank"&gt;James Bowes: Keeping your branches current&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Next time…&lt;/h2&gt;


	&lt;p&gt;I still have a couple more posts planned, to cover a few more commands, git tools and forking.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=vP6tuXvd67A:ikW3bIyrKbY: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=vP6tuXvd67A:ikW3bIyrKbY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=vP6tuXvd67A:ikW3bIyrKbY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=vP6tuXvd67A:ikW3bIyrKbY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=vP6tuXvd67A:ikW3bIyrKbY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=vP6tuXvd67A:ikW3bIyrKbY: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=vP6tuXvd67A:ikW3bIyrKbY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=vP6tuXvd67A:ikW3bIyrKbY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=vP6tuXvd67A:ikW3bIyrKbY: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, 22 Jun 2009 12:02:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:e9a33fb8-e0af-4305-b26e-cd87e455717a</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/22/getting-to-grips-with-git-part-3-rebasing#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=getting-to-grips-with-git-part-3-rebasing&amp;day=22&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/22/getting-to-grips-with-git-part-3-rebasing</link>
    </item>
    <item>
      <title>Rails Underground Conference</title>
      <description>&lt;p&gt;&lt;a href="http://www.rails-underground.com" title="I'm attending Rails Underground!"&gt;&lt;img src="http://www.rails-underground.com/images/attendee_badge.png" alt="I'm attending Rails Underground!" style="float:left;margin-right:20px;"/&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;At the end of last week, I booked my tickets for the &lt;a href="http://www.rails-underground.com/" target="_blank"&gt;Rails Underground&lt;/a&gt; conference in London which takes place towards the end of next month.&lt;/p&gt;


	&lt;p&gt;The &lt;a href="http://www.rails-underground.com/09-conference-speakers.html" target="_blank"&gt;speaker line up&lt;/a&gt; is really impressive, and features (to name but a few) &lt;a href="http://obiefernandez.com/"&gt;Obie Fernandez&lt;/a&gt;, &lt;a href="http://www.loudthinking.com" target="_blank"&gt;&lt;span class="caps"&gt;DHH&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.robbyonrails.com"&gt;Robby Russell&lt;/a&gt;, &lt;a href="http://onestepback.org/" target="_blank"&gt;Jim Weirich&lt;/a&gt;, and &lt;a href="http://drnicwilliams.com/" target="_blank"&gt;Dr Nic&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;It will also be a good chance to catch up with some London Rubyists who I haven&amp;#8217;t seen for a while.&lt;/p&gt;


	&lt;p&gt;Drop me an email or leave a comment if you&amp;#8217;re attending too and want to meet up.  See you there!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=fsdAbGTt9Ec:bVp3lZeGHVc: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=fsdAbGTt9Ec:bVp3lZeGHVc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=fsdAbGTt9Ec:bVp3lZeGHVc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=fsdAbGTt9Ec:bVp3lZeGHVc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=fsdAbGTt9Ec:bVp3lZeGHVc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=fsdAbGTt9Ec:bVp3lZeGHVc: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=fsdAbGTt9Ec:bVp3lZeGHVc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=fsdAbGTt9Ec:bVp3lZeGHVc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=fsdAbGTt9Ec:bVp3lZeGHVc: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, 22 Jun 2009 10:18:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:1d15c5c8-09b2-40eb-bfa7-1d66d2f4a912</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/22/rails-underground-conference#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=rails-underground-conference&amp;day=22&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/22/rails-underground-conference</link>
    </item>
    <item>
      <title>New blog on the web of data</title>
      <description>&lt;p&gt;At &lt;a href="http://www.swirrl.com" target="_blank"&gt;Swirrl&lt;/a&gt;, we’ve long been convinced of the benefits of the semantic web and linked data – and indeed those technologies underly the design of our application.&lt;/p&gt;


	&lt;p&gt;My co-founder, Bill, has just started a new blog where he’ll be exploring these topics in more depth: &lt;a href="http://www.webofdatablog.com" target="_blank"&gt;www.webofdatablog.com&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=OoFGHQtUPEg:eEUijH3mWYw: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=OoFGHQtUPEg:eEUijH3mWYw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=OoFGHQtUPEg:eEUijH3mWYw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=OoFGHQtUPEg:eEUijH3mWYw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=OoFGHQtUPEg:eEUijH3mWYw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=OoFGHQtUPEg:eEUijH3mWYw: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=OoFGHQtUPEg:eEUijH3mWYw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=OoFGHQtUPEg:eEUijH3mWYw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=OoFGHQtUPEg:eEUijH3mWYw: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>Fri, 19 Jun 2009 11:16:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:b023a152-5606-44dc-a0f9-482cb5cbf913</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/19/new-blog-on-the-web-of-data#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=new-blog-on-the-web-of-data&amp;day=19&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/19/new-blog-on-the-web-of-data</link>
    </item>
    <item>
      <title>Getting to grips with git - Part 2: Branches and Tags</title>
      <description>&lt;p&gt;This is the second post in my &lt;em&gt;Getting to grips with git&lt;/em&gt; series. &lt;a href="http://www.ricroberts.com/articles/2009/06/01/getting-to-grips-with-git" target="_blank"&gt;Last time, I covered the basics&lt;/a&gt;; this time we&amp;#8217;ll explore branches and tags.&lt;/p&gt;


	&lt;h2&gt;Branches&lt;/h2&gt;


	&lt;h3&gt;How branches in git work&lt;/h3&gt;


	&lt;p&gt;In git everything is treated like a branch, so they&amp;#8217;re quick and easy to create and manage.  Branching doesn&amp;#8217;t involve copying the files into a new directory, like in other version control systems. Git keeps track of only the most recent commit to that branch and from there, it can ﬁgure out all the changes in that branch. (The history of changes in git takes the form of a &lt;a href="http://www.ericsink.com/entries/dvcs_dag_1.html" target="_blank"&gt;Directed Acyclic Graph&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Branching marks the point that files in the repository diverge onto two different paths.  Each branch keeps track of the changes separately. Changes in branches can be merged together later if you like.&lt;/p&gt;


	&lt;h3&gt;So, what would you use a branch for?&lt;/h3&gt;


	&lt;p&gt;You can use a branch for whatever you want, but they&amp;#8217;re especially useful for keeping experiments or new features separate from bug fixes to already-released code.&lt;/p&gt;


	&lt;h3&gt;Making a new branch&lt;/h3&gt;


	&lt;p&gt;To make a new branch from the current one, use:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git branch &amp;lt;name of new branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;If you then run the &lt;em&gt;branch&lt;/em&gt; command with no params, it will give you a list of all the existing branches (with an asterisk indicating the current one):&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;&amp;gt; git branch
* master
  my_new_branch&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Working with your new branch&lt;/h3&gt;


	&lt;p&gt;Now, to start working on your new branch, you need to check it out. Remember, I mentioned &lt;a href="http://www.ricroberts.com/articles/2009/06/01/getting-to-grips-with-git" target="_blank"&gt;last time&lt;/a&gt; that &lt;em&gt;checkout&lt;/em&gt; means something different in git to subversion?  In git, it refers to switching your working tree over to using that branch.  Don&amp;#8217;t worry &amp;#8211; any committed changes will safely remain in the other branch (even if you&amp;#8217;ve not pushed them to your central repository).&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git checkout my_new_branch&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Pushing your branch into Github&lt;/h3&gt;


	&lt;p&gt;Once you&amp;#8217;ve made some changes to your branch, it&amp;#8217;s likely that you&amp;#8217;ll want to share them with your colleagues. To push the branch up to Github, you can use:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git push &amp;lt;remote_repository&amp;gt; &amp;lt;branch_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;e.g.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git push origin my_new_branch&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Getting an existing branch from Github&lt;/h3&gt;


	&lt;p&gt;What if someone else has made a branch and pushed it up to Github already?  You can see a list of all the remote branches for a repository with:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git branch -r&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;It&amp;#8217;s then simple to create a local version of that branch:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git branch &amp;lt;name of branch&amp;gt; &amp;lt;remote branch&amp;gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Merging branches&lt;/h3&gt;


	&lt;p&gt;As I mentioned earlier, branches are commonly used as part of a release-process, to keep fixes to &amp;#8216;live&amp;#8217; code separate from ongoing development.  At some point, it&amp;#8217;s likely that you&amp;#8217;d want to get the bug fixes into the main development branch.  This is where merging comes in.&lt;/p&gt;


	&lt;p&gt;There are three main types of merging:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Straight&lt;/em&gt;: Commits are just merged in as they appear in the source branch.&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Squashed&lt;/em&gt;: All commits from the source branch are applied to the target branch as a single commit.&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Cherry picked&lt;/em&gt;: A single commit from the source branch can by applied to the target branch.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;For all types of merging, commands must be run from the target branch (i.e. the one you&amp;#8217;re merging &lt;strong&gt;to&lt;/strong&gt;).&lt;/p&gt;


	&lt;h4&gt;Straight Merge&lt;/h4&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git merge &amp;lt;source branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h4&gt;Squashed Merge&lt;/h4&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git merge --squash &amp;lt;source branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Note that for squashed merges, the changes are applied as staged (not committed).&lt;/p&gt;


	&lt;h4&gt;Cherry Picking&lt;/h4&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git cherry-pick &amp;lt;commit name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;... where the commit name is the &lt;span class="caps"&gt;SHA&lt;/span&gt;-1 hash of the commit you want to pick (or at least, enough characters of it to uniquely identify a commit).  You can stage multiple cherry-picked merges by adding the -n argument.&lt;/p&gt;


	&lt;h3&gt;Merge tracking and conflicts&lt;/h3&gt;


	&lt;p&gt;Git has automatic merge-tracking that keeps tabs on what commits have been merged together, and so wont merge the same thing twice.  Git will also warn you when you try to merge and it can&amp;#8217;t resolve merge conflicts automatically.&lt;/p&gt;


	&lt;h2&gt;Tags&lt;/h2&gt;


	&lt;p&gt;Tags are used to mark a certain point (such as a milestone like a release) in the history of a repository with a name.&lt;/p&gt;


	&lt;p&gt;To make a tag based on the current working tree&amp;#8217;s latest commit:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git tag &amp;lt;name of tag&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;To get your tags up to Github, you need to run:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git push --tags&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; 

	&lt;p&gt;You can make a branch from a tag by using:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git checkout -b &amp;lt;tag name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; 

	&lt;h3&gt;How should I use tags?&lt;/h3&gt;


	&lt;p&gt;Git is very flexible and it&amp;#8217;s up to you based on your project&amp;#8217;s requirements, but tags are very useful for managing releases.  For example, you can tag the last commit that went into a release, so that if a bug arises in the released code, you can retrospectively branch from that point (even if you&amp;#8217;ve already started work on the new features).&lt;/p&gt;


	&lt;h2&gt;Next time&amp;#8230;&lt;/h2&gt;


	&lt;p&gt;There&amp;#8217;s still plenty more material to cover, including rebasing, diff, undoing changes, forking and git tools.&lt;/p&gt;


	&lt;p&gt;Update: &lt;a href="http://www.ricroberts.com/articles/2009/06/22/getting-to-grips-with-git-part-3-rebasing"&gt;Part 3: rebasing&lt;/a&gt; is now available.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=UplLiMTvA9s:z94BmFxzVy8: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=UplLiMTvA9s:z94BmFxzVy8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=UplLiMTvA9s:z94BmFxzVy8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=UplLiMTvA9s:z94BmFxzVy8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=UplLiMTvA9s:z94BmFxzVy8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=UplLiMTvA9s:z94BmFxzVy8: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=UplLiMTvA9s:z94BmFxzVy8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=UplLiMTvA9s:z94BmFxzVy8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=UplLiMTvA9s:z94BmFxzVy8: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, 13 Jun 2009 16:26:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:1223af2f-3222-4bef-8856-114c8b621cd3</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/13/getting-to-grips-with-git-part-2-branches-and-tags#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=getting-to-grips-with-git-part-2-branches-and-tags&amp;day=13&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/13/getting-to-grips-with-git-part-2-branches-and-tags</link>
    </item>
    <item>
      <title>5 Ruby-related blogs for June</title>
      <description>&lt;p&gt;Over the years, I&amp;#8217;ve collected a fair number of Ruby blogs in my feed reader.  I thought I&amp;#8217;d start sharing them for the benefit of others (in no particular order). Here&amp;#8217;s the first installment &amp;#8211; I&amp;#8217;ll list some more at a later date.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blog.rubybestpractices.com/" target="_blank"&gt;Ruby Best Practices&lt;/a&gt; &amp;#8211;  New(ish) blog about writing better Ruby code, to accompany the new O&amp;#8217;Reilly book of the same name.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.rubyflow.com/" target="_blank"&gt;Ruby Flow&lt;/a&gt; &amp;#8211; Community generated Ruby links site.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsenvy.com/" target="_blank"&gt;Rails Envy&lt;/a&gt; &amp;#8211; Amusing but informative Rails-news podcasts by Jason Seifer and Gregg Pollack.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://ryandaigle.com/" target="_blank"&gt;Ryans Scraps&lt;/a&gt; &amp;#8211; Great resource for keeping up with developments in Edge-Rails.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.therailsway.com/" target="_blank"&gt;The Rails Way&lt;/a&gt; &amp;#8211; Blog about Rails best practices, run by Michael Koziarski, Rails-core member.&lt;/li&gt;
	&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=qNGFnE_ip6g:gZMGohidJEM: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=qNGFnE_ip6g:gZMGohidJEM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=qNGFnE_ip6g:gZMGohidJEM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=qNGFnE_ip6g:gZMGohidJEM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=qNGFnE_ip6g:gZMGohidJEM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=qNGFnE_ip6g:gZMGohidJEM: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=qNGFnE_ip6g:gZMGohidJEM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=qNGFnE_ip6g:gZMGohidJEM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=qNGFnE_ip6g:gZMGohidJEM: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, 06 Jun 2009 16:55:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2380c2b6-fe32-4f68-a211-122ef19081fe</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/06/5-ruby-related-blogs-for-june#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=5-ruby-related-blogs-for-june&amp;day=06&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/06/5-ruby-related-blogs-for-june</link>
    </item>
    <item>
      <title>What is the semantic web and why is it important?</title>
      <description>&lt;p&gt;I posted a &lt;a href="http://www.thinkabouttech.com/discussion/71/what-is-the-semantic-web-and-why-is-it-important/?Focus=303#Comment_303" target="_blank"&gt;new article&lt;/a&gt; on &lt;a href="http://www.thinkabouttech.com/" target="_blank"&gt;ThinkAboutTech&lt;/a&gt; earlier today, about the semantic web:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Semantics are important. They always have been and they always will be, because they are fundamental to the process of communication. What’s been changing recently is the means that we use to record and communicate information, especially with the advent of the internet&amp;#8230;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;(read the &lt;a href="http://www.thinkabouttech.com/discussion/71/what-is-the-semantic-web-and-why-is-it-important/?Focus=303#Comment_303" target="_blank"&gt;rest of the article&lt;/a&gt;)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=e4pKM90hVh0:e4_ckwlwqDc: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=e4pKM90hVh0:e4_ckwlwqDc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=e4pKM90hVh0:e4_ckwlwqDc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=e4pKM90hVh0:e4_ckwlwqDc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=e4pKM90hVh0:e4_ckwlwqDc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=e4pKM90hVh0:e4_ckwlwqDc: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=e4pKM90hVh0:e4_ckwlwqDc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=e4pKM90hVh0:e4_ckwlwqDc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=e4pKM90hVh0:e4_ckwlwqDc: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, 03 Jun 2009 09:31:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:0e6df1d4-c43b-4eac-bff7-daab3841f925</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/03/what-is-the-semantic-web-and-why-is-it-important#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=what-is-the-semantic-web-and-why-is-it-important&amp;day=03&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/03/what-is-the-semantic-web-and-why-is-it-important</link>
    </item>
    <item>
      <title>Getting to grips with git - Part 1: The basics</title>
      <description>&lt;h2&gt;Introduction&lt;/h2&gt;


	&lt;p&gt;I&amp;#8217;ve been using the version control system, &lt;a href="http://git-scm.com/" target="_blank"&gt;git&lt;/a&gt; (along with &lt;a href="http://github.com" target="_blank"&gt;github&lt;/a&gt;) for a couple of months now, for my open source projects: &lt;a href="http://www.grridjs.org/" target="_blank"&gt;grrid.js&lt;/a&gt; and &lt;a href="http://www.ricroberts.com/articles/2009/05/17/taskit-a-rails-scheduler-plugin" target="_blank"&gt;Taskit&lt;/a&gt;.  At &lt;a href="http://www.swirrl.com" target="_blank"&gt;Swirrl&lt;/a&gt;, we recently decided to take the plunge to start using git for our main code repository.&lt;/p&gt;


	&lt;p&gt;With this series of blog posts, I hope to ease the transition from &lt;a href="http://subversion.tigris.org" target="_blank"&gt;subversion&lt;/a&gt; (or sourcesafe, or whatever) to git.  In this article, I&amp;#8217;ll just cover the basics.  More advanced stuff will come later.&lt;/p&gt;


	&lt;h2&gt;Why switch to git&lt;/h2&gt;


There are several advantages to using git over other version control systems:
	&lt;ul&gt;
	&lt;li&gt;Being a distributed version control system, with git everyone has their own version of the whole repository.  The central repository (at github in my case) is just arbitrary.  This means that you can do operations such as tagging, branching and diff without having to be connected to the central server.  &lt;a href="http://www.ericsink.com/entries/dvcs_dag_1.html" target="_blank"&gt;This article&lt;/a&gt; by Eric Sink is a good explanation of how git differs from traditional version control.&lt;/li&gt;
		&lt;li&gt;Due to the git:// protocol and the way git stores and tracks the data and changes in repositories, it&amp;#8217;s really fast and the repositories don&amp;#8217;t take up much room on disk.&lt;/li&gt;
		&lt;li&gt;Quick, cheap, easy branching.&lt;/li&gt;
		&lt;li&gt;The repository and branches are separate from the filesystem.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://github.com"&gt;Github&lt;/a&gt;.  Why go to the trouble of hosting a central repository yourself, when you can do it securely, cheaply and quickly with github?  There&amp;#8217;s &lt;a href="http://sourceforge.net/" target="_blank"&gt;Sourceforge&lt;/a&gt; for svn, but for me Github does it better. If you can get to grips with Github, it opens up a world of possibilities for publishing or consuming open source code.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;A little background about how git works&lt;/h2&gt;


	&lt;p&gt;With git, the whole repository is stored in a (hidden) folder called .git at the top level of your project structure.  The &lt;em&gt;working tree&lt;/em&gt; (i.e. the actual files in your project) are just the ones you happen to be working with at the time.  Git doesn&amp;#8217;t track the files themselves, it just tracks their content along with some metadata (&lt;a href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank"&gt;read more about this here&lt;/a&gt;).&lt;/p&gt;


There are a few locations for your content in git
	&lt;ul&gt;
	&lt;li&gt; The &lt;em&gt;working tree&lt;/em&gt;. This is the file system, where you manually make the changes.&lt;/li&gt;
		&lt;li&gt; The &lt;em&gt;staging area&lt;/em&gt;, where changes lie until they&amp;#8217;re committed.&lt;/li&gt;
		&lt;li&gt; The &lt;em&gt;repository&lt;/em&gt; itself, where committed changes go (you can have local and remote repositories).&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Commits in git are labeled with an &lt;span class="caps"&gt;SHA&lt;/span&gt;-1 hash instead of version numbers.  There&amp;#8217;s a &lt;strong&gt;very&lt;/strong&gt; small chance of the hashes ever colliding, so they can be assumed to be unique.  Git actually generates a 40 character-long hash but normally the first 7 or 8 characters are enough to uniquely identify a commit.&lt;/p&gt;


	&lt;h2&gt;Getting started with git&lt;/h2&gt;


	&lt;p&gt;If you&amp;#8217;re on Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; like me, the easiest way to install git is to download the installer from the &lt;a href="http://code.google.com/p/git-osx-installer/" "target="_blank"&gt;Google Code project&lt;/a&gt;. I used version 1.6.2.2. Alternatively, you can compile it from source or use Macports (see &lt;a href="http://github.com/guides/get-git-on-mac" target="_blank"&gt;this guide&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;If you want to share your code with others, you will need a centrally accessible server.  Github provides just that, so go and set up an account and &lt;a href="http://github.com/guides/providing-your-ssh-key" target="_blank"&gt;set up an &lt;span class="caps"&gt;SSH&lt;/span&gt; key&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Before doing anything else you should set some global parameters on your computer to tell git what your github username and email address is (you can override these on a repository basis if you like). For example:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git config --global user.name &amp;quot;RicSwirrl&amp;quot;
git config --global user.email my.email@address.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h2&gt;Setting up a repository&lt;/h2&gt;


	&lt;h3&gt;Getting code on your computer into a repository in Github&lt;/h3&gt;


	&lt;p&gt;First, just make the repository via the Github web interface.&lt;/p&gt;


	&lt;p&gt;So, you have a project on your computer that you want to track using git. Initialize it by changing into its directory and running:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This will create the .git folder.  Change into that folder, and edit the config file therein:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;cd .git
mate config&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Make the config look like this, using your github username and repository:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true

[remote &amp;quot;origin&amp;quot;]
url = git@github.com:&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;.git
fetch = +refs/heads/*:refs/remotes/origin/*

[branch &amp;quot;master&amp;quot;]
remote = origin
merge = refs/heads/master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;(Update: you can also set the config values with git commands, as someone mentioned in the comments).&lt;/p&gt;


	&lt;p&gt;You then need to add all the files in the directory to the repository as at this point they&amp;#8217;re not being tracked by git yet.  To do this, run:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git add .&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This will add all the files in the directory to the staging area I mentioned earlier.  You can then commit these to your local repository, with a message:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git commit -m &amp;quot;my initial commit&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Now you have a fully fledged repository on your computer.  To send it up to Github, just run:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git push&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Note that by default git will push to the &amp;#8220;origin&amp;#8221; remote repository in your config, using the current branch. If you want to push to a different remote repository, using a different branch, you can run something like:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git push github mybranch&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;(Note: for this to work you&amp;#8217;d have to define &amp;#8216;github&amp;#8217; in your config file as another remote repo, and have a &amp;#8216;mybranch&amp;#8217; branch).&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Push&lt;/em&gt; is a similar to a subversion &lt;em&gt;commit&lt;/em&gt;, in that it allows you to share your changes with your colleagues.&lt;/p&gt;


	&lt;h3&gt;Working with a repository that&amp;#8217;s already on Github&lt;/h3&gt;


	&lt;p&gt;What if one of your colleagues has already set up the repository on Github? To get started, you just need to &lt;em&gt;clone&lt;/em&gt; the remote repository like this (using the clone url displayed on the github page).  For example:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git clone git://github.com/Swirrl/grrid.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;I suppose this is equivalent to a subversion &lt;em&gt;checkout&lt;/em&gt;.  Watch out, though, because &lt;em&gt;checkout&lt;/em&gt; means something a bit different in git.&lt;/p&gt;


	&lt;h2&gt;Working with the repository&lt;/h2&gt;


	&lt;h3&gt;Adding files to the staging area&lt;/h3&gt;


	&lt;p&gt;You&amp;#8217;re now ready to start making changes to your code.  Once you&amp;#8217;ve made a few changes, you can see what&amp;#8217;s happened by running:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;If you&amp;#8217;re ready to commit some of these changes to your local repository, you need to run &lt;em&gt;git add&lt;/em&gt; on each file you want to commit.  This adds these changes to the staging area.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git add &amp;lt;filename_to_add&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;What&amp;#8217;s the point of the staging area?&lt;/h3&gt;


	&lt;p&gt;The staging area lets you choose which of your changes you want to commit &amp;#8211; a bit like checking/unchecking files in the svn commit dialog in TextMate (or your editor of choice). You can change the files in your staging area as many times as you like, before committing.&lt;/p&gt;


	&lt;h3&gt;Committing to the local repository&lt;/h3&gt;


	&lt;p&gt;You can run git status again to check what&amp;#8217;s going to be committed. When you&amp;#8217;re happy, run:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git commit -m &amp;quot;my message&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;...and the changes will be committed.  If you know you just want to commit all the changes that you&amp;#8217;ve made, you can do it all in one go by running this (i.e. skip the staging step):&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git commit -a -m &amp;quot;my message&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Pushing your changes to the remote repository&lt;/h3&gt;


	&lt;p&gt;At this point, the changes have been committed to your local repository, but the remote Github repository remains unchanged.  For your colleagues to be able to see your commits you need to push them up to the remote repository with:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git push&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Pulling changes from the remote repository&lt;/h3&gt;


	&lt;p&gt;If you want to see what your buddies have been up to, you need to &lt;em&gt;pull&lt;/em&gt; their changes from the remote repository.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git pull&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This will fetch the remote changes and merge them with your local ones. (It&amp;#8217;s a bit like the &lt;em&gt;update&lt;/em&gt; command in subversion).&lt;/p&gt;


	&lt;h2&gt;Viewing the log&lt;/h2&gt;


	&lt;p&gt;To see the history of the commits in a repository:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h2&gt;Getting Help&lt;/h2&gt;


	&lt;p&gt;Many git commands can take multiple optional arguments which I haven&amp;#8217;t covered here.  To get help on the usage of any command you can do:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;git help &amp;lt;command&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h2&gt;Next time&amp;#8230;&lt;/h2&gt;


	&lt;p&gt;I think that&amp;#8217;s enough information for one blog article.  I&amp;#8217;ll follow up soon with more advanced topics such as branching, merging, tagging, diff, and undoing changes.&lt;/p&gt;


	&lt;p&gt;Update: &lt;a href="http://www.ricroberts.com/articles/2009/06/13/getting-to-grips-with-git-part-2-branches-and-tags" target="_blank"&gt;Part2: Branching and Tags&lt;/a&gt; is now available.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichText?a=h_J_U0C8Iis:B8wuknwTjes: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=h_J_U0C8Iis:B8wuknwTjes:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=h_J_U0C8Iis:B8wuknwTjes:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=h_J_U0C8Iis:B8wuknwTjes:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=h_J_U0C8Iis:B8wuknwTjes:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=h_J_U0C8Iis:B8wuknwTjes: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=h_J_U0C8Iis:B8wuknwTjes:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichText?i=h_J_U0C8Iis:B8wuknwTjes:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichText?a=h_J_U0C8Iis:B8wuknwTjes: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, 01 Jun 2009 20:44:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:f0e28da6-6df2-4d9a-83c0-3fd4b719868a</guid>
      <comments>http://www.ricroberts.com/articles/2009/06/01/getting-to-grips-with-git#comments</comments>
      <trackback:ping>http://www.ricroberts.com/trackbacks?article_id=getting-to-grips-with-git&amp;day=01&amp;month=06&amp;year=2009</trackback:ping>
      <link>http://www.ricroberts.com/articles/2009/06/01/getting-to-grips-with-git</link>
    </item>
  </channel>
</rss>
