<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xml:lang="en-US">
  <id>tag:blog.peelmeagrape.net,2008:mephisto/</id>
  <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net" />
  
  <title type="text">Peel Me A Grape :: We Make Things Work</title>
  <updated>2009-03-12T11:24:35+00:00</updated>
  <will_paginate>#&lt;Article:0xb6fb8cc0&gt;#&lt;Article:0xb6fb618c&gt;#&lt;Article:0xb6fb613c&gt;#&lt;Article:0xb6fb60ec&gt;#&lt;Article:0xb6fb609c&gt;#&lt;Article:0xb6fb604c&gt;#&lt;Article:0xb6fb5ffc&gt;#&lt;Article:0xb6fb5fac&gt;#&lt;Article:0xb6fb5f5c&gt;#&lt;Article:0xb6fb5f0c&gt;#&lt;Article:0xb6fb5ebc&gt;#&lt;Article:0xb6fb5e6c&gt;#&lt;Article:0xb6fb5e1c&gt;#&lt;Article:0xb6fb5dcc&gt;#&lt;Article:0xb6fb5d7c&gt;</will_paginate>
  <subtitle type="html">'We Make Things Work' is a blog about software development. Focusing on technologies like Ruby on Rails and Java. Providing insights and tips on Software development aswell as Project Announcements.</subtitle><geo:lat>53.345992</geo:lat><geo:long>-6.259718</geo:long><link rel="self" href="http://feeds.feedburner.com/peelmeagrape" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/80</id>
    <published>2009-03-12T11:24:35+00:00</published>
    <updated>2009-03-12T11:24:35+00:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2009/3/12/detect-clashing-named-routes-early-in-rails" />
    <title>Detect clashing named routes early in Rails</title>
    <content type="html">&lt;p&gt;Yesterday I deployed some reasonably well tested code to a rails app &lt;a href="http://www.igopeople.com"&gt;I&amp;#8217;m working on&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;I was adding an experimental version of an existing page to get early feedback. My mistake was how I edited my &lt;strong&gt;routes.rb&lt;/strong&gt;. I dupped a line and ended up with something like&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;map.explore 'explore', :controller =&amp;gt; 'interesting', :action =&amp;gt; 'explore'
map.explore 'doraexplore', :controller =&amp;gt; 'interesting', :action =&amp;gt; 'dora'&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;The problem is I accidentally eclipsed my intended named route with this experimental one. So when I used &lt;strong&gt;explore_path&lt;/strong&gt; in my views, it generated &lt;em&gt;/doraexplore&lt;/em&gt; instead of &lt;em&gt;/explore&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;I tested both pages side by side in my browser and they did as expected, but unfortunately I didn&amp;#8217;t click where the page is linked from.&lt;/p&gt;


	&lt;h3&gt;This has happened me before, but won&amp;#8217;t happen again!&lt;/h3&gt;


	&lt;p&gt;I&amp;#8217;ve written a little initializer that extends rails routing to raise an error if these clashes are introduced.&lt;/p&gt;


	&lt;p&gt;Place the following code in &lt;em&gt;/RAILS_ROOT/config/initializers/detect_named_route_clashes.rb&lt;/em&gt; (available here on &lt;a href="http://gist.github.com/78023"&gt;gist.github&lt;/a&gt;)&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;module IGOpeople
  module Routing
    module BorkOnNamedRouteClash
      def self.included(base)
        base.alias_method_chain :add_named_route, :checking_clash
      end

      def add_named_route_with_checking_clash(name, path, options = {})
        if named_routes[name.to_sym].nil?
          add_named_route_without_checking_clash(name,path,options)
        else
          raise('clashing named route: '+ name.to_s)
        end
      end
    end
  end
end

if ['development','test'].include?(RAILS_ENV)
  ActionController::Routing::RouteSet.send(:include, 
      IGOpeople::Routing::BorkOnNamedRouteClash)
end&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Now when I run my app, it raises an error &lt;strong&gt;clashing named route: explore&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;I hope this will help others avoid the mistake I made.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=Di_IkwLEpHk:W44Mzwwgcfg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=Di_IkwLEpHk:W44Mzwwgcfg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?i=Di_IkwLEpHk:W44Mzwwgcfg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=Di_IkwLEpHk:W44Mzwwgcfg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?i=Di_IkwLEpHk:W44Mzwwgcfg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=Di_IkwLEpHk:W44Mzwwgcfg:tsJCC-44j6g"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?i=Di_IkwLEpHk:W44Mzwwgcfg:tsJCC-44j6g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=Di_IkwLEpHk:W44Mzwwgcfg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/79</id>
    <published>2009-03-02T16:32:24+00:00</published>
    <updated>2009-03-02T16:32:24+00:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2009/3/2/iia-web-development-working-group" />
    <title>IIA Web Development Working Group</title>
    <content type="html">&lt;p&gt;I&amp;#8217;m part of the recently formed &lt;a href="http://www.iia.ie/about-us/working-groups/web-development-working-group/"&gt;Web Development Working Group&lt;/a&gt; within the &lt;a href="http://www.iia.ie/"&gt;&lt;span class="caps"&gt;IIA&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;We aim to provide useful information and no nonsense advice to help businesses make smarter decisions when it comes to web development.&lt;/p&gt;


	&lt;p&gt;At our &lt;a href="http://blog.iia.ie/2009/iia-web-development-working-group-hold-their-first-meeting/"&gt;first meeting&lt;/a&gt; we decided it would be wise to collect some information to help us to decide what to focus on.&lt;/p&gt;


	&lt;p&gt;Please &lt;a href="http://www.polldaddy.com/s/32BAE2D5804A42C4/"&gt;fill out this short survey&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Chat to &lt;a href="http://blog.iia.ie/2009/iia-web-development-working-group-hold-their-first-meeting/"&gt;one of us&lt;/a&gt; this week at &lt;a href="http://events.carsonified.com/fowa/2009/dublin"&gt;&lt;span class="caps"&gt;FOWA&lt;/span&gt; Dublin&lt;/a&gt;, or &lt;a href="http://www.bizcamp.ie/"&gt;Bizcamp Dublin&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;How can we help you make smarter decisions? Where do you struggle when it comes to web projects? What single bit of advice helped you most so far? What projects will you be starting this year?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=yvxmr-bAHtI:XdpdgKUzL7g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=yvxmr-bAHtI:XdpdgKUzL7g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?i=yvxmr-bAHtI:XdpdgKUzL7g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=yvxmr-bAHtI:XdpdgKUzL7g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?i=yvxmr-bAHtI:XdpdgKUzL7g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=yvxmr-bAHtI:XdpdgKUzL7g:tsJCC-44j6g"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?i=yvxmr-bAHtI:XdpdgKUzL7g:tsJCC-44j6g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/peelmeagrape?a=yvxmr-bAHtI:XdpdgKUzL7g:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/peelmeagrape?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/78</id>
    <published>2009-02-25T00:55:58+00:00</published>
    <updated>2009-02-25T00:55:58+00:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2009/2/25/pushing-the-tuesday-push" />
    <title>Pushing the Tuesday push</title>
    <content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/vidiot/69075298/" title="Push for Cheese" target="_blank"&gt;&lt;img src="http://farm1.static.flickr.com/12/69075298_d84059ca01.jpg" alt="Push for cheese" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://creativecommons.org/licenses/by-sa/2.0/" title="Attribution-ShareAlike License" target="_blank"&gt;creative commons attribution/sharealike&lt;/a&gt; photo credit: &lt;a href="http://www.flickr.com/photos/vidiot/" title="Vidiot" target="_blank"&gt; Vidiot &lt;/a&gt;&lt;/small&gt;&lt;/p&gt; 

	&lt;p&gt;Developing and releasing a product is &lt;strong&gt;hard&lt;/strong&gt;. Effectively promoting it, &lt;strong&gt;even harder&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.tuesdaypush.com"&gt;The Tuesday push&lt;/a&gt; is here to help. &lt;strong&gt;You&lt;/strong&gt; are here to help.&lt;/p&gt;


	&lt;p&gt;Every second tuesday, a growing community within the irish tech scene coordinate an 
effort to promote and provide feedback for a particular product.&lt;/p&gt;


	&lt;p&gt;This week the &lt;a href="http://www.tuesdaypush.com/2009/02/24/todays-tuesday-push-is-the-tuesday-push/"&gt;push is on the tuesday push itself&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;One measure of success, will be the size of the next one.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Take part next time&lt;/strong&gt;. Follow &lt;a href="http://twitter.com/TuesdayPush"&gt;@TuesdayPush&lt;/a&gt; on twitter and subscribe to &lt;a href="http://www.tuesdaypush.com"&gt;www.tuesdaypush.com&lt;/a&gt; to keep in the loop. &lt;a href="http://www.tuesdaypush.com/request-a-tuesday-push/"&gt;Put your product forward&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;One snippet of feedback: with the aim of more people taking the time to contribute &amp;#8211; warn us earlier about who will be pushed and when.&lt;/p&gt;


	&lt;p&gt;PS. The cheese is not free.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=7qEGyddP"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=BF7ti2pg"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=BF7ti2pg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=FK5lWrtU"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=FK5lWrtU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=G1KeA0XO"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=G1KeA0XO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=4Bicg9VI"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/77</id>
    <published>2009-02-22T11:33:32+00:00</published>
    <updated>2009-02-22T11:33:32+00:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2009/2/22/lets-chat-at-fowa-dublin-lets-chat-at-bizcamp" />
    <title>Lets chat at FOWA Dublin. Lets chat at BizCamp.</title>
    <content type="html">&lt;p&gt;I&amp;#8217;m looking forward to &lt;a href="http://events.carsonified.com/fowa/2009/dublin"&gt;Future of Web Apps (FOWA) in Dublin&lt;/a&gt; on the 6th March and &lt;a href="http://www.bizcamp.ie/"&gt;BizCamp Dublin&lt;/a&gt; (a user generated business conference)  the day after.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not the worlds most natural networker. Who is?&lt;/p&gt;


	&lt;p&gt;For fun, I created some business cards (using &lt;a href="http://www.moo.com"&gt;moo.com&lt;/a&gt; of course) specially for the two events. I&amp;#8217;d love to chat about what &lt;strong&gt;&lt;span class="caps"&gt;YOU&lt;/span&gt;&lt;/strong&gt; do. Please say hi and take one of these:&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://blog.peelmeagrape.net/assets/2009/2/22/lets-chat-at-fowa-dublin.png" alt="" /&gt;
&lt;img src="http://blog.peelmeagrape.net/assets/2009/2/22/lets-chat-at-bizcamp-dublin.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Carsonified always put on a good event. It&amp;#8217;s great to have some &lt;a href="http://contrast.ie"&gt;local talent&lt;/a&gt; in the mix of &lt;a href="http://events.carsonified.com/fowa/2009/dublin/speakers"&gt;superheroes that will speak&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=huarWUJJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Dri1BR94"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Dri1BR94" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=4c3n0ZtD"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=4c3n0ZtD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=kmOaw6iV"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=kmOaw6iV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=aY3MR0hN"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/76</id>
    <published>2008-12-24T00:41:48+00:00</published>
    <updated>2008-12-24T00:41:48+00:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/12/24/long-url-please-ajaxian-thank-you" />
    <title>Long URL Please, Ajaxian Thank You!</title>
    <content type="html">&lt;p&gt;&lt;a href="http://www.longurlplease.com" title="Long Url Please"&gt;&lt;img src="http://blog.peelmeagrape.net/assets/2008/12/23/longerurlplease.com.png" alt"Long URL Please"/&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.longurlplease.com"&gt;Long &lt;span class="caps"&gt;URL&lt;/span&gt; Please&lt;/a&gt; started as a hobby project to learn a bit about &lt;a href="http://code.google.com/appengine/"&gt;app engine&lt;/a&gt;, and scratch an &lt;a href="http://blog.peelmeagrape.net/2008/10/18/url-shortener-etiquette"&gt;itch I have with short urls&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;A few days ago I emailed the Ajaxian guys asking for help to promote it a little bit. &lt;a href="http://weblogs.java.net/blog/javaben/"&gt;Ben Galbraith&lt;/a&gt; emailed me earlier today saying he&amp;#8217;d just &lt;a href="http://ajaxian.com/archives/lengthening-out-urls"&gt;posted on Ajaxian about longurlplease&lt;/a&gt;. I&amp;#8217;m so chuffed to be mentioned on such a well known blog.&lt;/p&gt;


	&lt;p&gt;It was amazing to see first hand just how much footfall a site like Ajaxian can drive. Figures from my app engine dashboard indicate over 5000 hits on &lt;a href="http://www.longurlplease.com"&gt;www.longurlplease.com&lt;/a&gt; and 1250 on the api in the last 16 hours. I suspect the number of uniques is quite a bit lower, but impressive nonetheless. I&amp;#8217;ll post more usage information soon on the &lt;a href="http://longurlplease.blogspot.com/"&gt;longurlplease blog&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Follow up posts by the &lt;a href="http://threatchaos.com/?p=454"&gt;Threat Chaos security blog&lt;/a&gt;, &lt;a href="http://technologizer.com/2008/12/23/long-url-please-makes-a-lot-of-sense/"&gt;technologizer&lt;/a&gt;, a &lt;a href="http://news.ycombinator.com/item?id=407660"&gt;discussion on ycombinator hacker news&lt;/a&gt;, a &lt;a href="http://digg.com/tech_news/Long_URL_Please_Firefox_Plugin"&gt;mention on digg&lt;/a&gt; amongst others have helped spread the word even further. Thanks to &lt;a href="http://www.aidanf.net/"&gt;Aidan Finn&lt;/a&gt; who &lt;a href="http://www.aidanf.net/posts/long_urls_please.html"&gt;posted about longurlplease&lt;/a&gt; last week &amp;#8211; it helped encourage me to publicise the app further.&lt;/p&gt;


	&lt;p&gt;A massive thanks to all those who&amp;#8217;ve tweeted about it &amp;#8211; a subset of which are easily found at &lt;a href="http://search.twitter.com/search?q=longurlplease"&gt;search.twitter.com/search?q=longurlplease&lt;/a&gt; and &lt;a href="http://search.twitter.com/search?q=long+url+please"&gt;search.twitter.com/search?q=long+url+please&lt;/a&gt;. It&amp;#8217;s overwhelming just how many people went as far as actually tweeting about it or following &lt;a href="http://twitter.com/longurlplease"&gt;longurlplease updates&lt;/a&gt;. You rock!&lt;/p&gt;


	&lt;p&gt;Thanks to all those who&amp;#8217;ve installed the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9549"&gt;firefox plugin&lt;/a&gt;, and those who&amp;#8217;ve taken the time to give me &lt;a href="https://addons.mozilla.org/en-US/firefox/reviews/display/9549"&gt;feedback in the reviews&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Eagle eye attention to detail from &lt;a href="http://twitter.com/stevequinlan"&gt;Steve Quinlan&lt;/a&gt; and &lt;a href="http://twitter.com/g4rg4ntu4"&gt;Jerry Kiely&lt;/a&gt; helped me quickly improve early versions of the app. I look forward to being able to return the favor.&lt;/p&gt;


	&lt;p&gt;I hope this is just the start of a long story for &lt;strong&gt;Long &lt;span class="caps"&gt;URL&lt;/span&gt; Please&lt;/strong&gt;. Please get in touch if I can help you integrate the &lt;span class="caps"&gt;API&lt;/span&gt; with your website or application.&lt;/p&gt;


	&lt;p&gt;The last word goes out to &lt;a href="http://ajaxian.com"&gt;Ajaxian&lt;/a&gt; &amp;#8211; &lt;strong&gt;Respect!&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=MLuZpqsI"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Pmywqnmt"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Pmywqnmt" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=b8Pflti7"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=b8Pflti7" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=eVKPb2yh"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=eVKPb2yh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=3AFuwnT0"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/75</id>
    <published>2008-12-22T23:02:52+00:00</published>
    <updated>2008-12-22T23:02:52+00:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/12/22/rails-tip-getting-more-from-content_for" />
    <title>Rails Tip: Getting more from content_for</title>
    <content type="html">&lt;p&gt;&lt;a href="http://apidock.com/rails/ActionView/Helpers/CaptureHelper/content_for"&gt;content_for&lt;/a&gt; is the unsung hero of rails templating system! It allows you to define multiple placeholders in your layout from which you can render content from your views. It&amp;#8217;s simple in both concept and implementation. It is the rails equivalent of &lt;a href="http://tiles.apache.org/"&gt;tiles&lt;/a&gt; (for java) except it&amp;#8217;s good!&lt;/p&gt;


	&lt;p&gt;If &lt;code&gt;content_for&lt;/code&gt; is totally new to you, then get a quick overview in this &lt;a href="http://railscasts.com/episodes/8"&gt;railscast about rails layouts&lt;/a&gt;&lt;/p&gt;


Read the src: &lt;i&gt;&lt;a name="rails-src" href="http://github.com/rails/rails/tree/master/actionpack/lib/action_view/helpers/capture_helper.rb"&gt;actionpack/lib/action_view/helpers/capture_helper.rb&lt;/a&gt;&lt;/i&gt;
&lt;code class="ruby"&gt;&lt;pre&gt;def content_for(name, content = nil, &amp;#38;block)
  existing_content_for = instance_variable_get("@content_for_#{name}").to_s
  new_content_for      = existing_content_for + (block_given? ? capture(&amp;#38;block) : content)
  instance_variable_set("@content_for_#{name}", new_content_for)
  nil
end&lt;/pre&gt;&lt;/code&gt;

Two things are interesting here:
	&lt;ol&gt;
	&lt;li&gt;content is easily accessible via an instance variable &lt;/li&gt;
		&lt;li&gt;consecutive calls result in content being concatenated, &lt;em&gt;not&lt;/em&gt; overwritten.&lt;/li&gt;
	&lt;/ol&gt;


Simplistically, rails layout looks like this:
&lt;code class="html"&gt;&lt;pre&gt;&amp;lt;html&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;%= yield %&amp;gt;
    &amp;lt;div id="footer"&amp;gt;
       &amp;lt;%= yield :footer %&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;content in your view will be rendered where &lt;code&gt;&amp;lt;%= yield %&amp;gt;&lt;/code&gt; is, except pieces within &lt;code&gt;content_for&lt;/code&gt; which will be rendered by name within the layout. eg. &lt;strong&gt;:footer&lt;/strong&gt;&lt;/p&gt;


	&lt;h2&gt;Taking advantage of content_for concatenation&lt;/h2&gt;


	&lt;p&gt;&lt;em&gt;content_for&lt;/em&gt; concatenation helps you to easily render multiple items into the same piece of your layout.&lt;/p&gt;


	&lt;p&gt;My favorite use of this is for rendering javascript at the bottom of my pages. The aim is to include javascript as late as possible in your page (so that it doesn&amp;#8217;t slow down page rendering on load).&lt;/p&gt;


	&lt;p&gt;In my layout, I have a &lt;code&gt;&amp;lt;%= yield :js_footer %&amp;gt;&lt;/code&gt; just before the closing &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag. I use &lt;code&gt;content_for :js_footer&lt;/code&gt;, often multiple times for one page, without worrying they&amp;#8217;ll overwrite eachother.&lt;/p&gt;


	&lt;p&gt;The big win, is that it allows me to keep the js behhaviours right beside where the markup is defined in my partials, yet have it rendered at the bottom of the page.&lt;/p&gt;


	&lt;p&gt;Henrik Nyh points out that you can also make &lt;a href="http://henrik.nyh.se/2008/10/content_for-repeat"&gt;repeat calls to yield&lt;/a&gt; which is another handy trick to keep up your sleeve.&lt;/p&gt;


	&lt;h2&gt;Taking advantage of the instance variable&lt;/h2&gt;


	&lt;p&gt;Since I know that &lt;code&gt;content_for :name&lt;/code&gt; will be captured into &lt;code&gt;@content_for_name&lt;/code&gt; I can check if it&amp;#8217;s been set in my layout, and act accordingly.&lt;/p&gt;


	&lt;p&gt;Say for example you&amp;#8217;ve got a &lt;code&gt;yield :gmaps_footer&lt;/code&gt;, you may attach an unload event to the body tag if gmaps is being used on the page&lt;/p&gt;


&lt;code class="html"&gt;&lt;pre&gt;&amp;lt;body &amp;lt;%= 'onunload="GUnload()"' unless @content_for_gmaps_footer.blank?&amp;gt;...&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;With &lt;a href="http://rails.lighthouseapp.com/projects/8994/tickets/1311-add-content_forname-helper"&gt;this small patch&lt;/a&gt; I proposed for rails it would become:&lt;/p&gt;


&lt;code class="html"&gt;&lt;pre&gt;&amp;lt;body &amp;lt;%= 'onunload="GUnload()"' if content_for?(:gmaps_footer.blank)&amp;gt;...&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Knowing exactly how &lt;code&gt;content_for&lt;/code&gt; is &lt;a href="#rails-src"&gt;implemented&lt;/a&gt; helped me improve the maintainability/readability of my view code. I hope it helps you too!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=vSoJ0gw0"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Er33bXGJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Er33bXGJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Mhlddua1"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Mhlddua1" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=p84LsObF"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=p84LsObF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=iBgAWaTp"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/74</id>
    <published>2008-10-18T00:23:29+01:00</published>
    <updated>2008-10-18T00:23:29+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/10/18/url-shortener-etiquette" />
    <title>URL Shortener Etiquette</title>
    <content type="html">&lt;p&gt;&lt;img src="http://blog.peelmeagrape.net/assets/2008/10/17/my-url-is.gif" alt="" /&gt;&lt;/p&gt;


&lt;span class="caps"&gt;URL&lt;/span&gt; shorteners (&lt;a href="http://tinyurl.com"&gt;tinyurl.com&lt;/a&gt;, &lt;a href="http://bit.ly"&gt;bit.ly&lt;/a&gt;, &lt;a href="http://is.gd"&gt;is.gd&lt;/a&gt;, &lt;a href="http://reallytinyurl.com"&gt;reallytinyurl.com&lt;/a&gt; etc.) take one &lt;a href="http://en.wikipedia.org/wiki/Uniform_Resource_Locator"&gt;&lt;span class="caps"&gt;URL&lt;/span&gt;&lt;/a&gt; and give you a shorter one that redirects to the original. eg. 
&lt;pre&gt;http://maps.google.co.uk/maps?f=q&amp;#38;hl=en&amp;#38;
q=Upper+Fitzwilliam+St,+Dublin+2,+Republic+of+Ireland&amp;#38;
sll=53.800651,-4.064941&amp;#38;sspn=9.676196,28.564453&amp;#38;ie=UTF8&amp;#38;
cd=1&amp;#38;geocode=0,53.336060,-6.249863&amp;#38;z=16
&lt;/pre&gt;

	&lt;p&gt;shortens to&lt;/p&gt;


&lt;pre&gt;http://is.gd/4hlC&lt;/pre&gt; 

	&lt;p&gt;Incredibly useful, incredible usage (tinyurl.com gets over 1.5billion hits/month), but increasingly misused.&lt;/p&gt;


	&lt;h3&gt;Only use when necessary.&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Do&lt;/strong&gt; use them in print &amp;#8211; &lt;strong&gt;&lt;span class="caps"&gt;BUT&lt;/span&gt;&lt;/strong&gt; only if the original &lt;span class="caps"&gt;URL&lt;/span&gt; is too long or too ugly to print (&lt;em&gt;eg http://www.example.com/Something.aspx?_stupidParam1=stupidValue&lt;/em&gt;)&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Do&lt;/strong&gt; use them in email &amp;#8211; &lt;strong&gt;&lt;span class="caps"&gt;BUT&lt;/span&gt;&lt;/strong&gt; only if you are worried about the &lt;span class="caps"&gt;URL&lt;/span&gt; wrapping over lines.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Do&lt;/strong&gt; use them when tweeting &amp;#8211; &lt;strong&gt;&lt;span class="caps"&gt;BUT&lt;/span&gt;&lt;/strong&gt; only if you can&amp;#8217;t fit in the full &lt;span class="caps"&gt;URL&lt;/span&gt;. (&lt;em&gt;unfortunately many twitter clients and perhaps twitter itself automatically shortens URLs, even when there&amp;#8217;&amp;#8217;s enough space&lt;/em&gt;)&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Do&lt;/strong&gt; use them in spoken word (eg podcasting) &amp;#8211; &lt;strong&gt;&lt;span class="caps"&gt;BUT&lt;/span&gt;&lt;/strong&gt; only if you&amp;#8217;re linking to a very long, un googleable, or hard to spell &lt;span class="caps"&gt;URL&lt;/span&gt;. If you linking to mycoolnewwebsite.com then say that not is.gd/tkDn.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Do&lt;/strong&gt; use them when IM&amp;#8217;ing &lt;strong&gt;&lt;span class="caps"&gt;BUT&lt;/span&gt;&lt;/strong&gt; only if you know you&amp;#8217;re IM system mangles or doesn&amp;#8217;t hyperlink them.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Don&amp;#8217;t&lt;/strong&gt; use them in blog comments.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Don&amp;#8217;t&lt;/strong&gt; use them on a website or blog post. (no excuses!!!)&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Don&amp;#8217;t&lt;/strong&gt; link to a tinyurl without describing what you are linking to &amp;#8211; it&amp;#8217;s rude!&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Why?&lt;/h3&gt;


&lt;span class="caps"&gt;URL&lt;/span&gt;&amp;#8217;s do so much more than locate resources.
	&lt;ul&gt;
	&lt;li&gt;They reinforce a brand (eg amazon.com).&lt;/li&gt;
		&lt;li&gt;They describe the resource they link to (eg. http://flickr.com/explore/interesting/24hours)&lt;/li&gt;
		&lt;li&gt;Users can distinguish sites they are familiar with vs those they aren&amp;#8217;t.&lt;/li&gt;
		&lt;li&gt;Unless you&amp;#8217;ve clicked the very same tinyurl before &amp;#8211; they&amp;#8217;ve no way to know if they&amp;#8217;ve visited the site before &amp;#8211; made worse by the ever growing number of shortener services.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;When you send someone a &lt;span class="caps"&gt;URL&lt;/span&gt; or publish a &lt;span class="caps"&gt;URL&lt;/span&gt; somewhere &amp;#8211; you are suggesting people visit it. By obscuring it behind a redirect &amp;#8211; they&amp;#8217;ve no way to know where they&amp;#8217;ll end up. Curiosity will often click the link you&amp;#8217;d otherwise ignore.&lt;/p&gt;


	&lt;p&gt;This isn&amp;#8217;t as bad with people you know and trust, at worst just a waste of time. When dealing with untrustworthy or mischievous sources, beware, &lt;a href="http://en.wikipedia.org/wiki/Rickroll"&gt;Rickrolling&lt;/a&gt; is one thing, more dangerous is the possibility of visiting a site that tries to exploit a security vulnerability in your browser.&lt;/p&gt;


	&lt;p&gt;Eye tracking studies (&lt;a href="":ftp://ftp.research.microsoft.com/pub/tr/TR-2007-01.pdf"&gt;Microsoft&lt;/a&gt; &lt;a href="http://www.useit.com/eyetracking/"&gt; Nielsen&lt;/a&gt;) of search engine use measured 24% of time was spent gazing at URLs. This emphasizes the importance of a &lt;span class="caps"&gt;URL&lt;/span&gt;, and the information and significance it carries, all lost when a shortener is used.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=dFq4Pa2D"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=HbvgXXWB"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=HbvgXXWB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=TFjxW8iD"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=TFjxW8iD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=dJNAvLPk"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=dJNAvLPk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=YzVK2Vk0"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/73</id>
    <published>2008-10-17T22:48:31+01:00</published>
    <updated>2008-10-17T22:52:04+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/10/17/twits-near-me-what-people-nearby-are-saying" />
    <title>Twits Near Me : What people nearby are saying</title>
    <content type="html">&lt;p&gt;&lt;img src="http://blog.peelmeagrape.net/assets/2008/10/17/twits-rock.gif" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;We&amp;#8217;ve launched &lt;a href="http://twitsnear.me"&gt;twitsnear.me&lt;/a&gt;. It shows what people nearby are saying on &lt;a href="http://twitter.com"&gt;twitter&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Away From Home?&lt;/strong&gt; Find new twitter buddies wherever you are.
&lt;strong&gt;Bored at work?&lt;/strong&gt; Make new friends and go meet them for coffee.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Dip in to local conversations without following the world&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;I hope you like it! I&amp;#8217;d love your feedback.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=dhHek6Ew"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=aycQeXjd"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=aycQeXjd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=eMlTXE2F"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=eMlTXE2F" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=hY2lBD5R"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=hY2lBD5R" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=LPLVTcS6"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/72</id>
    <published>2008-10-14T13:12:37+01:00</published>
    <updated>2008-10-14T13:12:37+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/10/14/careful-who-you-send-mail-to-from-staging-environment" />
    <title>Careful who you send mail to from staging environment</title>
    <content type="html">&lt;p&gt;I&amp;#8217;ll often clone the db from production to staging to reproduce bugs or performance issues. The staging site is not visible to the public, so emails with links to it will confuse/annoy people. Today I accidentally sent emails to people from our staging setup.&lt;/p&gt;


	&lt;p&gt;To stop this happening again &amp;#8211; I&amp;#8217;ve a quick monkeypatch to only send emails to recipients in our domain. I placed this in &lt;em&gt;config/environments/staging.rb&lt;/em&gt;.&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;class ActionMailer::Base
  def perform_deliveries
    @mail.header['to'].to_s =~ /@example.com$/
  end
end&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;&lt;em&gt;Replace example.com with your particular domain&lt;/em&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Hxc94Npl"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=ejZ9fcwR"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=ejZ9fcwR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=SwGbVJ69"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=SwGbVJ69" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=NYXQsbXG"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=NYXQsbXG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=wlEzKtzx"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/71</id>
    <published>2008-09-23T23:28:04+01:00</published>
    <updated>2008-09-23T23:30:43+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/9/23/downloadmusic-ie-tuesday-push" />
    <title>downloadmusic.ie tuesday push</title>
    <content type="html">&lt;p&gt;&lt;a href="http://downloadmusic.ie"&gt;Downloadmusic.ie&lt;/a&gt; helps Irish independent/unsigned musicians to sell their music online and over &lt;span class="caps"&gt;SMS&lt;/span&gt;, get &lt;strong&gt;paid&lt;/strong&gt;, and get &lt;strong&gt;chart hits&lt;/strong&gt;. &lt;a href="http://www.johnnybeirne.com/"&gt;Johnny Beirne&lt;/a&gt; and &lt;a href="http://www.nightbluefruit.com/"&gt;Gareth McDaid&lt;/a&gt; are the people behind it. This week they&amp;#8217;re getting the &lt;a href="http://www.mulley.net/2008/09/23/tuesday-push-23rd-september-2008-downloadmusicie/"&gt;push they deserve&lt;/a&gt;, Tuesday style!&lt;/p&gt;


	&lt;p&gt;11 out of 10 for &lt;strong&gt;heart!&lt;/strong&gt;, plenty of room for polish.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;SMS&lt;/span&gt; &amp;#8216;Music 1053&amp;#8217; to 57501 is all it takes for a supporter at a gig, to download a &lt;span class="caps"&gt;DRM&lt;/span&gt; free copy of a song, the artist to get paid, and be tracked as a purchase on the Irish charts. That&amp;#8217;s neat. Making it really easy for bands to start doing what most of them are really bad at (Selling).&lt;/p&gt;


	&lt;p&gt;The &lt;a href="http://feeds.feedburner.com/downloadmusic/aTXn"&gt;Gig Guide Feed&lt;/a&gt; helps keep people up to date on who&amp;#8217;s playing, where and when. (Helping Bands promote).&lt;/p&gt;


	&lt;p&gt;Their &lt;a href="http://apps.new.facebook.com/downloadmusic/"&gt;facebook app&lt;/a&gt; and an iGoogle widget (requires login) &amp;#8211; giving you, amongst other things, gig listings, news and unlimited listening access to Irish indie music.&lt;/p&gt;


	&lt;p&gt;It would have been nice to see downloadmusic.ie &lt;a href="http://awards.ie/webawards/2008/09/get-shorty-moviestarie-web-awards-shortlists/"&gt;shortlisted&lt;/a&gt; for this years &lt;a href="http://awards.ie/webawards/"&gt;Irish Web Awards&lt;/a&gt;. They&amp;#8217;re no where near the peak of their ambition or capability, when they are, getting shortlisted will be just a formality.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=h42t3vld"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Qggz2uLw"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Qggz2uLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=WqqoQouB"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=WqqoQouB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=5OQwZdgy"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=5OQwZdgy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=0gzV5906"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/66</id>
    <published>2008-09-20T23:43:00+01:00</published>
    <updated>2009-04-14T12:04:51+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/9/20/editing-crontab-with-ruby-and-capistrano" />
    <title>Editing crontab with ruby and capistrano</title>
    <content type="html">&lt;p&gt;I want to automate editing crontabs. I often create or edit identical cron entries on different projects or machines, so automating this will save me time.&lt;/p&gt;


	&lt;h2&gt;Quick overview of &lt;a href="http://en.wikipedia.org/wiki/Cron"&gt;cron&lt;/a&gt; &amp;#8211; the manual way&lt;/h2&gt;


Each line in your crontab is a command to run and configuration for when to run it. Example: the following will clear the apache error log at one minute past midnight each day.
&lt;pre&gt;01 00 * * * echo "" &amp;gt; /www/apache/logs/error_log&lt;/pre&gt;

A common gotcha with cron is that it doesn&amp;#8217;t share the same environment as you do when running your shell &amp;#8211; in particular the &lt;span class="caps"&gt;PATH&lt;/span&gt; may be different and commands available to you in your shell may be missing on cron&amp;#8217;s default &lt;span class="caps"&gt;PATH&lt;/span&gt;. To help with this, cron allows you to add lines to set environment variables. eg.
&lt;pre&gt;PATH=/usr/bin:/usr/local/bin&lt;/pre&gt;

	&lt;p&gt;&lt;em&gt;crontab -l&lt;/em&gt; outputs the current users cron entries&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;crontab -e&lt;/em&gt; opens the current users crontab for edit (configure editor with &lt;span class="caps"&gt;EDITOR&lt;/span&gt; environment variable)&lt;/p&gt;


	&lt;p&gt;Add &lt;em&gt;-u user&lt;/em&gt; to your crontab commands to avoid accidentally installing as root for example. (eg &lt;em&gt;crontab -u app_user -e&lt;/em&gt;)&lt;/p&gt;


&lt;em&gt;crontab -&lt;/em&gt; allows us to pipe content into the current users crontab, which is allows us to run commands like this, to manipulate crontab using &lt;a href="http://en.wikipedia.org/wiki/Sed"&gt;sed&lt;/a&gt;.
&lt;pre&gt;crontab -l | sed s/PATH=.*/PATH=\\/new\\/vvvpath/ | crontab -&lt;/pre&gt;

	&lt;h2&gt;Introducing cronedit&lt;/h2&gt;


	&lt;p&gt;&lt;a href="http://cronedit.rubyforge.org/"&gt;cronedit&lt;/a&gt; is a small ruby library that allows us to manipulate crontab using ruby.&lt;/p&gt;


&lt;pre&gt;gem install cronedit&lt;/pre&gt;

Here&amp;#8217;s a quick taste of what you can do. 
&lt;code class="ruby"&gt;&lt;pre&gt;cm = CronEdit::Crontab.new 'app_user'
cm.add 'job1', "5,35 0-23/2 * * * echo 'hello world'" 
cm.add 'job2', {:minute=&amp;gt;5, :command=&amp;gt;'echo 42'}
cm.remove 'job3'
cm.commit
&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Add jobs, either using familiar standard crontab syntax, or using a ruby hash, perhaps easier to read. An interesting thing to note is how it adds labels to your tasks, using comments in crontab. This is used to identify jobs for removal/replacement.&lt;/p&gt;


&lt;pre&gt;##__job1__
5,35 0-23/2 * * * echo 'hello world'&lt;/pre&gt;

One shortcoming of &lt;strong&gt;cronedit&lt;/strong&gt; is that it doesn&amp;#8217;t provide a mechanism for adding environment variables (eg. &lt;span class="caps"&gt;PATH&lt;/span&gt;). So either take the hit, and add &lt;span class="caps"&gt;PATH&lt;/span&gt; manually, or take another approach, perhaps something like:
&lt;code class="ruby"&gt;&lt;pre&gt;current = %x(crontab -l -u app_user)    
%x(echo "PATH=/usr/bin:/usr/local/bin\n#{cron}" | crontab -)
&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;or more robustly &amp;#8211; check first whether it is there already.&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;def update_cron_environment(user, key,value)
  cron = %x(crontab -l -u #{user})
  pattern = Regexp.new("^#{key}.*")
  if cron =~ pattern
    cron.gsub!(pattern, "#{key}=#{value}" 
  else
   cron = "#{key}=#{value}\n#{cron}" 
  %x(echo "#{cron}" | crontab -)
end&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;This gives a toolbox to automate editing my crontabs. But what about&amp;#8230;.&lt;/p&gt;


	&lt;h2&gt;Something Simpler&lt;/h2&gt;


	&lt;p&gt;I&amp;#8217;m deploying a rails application, it&amp;#8217;s running as a user, used for no other purposes. This works for me.&lt;/p&gt;


	&lt;p&gt;Keep a file in source control with the app, and on deploy overwrite the current crontab, with the latest version, included with the app. With a crontab file in &lt;em&gt;&lt;span class="caps"&gt;RAILS&lt;/span&gt;_ROOT/config/crontab.txt&lt;/em&gt; we can add a simple &lt;a href="http://www.capify.org/"&gt;capistrano&lt;/a&gt; task to update the crontab on every deploy.&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;
namespace :cron do
  task :update do
    run "cat #{release_path}/config/crontab.txt | crontab -" 
  end
end
after "deploy:symlink", "cron:update"&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;If you really can&amp;#8217;t stand the crontab syntax, you could combine use this approach, in combination with &lt;a href="http://github.com/scrooloose/crondle/tree/master"&gt;crondle&lt;/a&gt;, a dsl for cron.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=qCVYwSbe"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=W9ru4RbW"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=W9ru4RbW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=PRwm1jFx"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=PRwm1jFx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=1ixLUNWF"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=1ixLUNWF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=gMIFYjrU"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/64</id>
    <published>2008-09-10T21:44:12+01:00</published>
    <updated>2008-09-10T21:44:12+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/9/10/muffin-top-css-avoiding-horizontal-foldover" />
    <title>Muffin top CSS : avoiding horizontal foldover</title>
    <content type="html">&lt;p&gt;Put overly tight trousers on someone with a belly and you get &lt;a href="http://en.wikipedia.org/wiki/Muffin_top"&gt;Muffin Top&lt;/a&gt;. Put vertical scrollbars on some (but not all) pages of a website &amp;#8211; you get a similar effect.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://blog.peelmeagrape.net/assets/2008/9/10/muffin.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://visualsonline.cancer.gov/details.cfm?imageid=2609"&gt;Image courtesy of National Cancer Institute&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Some browsers hide the vertical scrollbar when a page isn&amp;#8217;t longer than the screen. When you move between tall and short pages the page moves position underneath your mouse &amp;#8211; links you may have been hovering on, (or avoiding) are now shifted sideways by about 10 pixels. Your eye has to follow &amp;#8211; curves follow easier than foldovers.&lt;/p&gt;


	&lt;p&gt;A simple bit of &lt;span class="caps"&gt;CSS&lt;/span&gt; will trick some browsers to show a scrollbar all of the time.&lt;/p&gt;


&lt;code class="css"&gt;&lt;pre&gt;html {
  height:100%;
  margin-bottom:1px;
}&lt;/pre&gt;&lt;/code&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=hddMBGpP"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=9PGEispv"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=9PGEispv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=iwUG0uH7"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=iwUG0uH7" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Yuc17JZp"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Yuc17JZp" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=ButizyQO"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/60</id>
    <published>2008-08-30T12:46:42+01:00</published>
    <updated>2008-08-30T12:50:02+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/8/30/time-ago-in-words-javascript-part-2" />
    <title>time_ago_in_words javascript part 2</title>
    <content type="html">&lt;p&gt;As a follow up to my post about &lt;a href="http://blog.peelmeagrape.net/2008/7/26/time-ago-in-words-javascript-part-1"&gt;converting a date to words&lt;/a&gt; like 5 hours ago, using javascript.&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s how you can use it.&lt;/p&gt;


	&lt;p&gt;Markup your dates something like this.&lt;/p&gt;


&lt;code class="html"&gt;&lt;pre&gt;&amp;lt;span class="gmttime" title="Aug, 29 2008 22:44:41 GMT"&amp;gt;29th Aug 2008&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Then at bottom of your document add this script&lt;/p&gt;


&lt;code class="html"&gt;&lt;pre&gt;&amp;lt;script&amp;gt;TimeInWordsHelper.convertBySelector('.gmttime');&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;and viola &amp;#8211; your span will be converted to something like:&lt;/p&gt;


&lt;code class="html"&gt;&lt;pre&gt;&amp;lt;span class="gmttime" title="29th Aug 2008"&amp;gt;2 days ago&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Here&amp;#8217;s an &lt;a href="http://blog.peelmeagrape.net/assets/2008/8/30/time_in_words_example.html"&gt;example&lt;/a&gt;, some &lt;a href="http://blog.peelmeagrape.net/assets/2008/8/30/distanceOfTimeInWords.html"&gt;tests&lt;/a&gt; and the &lt;a href="http://gist.github.com/8105"&gt;source for you to reuse/fork&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Some things to think about:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;consider this as overkill/inappropriate &amp;#8211; and just use plain dates! Less is more&amp;#8230;&lt;/li&gt;
		&lt;li&gt;restrict how far in the past you convert dates. 2 minutes ago is useful, perhaps when it&amp;#8217;s months ago, knowing the specific date is more valuable.&lt;/li&gt;
		&lt;li&gt;convert the date in a different way, eg 99designs &amp;#8211; &lt;strong&gt;5 days, 4 hours&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;use a &lt;a href="http://www.prototypejs.org/api/periodicalExecuter"&gt;PeriodicalExecutor&lt;/a&gt; to re refresh the dates, useful on an interface that keeps user on the same view for a long time.&lt;/li&gt;
		&lt;li&gt;when dates are converted they will take up a different amount of space on the screen &amp;#8211; avoid your layout changing drastically by careful use of css.&lt;/li&gt;
		&lt;li&gt;avoid flickering as dates get converted, perhaps keep them hidden until converted, or use effects to make a smoother transition&lt;/li&gt;
	&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=MDFj4FoD"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=nHVtfrTA"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=nHVtfrTA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=pABcpzEY"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=pABcpzEY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=Y719ibHE"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=Y719ibHE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=weD800tx"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/62</id>
    <published>2008-08-22T16:05:40+01:00</published>
    <updated>2008-08-22T16:05:40+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/8/22/google-javascript-api-location-information" />
    <title>Google javascript api location information</title>
    <content type="html">&lt;p&gt;via &lt;a href="http://paulfwalsh.com/new-geolocation-api-from-google/"&gt;Paul Walsh&lt;/a&gt; and &lt;a href="http://google-code-updates.blogspot.com/2008/08/two-new-ways-to-location-enable-your.html"&gt;Google Code Blog&lt;/a&gt; &amp;#8211; &lt;a href="http://code.google.com/apis/ajax/documentation/#ClientLocation"&gt;google.loader.ClientLocation&lt;/a&gt; tells you the city, country, region, longitude and latitude based on the IP address of the client.&lt;/p&gt;


	&lt;p&gt;The gist is:&lt;/p&gt;


&lt;pre&gt;curl -i -s http://www.google.com/jsapi | grep ClientLocation

google.loader.ClientLocation = {"latitude":53.333,"longitude":-6.249,"address":
  {"city":"Dublin","region":"Dublin City","country":"Ireland","country_code":"IE"}};&lt;/pre&gt;

	&lt;p&gt;Use &lt;em&gt;http://www.google.com/jsapi&lt;/em&gt; and you get location information for free.&lt;/p&gt;


	&lt;p&gt;Nice!.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=wqk6unSL"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=ja6KadCW"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=ja6KadCW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=bklS861e"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=bklS861e" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=qbvPJbTN"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=qbvPJbTN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=ZZBc02hV"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.peelmeagrape.net,2005:Article/61</id>
    <published>2008-08-14T18:38:27+01:00</published>
    <updated>2008-08-14T18:38:27+01:00</updated>
    <link type="text/html" rel="alternate" href="http://blog.peelmeagrape.net/2008/8/14/pre-generating-rails-404-and-500-pages-using-layouts-and-rake" />
    <title>pre-generating rails 404 and 500 pages using layouts and rake</title>
    <content type="html">&lt;p&gt;The default error pages with a rails app are quite ugly.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://blog.peelmeagrape.net/assets/2008/8/14/rails-404.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s nice to have your error pages use the same layout as your app. It&amp;#8217;s a good idea to have them as static files &amp;#8211; in case your app is catastrophically hosed. But it&amp;#8217;s also nice to use your app layouts, so that you&amp;#8217;re not manually editing your error pages.&lt;/p&gt;


	&lt;p&gt;I pretty much followed &lt;a href="http://stateofflux.com/2008/7/14/generate-static-pages-in-rails"&gt;this guys approach&lt;/a&gt; using rake to pre-generate the pages. I made small changes so that the task works without work without having to change routes or add a controller to my app.&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;task :generate_static_pages =&amp;gt; :environment do
  class PreGenerateController &amp;lt; ApplicationController
    def show
      render :action =&amp;gt; params[:id]
    end
  end
  require 'action_controller/integration'
  ActionController::Routing::Routes.add_route 'pre_generate/:id', 
                                 :controller =&amp;gt; 'pre_generate', :action =&amp;gt; 'show'
  app = ActionController::Integration::Session.new
  ['404', '500'].each do |action|
    app.get "/pre_generate/#{action}" 
    File.open("public/#{action}.html", "w") { |f| f.write app.response.body }
  end
end&lt;/pre&gt;&lt;/code&gt; 

	&lt;p&gt;and I added this to my cap &lt;em&gt;deploy.rb&lt;/em&gt;&lt;/p&gt;


&lt;code class="ruby"&gt;&lt;pre&gt;
namespace :deploy do
  task :generate_static_pages do
    invoke_command "cd #{release_path} &amp;#38;&amp;#38; rake generate_static_pages RAILS_ENV=#{rails_env}" 
  end
end

after "deploy:finalize_update", "deploy:generate_static_pages" 
&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Using &lt;a href="http://apidock.com/rails/ActionController/IntegrationTest"&gt;rails integration testing library&lt;/a&gt; does seem like the most convenient, in this way I can generate the page without starting http server.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=7U8ChKqE"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=DImq5xAG"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=DImq5xAG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=E77uVEOI"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=E77uVEOI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=QFmlHfGi"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?i=QFmlHfGi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/peelmeagrape?a=QlSp8bSJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/peelmeagrape?d=129" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <author>
      <name>darragh</name>
    </author>
  </entry>
</feed>
