<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>EggsOnBread</title>
	
	<link>http://eggsonbread.com</link>
	<description>Simple and delicious.</description>
	<lastBuildDate>Tue, 15 May 2012 18:13:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/EggsOnBread" /><feedburner:info uri="eggsonbread" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Disable / Enable Nagios notifications from command line</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/o4WDUxtI9gk/</link>
		<comments>http://eggsonbread.com/2011/03/18/disable-enable-nagios-notifications-via-command-line-curl/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 22:55:30 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=423</guid>
		<description><![CDATA[Your a lazy devops, you want to deploy your application in one click BUT you don&#8217;t want Nagios to send alerts while you&#8217;re deploying. Solution: disable Nagios notifications while deploying. Disable Nagios Notifications: curl -d "cmd_mod=2&#038;cmd_typ=11" "http://NAGIOS_HOST/cgi-bin/nagios3/cmd.cgi" -u "USERNAME:PASSWORD" Re-Enable Nagios Notifications: curl -d "cmd_mod=2&#038;cmd_typ=12" "http://NAGIOS_HOST/cgi-bin/nagios3/cmd.cgi" -u "USERNAME:PASSWORD"]]></description>
			<content:encoded><![CDATA[<p>Your a lazy devops, you want to deploy your application in one click BUT you don&#8217;t want Nagios to send alerts while you&#8217;re deploying. Solution: disable Nagios notifications while deploying.</p>
<ul>
<li>
Disable Nagios Notifications:<br />
<code><br />
curl -d "cmd_mod=2&#038;cmd_typ=11" "http://NAGIOS_HOST/cgi-bin/nagios3/cmd.cgi" -u "USERNAME:PASSWORD"<br />
</code><br/>
</li>
<li>
Re-Enable Nagios Notifications:<br />
<code><br />
curl -d "cmd_mod=2&#038;cmd_typ=12" "http://NAGIOS_HOST/cgi-bin/nagios3/cmd.cgi" -u "USERNAME:PASSWORD"<br />
</code>
</li>
</ul>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Disable+%2F+Enable+Nagios+notifications+from+command+line+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D423" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/o4WDUxtI9gk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2011/03/18/disable-enable-nagios-notifications-via-command-line-curl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2011/03/18/disable-enable-nagios-notifications-via-command-line-curl/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=disable-enable-nagios-notifications-via-command-line-curl</feedburner:origLink></item>
		<item>
		<title>Siggyfeed — Share your Blog, Twitter, Flickr in your email signature</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/HRXiosY4imc/</link>
		<comments>http://eggsonbread.com/2010/10/11/siggyfeed-share-your-blog-twitter-flickr-in-your-email-signature/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 22:48:40 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=399</guid>
		<description><![CDATA[Jamie Alexander and I have just released Siggyfeed: a web service to share any feed (from your Blog, Twitter, Flickr gallery&#8230;) in your email signature. Here is a siggy for my blog eggsonbread.com: This signature will change as I add more posts to my blog. You can change the title, the number of entries, the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ca.linkedin.com/in/jamiepalexander" title="Participant at Ryerson Digital Media Zone - Founder at SiggyFeed - Founder and Chief Architect at Dub Selector - Founder at Whatimwear.in">Jamie Alexander</a> and I have just released <a href="http://siggyfeed.com">Siggyfeed</a>: a web service to share any feed (from your Blog, Twitter, Flickr gallery&#8230;) in your email signature.</p>
<p>Here is a siggy for my blog <a href="http://eggsonbread.com">eggsonbread.com</a>:</p>
<table width='600px' style='border: none' >
<tr style='border: none'>
<td> <a href='http://t.siggyfeed.com/22/1/0'> <img alt='' src='http://i.siggyfeed.com/22/1/0.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/22/1/1'> <img alt='' src='http://i.siggyfeed.com/22/1/1.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/22/1/2'> <img alt='' src='http://i.siggyfeed.com/22/1/2.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/22/1/3'> <img alt='' src='http://i.siggyfeed.com/22/1/3.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/22/1/4'> <img alt='' src='http://i.siggyfeed.com/22/1/4.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/22/1/5'> <img alt='' src='http://i.siggyfeed.com/22/1/5.png' style='border: none' /> </a> </td>
</tr>
</table>
<p>This signature will change as I add more posts to my blog. You can change the title, the number of entries, the source to display and these changes will be reflected on your siggy right away. Each line is clickable and goes right to the blog post it displays.</p>
<p>You can also share pictures:</p>
<table width='600px' style='border: none'>
<tr style='border: none'>
<td> <a href='http://t.siggyfeed.com/19/1/0'> <img alt='' src='http://i.siggyfeed.com/19/1/0.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/19/1/1'> <img alt='' src='http://i.siggyfeed.com/19/1/1.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/19/1/2'> <img alt='' src='http://i.siggyfeed.com/19/1/2.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/19/1/3'> <img alt='' src='http://i.siggyfeed.com/19/1/3.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/19/1/4'> <img alt='' src='http://i.siggyfeed.com/19/1/4.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/19/1/5'> <img alt='' src='http://i.siggyfeed.com/19/1/5.png' style='border: none' /> </a> </td>
</tr>
</table>
<p>There pictures are from my Flickr gallery but any feed containing pictures will work! For instance here are my latest videos on Vimeo:</p>
<table width='600px' style='border: none'>
<tr style='border: none'>
<td> <a href='http://t.siggyfeed.com/21/1/0'> <img alt='' src='http://i.siggyfeed.com/21/1/0.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/21/1/1'> <img alt='' src='http://i.siggyfeed.com/21/1/1.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/21/1/2'> <img alt='' src='http://i.siggyfeed.com/21/1/2.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/21/1/3'> <img alt='' src='http://i.siggyfeed.com/21/1/3.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/21/1/4'> <img alt='' src='http://i.siggyfeed.com/21/1/4.png' style='border: none' /> </a> <a href='http://t.siggyfeed.com/21/1/5'> <img alt='' src='http://i.siggyfeed.com/21/1/5.png' style='border: none' /> </a> </td>
</tr>
</table>
<p>Give it a try! Go on <a href="http://siggyfeed.com">http://siggyfeed.com</a>, put the your URL of your blog / twitter / flickr / whatever, generate your siggyfeed and set the snippet of html code provided as your email signature! Easy peasy, eh!</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Siggyfeed+%E2%80%94+Share+your+Blog%2C+Twitter%2C+Flickr+in+your+email+signature+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D399" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/HRXiosY4imc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/10/11/siggyfeed-share-your-blog-twitter-flickr-in-your-email-signature/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/10/11/siggyfeed-share-your-blog-twitter-flickr-in-your-email-signature/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=siggyfeed-share-your-blog-twitter-flickr-in-your-email-signature</feedburner:origLink></item>
		<item>
		<title>(My) Cucumber best practices and tips</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/Ts5JpBkZSHU/</link>
		<comments>http://eggsonbread.com/2010/09/06/my-cucumber-best-practices-and-tips/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 04:55:21 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[best practice]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=323</guid>
		<description><![CDATA[After (My) RSpec best practices and tips, I&#8217;m happy to share my Cucumber best practices and tips! This article will help you organize, clarify and reduce the size of your cucumber scenarios. 1. Organize your garden Keep your feature files organized by grouping them by business object, then action and context if any. I put [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/">(My) RSpec best practices and tips</a>, I&#8217;m happy to share my Cucumber best practices and tips!</p>
<p>This article will help you organize, clarify and reduce the size of your cucumber scenarios.</p>
<h2>1. Organize your garden</h2>
<p>Keep your feature files organized by grouping them by business object, then action and context if any.  I put all the feature files in the same directory. For instance:</p>
<pre class="brush: plain; class-name: good; title: ; notranslate">
bank_account_add.feature
bank_account_delete.feature
user_signup.feature
user_signup_when_invited.feature
user_login.feature
</pre>
<p>The steps specific to the application should be organized by business object as well (<code>bank_account_steps.rb</code>, <code>user_steps.rb</code>&#8230;). Keep the file organized grouping the steps by <code>Given</code> / <code>When</code> / <code>Then</code>. </p>
<p>Do not overload the files generated by Cucumber like <code>step_definitions/web_steps.rb</code> and <code>support/env.rb</code> with your own steps, helpers or setup code. These files are likely to get overwritten when you update Cucumber so store your stuff in your own files.</p>
<h2>2. Custom steps make your scenario DRY and accessible</h2>
<p>Scenarios should have the same lifecyle as your code: Red, Green, <strong>Refactor</strong> to make them DRY and easy to read. </p>
<p>Group multiple steps together. For instance:</p>
<pre class="brush: ruby; class-name: bad; title: ; notranslate">
  Given I follow &quot;Send money&quot;
  When I fill in &quot;Email&quot; with &quot;mukmuk@example.com&quot;
  And I fill in &quot;Amount&quot; with &quot;10&quot;
  And I select &quot;Bank account&quot; from &quot;Source&quot;
  And I press &quot;Send&quot;
  Then I should see &quot;You've sent $10 to mukmuk@example.com&quot;
</pre>
<p>&#8230; could be refactored to:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
  Given I send &quot;$10&quot; to &quot;mukmuk@example.com&quot; from my &quot;Bank account&quot;
</pre>
<p>This step definition is the following:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
  Given %{I send &quot;$amount&quot; to &quot;$email&quot; from my &quot;$source&quot;} do |amount, email, source|
    Given %{I follow &quot;Send money&quot;}
    When %{I fill in &quot;Email&quot; with &quot;#{email}&quot;}
    And %{I fill in &quot;Amount&quot; with &quot;#{amount.delete('$')}&quot;}
    And %{I select &quot;#{source}&quot; from &quot;Source&quot;}
    And %{I press &quot;Send&quot;}
    Then %{I should see &quot;You've sent $#{amount} to #{email}&quot;}
  end
</pre>
<p>This step can then be easily reused in other scenario keeping your features DRY. It also decouples the scenario from the UI so that you won&#8217;t have to change dozens of feature files when the UX guru changes translations or user flows.</p>
<h2>3. Background: setup the DRY way</h2>
<p>Make the feature focus on one business object/action/context and the <a href="http://wiki.github.com/aslakhellesoy/cucumber/background">background</a> will get longer than the scenarios.</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
  Feature: A user can cancel a transaction unless it's claimed by the recipient

    Background:
      Given I am logged in
      And I send &quot;$10&quot; to &quot;mukmuk@example.com&quot; from my &quot;Bank account&quot;

    Scenario: I can cancel as long as the payment is not claimed
      When I cancel my latest transaction
      Then I should see a cancellation confirmation

    Scenario: I can't cancel once the payment is claimed
      Given &quot;Mukmuk&quot; claimed the latest transaction
      Then I can't cancel my latest transaction
</pre>
<h2>4. Scenario outlines: scenario with variables!</h2>
<p>A <a href="http://wiki.github.com/aslakhellesoy/cucumber/scenario-outlines">scenario outline</a> contains variables allowing you to test multiple context using a truth table. For instance I use them to make sure that validation errors are displayed properly:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
  Scenario Outline: Add invalid bank account displays inline errors
    Given I follow &quot;Add Bank Account&quot;
    When I fill in &quot;&lt;field&gt;&quot; with &quot;&lt;value&gt;&quot;
    And I press &quot;Add Bank Account&quot;
    And I should see the inline error &quot;&lt;error&gt;&quot; for &quot;&lt;field&gt;&quot;

    Examples:
      | field   | value         | error                    |
      | Account |               | Can't be blank           |
      | Account | Sixty five    | Should be 1 to 12 digits |
      | Account | 1234567890123 | Should be 1 to 12 digits |  
</pre>
<h2>5. Multi-line step arguments: give your step a table for lunch!</h2>
<p>A step can take a <a href="http://wiki.github.com/aslakhellesoy/cucumber/multiline-step-arguments">multi-line table as an argument</a>. This is a great way to load up a bunch of data or to test the rendering of lists and tables. For instance:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
  Given I sent &quot;$25&quot; to &quot;mukmuk@example.com&quot; from my &quot;Bank account&quot;
  Then I should see the following transaction history:
    | create     | complete    |
    | deposit    | in_progress |
    | transfer   | pending     |
    | withdrawal | pending     |
</pre>
<p>The step definition looks like the following:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
  Then &quot;I should see the following transaction history:&quot; do |table|
    table.raw.each do |event, state|
      page.should have_css(&quot;tr.#{event}.#{state}&quot;)
    end
  end
</pre>
<p>I hope that these tips will help you growing healthy cucumber features!</p>
<p>Want more? Check out the <a href="http://wiki.github.com/aslakhellesoy/cucumber/">Cucumber wiki</a>, <a title="15 Expert Tips for Using Cucumber - By Dave Astels on  Engine" href="http://www.engineyard.com/blog/2009/15-expert-tips-for-using-cucumber/">15 Expert Tips for Using Cucumber</a> by <a href="http://www.engineyard.com/blog/author/daveastels/">Dave Astels</a>, <a href="http://elabs.se/blog/15-you-re-cuking-it-wrong">You&#8217;re Cuking It Wrong</a> by <a title="Agile web development shop in Gothenburg, Sweden" href="http://elabs.se/">Elabs</a> and <a href="http://antonymarcano.com/blog/2010/08/youre-almost-cuking-it/">You’re almost cuking it…</a> by <a href="http://antonymarcano.com/Site/Home.html" title="Co-founder of RiverGlide and an agile software development coach, trainer, speaker and consultant.">Antony Marcano</a>. You could also like <a href="http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/">(My) RSpec best practices and tips</a>. :)</p>
<p>Happy BDD!</p>
<blockquote><p>Thanks to <a href="http://wwww.21croissants.com/" title="Développeur Senior,  Ruby, Ruby, Rails, Agile, RSpec, Cucumber, TDD, BDD, Trilingue">Jean-Michel Garnier</a> for reviewing this article.</p></blockquote>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=%28My%29+Cucumber+best+practices+and+tips+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D323" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/Ts5JpBkZSHU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/09/06/my-cucumber-best-practices-and-tips/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/09/06/my-cucumber-best-practices-and-tips/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=my-cucumber-best-practices-and-tips</feedburner:origLink></item>
		<item>
		<title>Get Integrity to play well with Rails 3 and Bundler 1.0</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/_rDmCms7Xt0/</link>
		<comments>http://eggsonbread.com/2010/08/31/get-integrity-to-play-well-with-rails-3-and-bundler-1-0/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 22:01:59 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[integrity]]></category>
		<category><![CDATA[rails 3]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=308</guid>
		<description><![CDATA[The latest &#8220;stable&#8221; version of Integrity (v22) doesn&#8217;t play well with Rails 3 (or any other application using bundler 1.0). Basically the Integrity&#8217;s Gemfile is used in place of the application&#8217;s Gemfile when running the tests. With a Rails 3 application you are likely to get: no such file to load -- rails/all A patched [...]]]></description>
			<content:encoded><![CDATA[<p>The latest &#8220;stable&#8221; version of Integrity (v22) doesn&#8217;t play well with Rails 3 (or any other application using bundler 1.0). Basically the Integrity&#8217;s Gemfile is used in place of the application&#8217;s Gemfile when running the tests.</p>
<p>With a Rails 3 application you are likely to get:
<pre>no such file to load -- rails/all</pre>
<p><img src="http://eggsonbread.com/wp-content/uploads/2010/08/integrity_fail.png" alt="Integrity fails to run with Rails 3 and Bundler 1.0" title="integrity_fail" width="480" height="275" class="alignnone size-full wp-image-312" /></p>
<p>A patched version of integrity v22 for bundler 1.0 is available on <a href="http://github.com/pcreux/integrity/tree/v22-bundler-1.0.0.rc">http://github.com/pcreux/integrity/tree/v22-bundler-1.0.0.rc</a>.</p>
<p>You also need to force your Rails application to use its Gemfile. To do so, update the file <code>/config/boot.rb</code> with the following:</p>
<pre class="brush: ruby; title: ; notranslate">
require 'rubygems'
# Set up gems listed in the Gemfile.
GEMFILE_PATH = File.expand_path('../../Gemfile', __FILE__)
if File.exist?(GEMFILE_PATH)
  # Force the rails 3 application to use its Gemfile
  ENV['BUNDLE_GEMFILE'] = GEMFILE_PATH
  require 'bundler'
  Bundler.setup
end
</pre>
<p>That should make the trick!<br />
<img src="http://eggsonbread.com/wp-content/uploads/2010/08/integrity_success.png" alt="Patched Integrity and custom boot.rb makes integrity working with Rails 3" title="integrity_success" width="480" height="132" class="alignnone size-full wp-image-313" /></p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Get+Integrity+to+play+well+with+Rails+3+and+Bundler+1.0+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D308" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/_rDmCms7Xt0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/08/31/get-integrity-to-play-well-with-rails-3-and-bundler-1-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/08/31/get-integrity-to-play-well-with-rails-3-and-bundler-1-0/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=get-integrity-to-play-well-with-rails-3-and-bundler-1-0</feedburner:origLink></item>
		<item>
		<title>Speed up RSpec with set()</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/WUEjNWkNB68/</link>
		<comments>http://eggsonbread.com/2010/05/25/speed-up-your-specs-with-set/#comments</comments>
		<pubDate>Wed, 26 May 2010 07:33:45 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=284</guid>
		<description><![CDATA[I enjoy using the let() method as it makes my specs easier to read and maintain than setting up instance variables in before(:each) blocks. The let() method can be used like this: My main concern was that the block gets evaluated everytime the method is called. In the example above, Factory(:account) will run and create [...]]]></description>
			<content:encoded><![CDATA[<p>I enjoy using the <code>let()</code> method as it makes my specs easier to read and maintain than setting up instance variables in <code>before(:each)</code> blocks. The <code>let()</code> method can be used like this:</p>
<pre class="brush: ruby; title: ; notranslate">
describe Account do
  let(:account) { Factory(:account) }

  subject { account }

  it { should be_enabled }

  context &quot;when #disable!&quot; do
    before do
      account.disable!
    end

    it { should be_disabled }
  end
end
</pre>
<p>My main concern was that the block gets evaluated everytime the method is called. In the example above, <code>Factory(:account)</code> will run and create a new record for every single spec. </p>
<p>To increase our specs performances let&#8217;s refactor this and setup the <em>account</em> in a <code>before(:all)</code> block.</p>
<pre class="brush: ruby; title: ; notranslate">
describe Account do
  before(:all) do
    @account = Factory(:account)
  end

  let(:account) { @account.reload }
  #...
end
</pre>
<p>The <em>account</em> is now setup once before the specs get run. Each spec will be run in a separate transaction to prevent side effects. The <em>account</em> will be rolled back to its initial state before each spec then. Since ActiveRecord is not aware of the rollback we reload the <em>account</em> object from the database every time it&#8217;s called.</p>
<p>Specs are now faster but I want them to be as pretty as they were. Let&#8217;s make a little helper called <code>set()</code>. </p>
<p><script src="http://gist.github.com/423097.js"> </script></p>
<p>Sweeeet! You can now write the following:</p>
<pre class="brush: ruby; title: ; notranslate">
describe Account do
  set(:account) { Factory(:account) }

  #...
end
</pre>
<p>The records created by <code>set()</code> will remain in your database. You can use <a href="http://github.com/bmabey/database_cleaner">DatabaseCleaner</a> with the <code>:truncation</code> strategy to clean up your database. So far in RSpec 2.0, <code>before(:all)</code> runs before all <em>describe/context/it</em> while <code>after(:all)</code> runs after every single <em>describe/context/it</em>. Just make sure that you call <code>DatabaseCleaner.clean</code> in a <code>before(:all)</code> or <code>after(:suite)</code> blocks then. :)</p>
<p>I hope you&#8217;ll enjoy using this little helper. It&#8217;s very young and it has been tested with RSpec 2 only, so fill free to fill up the comments with enhancements and bug reports!</p>
<p><strong>rspec-set is now available <a href='https://github.com/pcreux/rspec-set'>as a gem</a></strong></p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Speed+up+RSpec+with+set%28%29+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D284" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/WUEjNWkNB68" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/05/25/speed-up-your-specs-with-set/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/05/25/speed-up-your-specs-with-set/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=speed-up-your-specs-with-set</feedburner:origLink></item>
		<item>
		<title>Get script/runner back in Rails 3</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/5MyDDyhTGZE/</link>
		<comments>http://eggsonbread.com/2010/05/19/get-back-scriptrunner-in-rails-3-x/#comments</comments>
		<pubDate>Thu, 20 May 2010 00:19:01 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[rails 3]]></category>
		<category><![CDATA[Runner]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=278</guid>
		<description><![CDATA[EngineYard&#8217;s chef recipe for DelayedJob requires script/runner. To use this recipe with Rails 3 I&#8217;ve just made script/runner for Rails 3. Here is the code: Edit: Fix for rails 3.0]]></description>
			<content:encoded><![CDATA[<p>EngineYard&#8217;s chef recipe for DelayedJob requires <code>script/runner</code>. To use this recipe with Rails 3 I&#8217;ve just made <code>script/runner</code> for Rails 3. Here is the code:</p>
<p><script src="http://gist.github.com/407026.js?file=runner"></script></p>
<p>Edit: Fix for rails 3.0</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Get+script%2Frunner+back+in+Rails+3+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D278" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/5MyDDyhTGZE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/05/19/get-back-scriptrunner-in-rails-3-x/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/05/19/get-back-scriptrunner-in-rails-3-x/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=get-back-scriptrunner-in-rails-3-x</feedburner:origLink></item>
		<item>
		<title>(My) RSpec best practices and tips</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/51jzTwhOZak/</link>
		<comments>http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 02:21:07 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[RSpec]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=227</guid>
		<description><![CDATA[After a year using RSpec, I&#8217;m happy to share &#8220;(My) RSpec Best Practices and Tips&#8221;. Let&#8217;s make your specs easier to maintain, less verbose, more structured and covering more cases! Use shortcuts specify {}, it {} and subject {} You think RSpec is verbose? In case your code doesn&#8217;t need any description, use a specify [...]]]></description>
			<content:encoded><![CDATA[<p>After a year using RSpec, I&#8217;m happy to share &#8220;(My) RSpec Best Practices and Tips&#8221;. Let&#8217;s make your specs easier to maintain, less verbose, more structured and covering more cases!</p>
<h2>Use shortcuts <em>specify {}</em>, <em>it {}</em> and <em>subject {}</em></h2>
<p>You think RSpec is verbose? In case your code doesn&#8217;t need any description, use a <em>specify block</em>!</p>
<pre class="brush: ruby; class-name: bad; title: ; notranslate">
it &quot;should be valid&quot; do
  @user.should be_valid
end
</pre>
<p>can be replaced with</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
specify { @user.should be_valid }
</pre>
<p>RSpec will generate a nice description text for you when running this expectation. Even better, you can use the <em>it block</em>!</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
describe User do
  it { should validate_presence_of :name }
  it { should have_one :address }
end
</pre>
<p>In case the subject is the not the class described, just set it with the <em>subject</em> method:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
subject { @user.address }
it { should be_valid }
</pre>
<h2>Start context with &#8216;when&#8217;/'with&#8217; and methods description with &#8216;#&#8217;</h2>
<p>Have you ever get a failed test with an incomprehensible error message like: </p>
<pre class="brush: plain; class-name: bad; title: ; notranslate">User non confirmed confirm email wrong token should not be valid</pre>
<p>Start your <em>contexts</em> with <em>when</em> and get nice messages like: </p>
<pre class="brush: plain; class-name: good; title: ; notranslate">User when non confirmed when #confirm_email with wrong token should not be valid</pre>
<h2>Use RSpec matchers to get meaningful messages</h2>
<p>In case of failure</p>
<pre class="brush: ruby; class-name: bad; title: ; notranslate">
specify { user.valid?.should == true }
</pre>
<p> displays:</p>
<pre class="brush: plain; class-name: bad; title: ; notranslate">
'User should == true' FAILED
  expected: true,
  got: false (using ==)
</pre>
<p>While </p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
specify { user.should be_valid }
</pre>
<p>displays:</p>
<pre class="brush: plain; class-name: good; title: ; notranslate">
'User should be valid' FAILED
  expected valid? to return true, got false
</pre>
<p>Nice eh?</p>
<h2>Only one expectation per <em>it block</em></h2>
<p>I often see specs where it blocks contain several expectations. This makes your tests harder to read and maintain.</p>
<p>So instead of that&#8230;</p>
<pre class="brush: ruby; class-name: bad; title: ; notranslate">
describe DemoMan do
  it &quot;should have expected attributes&quot; do
    demo_man = DemoMan.new
    demo_man.should respond_to :name
    demo_man.should respond_to :gender
    demo_man.should respond_to :age
  end
end
</pre>
<p>&#8230; do this:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
describe DemoMan do
  before(:all) do
    @demo_man = DemoMan.new
  end

  subject { @demo_man }

  it { should respond_to :name   }
  it { should respond_to :gender }
  it { should respond_to :age    }
end
</pre>
<h2>(Over)use describe and context</h2>
<p>Big specs can be a joy to play with as long as they are ordered and DRY. Use nested <em>describe</em> and <em>context</em> blocks as much as you can, each level adding its own specificity in the before block.<br />
To check your specs are well organized, run them in &#8216;nested&#8217; mode (<code>spec spec/my_spec.rb -cf nested</code>).<br />
Using <code>before(:each)</code> in each context and describe blocks will help you set up the environment without repeating yourself. It also enables you to use <em>it {}</em> blocks.</p>
<h3>Bad:</h3>
<pre class="brush: ruby; class-name: bad; title: ; notranslate">
describe User do

  it &quot;should save when name is not empty&quot; do
    User.new(:name =&gt; 'Alex').save.should == true
  end

  it &quot;should not save when name is empty&quot; do
    User.new.save.should == false
  end

  it &quot;should not be valid when name is empty&quot; do
    User.new.should_not be_valid
  end

  it &quot;should be valid when name is not empty&quot; do
    User.new(:name =&gt; 'Alex').should be_valid
  end

  it &quot;should give the user a flower when gender is W&quot; do
    User.new(:gender =&gt; 'W').present.should be_a Flower
  end

  it &quot;should give the user a iMac when gender is M&quot; do
    User.new(:gender =&gt; 'M').present.should be_an IMac
  end
end
</pre>
<h3>Good:</h3>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
describe User do
  before { @user = User.new }

  subject { @user }

  context &quot;when name empty&quot; do
    it { should not be_valid }
    specify { @user.save.should == false }
  end

  context &quot;when name not empty&quot; do
    before { @user.name = 'Sam' }

    it { should be_valid }
    specify { @user.save.should == true }
  end

  describe :present do
    subject { @user.present }

    context &quot;when user is a W&quot; do
      before { @user.gender = 'W' }

      it { should be_a Flower }
    end

    context &quot;when user is a M&quot; do
      before { @user.gender = 'M' }

      it { should be_an IMac }
    end
  end
end
</pre>
<h2>Test Valid, Edge and Invalid cases</h2>
<p>This is called <em>Boundary value analysis</em>, it&#8217;s simple and it will help you to cover the most important cases. Just split-up method&#8217;s input or object&#8217;s attributes into valid and invalid partitions and test both of them and there boundaries. A method specification might look like that:</p>
<pre class="brush: ruby; class-name: good; title: ; notranslate">
describe &quot;#month_in_english(month_id)&quot; do
  context &quot;when valid&quot; do
    it &quot;should return 'January' for 1&quot; # lower boundary
    it &quot;should return 'March' for 3&quot;
    it &quot;should return 'December' for 12&quot; # upper boundary
  context &quot;when invalid&quot; do
    it &quot;should return nil for 0&quot;
    it &quot;should return nil for 13&quot;
  end
end
</pre>
<p>I hope this will help you improve your specs. Let me know if I missed anything! :)</p>
<p>You could also be interested in <a href="http://eggsonbread.com/2010/09/06/my-cucumber-best-practices-and-tips/">(My) Cucumber best practices and tips</a> or <a href="https://github.com/pcreux/rspec-set">rspec-set</a> a little gem that helps you speeding up your model specs.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=%28My%29+RSpec+best+practices+and+tips+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D227" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/51jzTwhOZak" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=my-rspec-best-practices-and-tips</feedburner:origLink></item>
		<item>
		<title>Migrate Rubygems to Ruby Enterprise Edition (REE)</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/FT_nzj-_lHA/</link>
		<comments>http://eggsonbread.com/2010/02/12/migrate-rubygems-to-ruby-enterprise-edition-ree/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 22:24:26 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[REE]]></category>
		<category><![CDATA[RubyGem]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=222</guid>
		<description><![CDATA[If you have a server running the default Ruby interpreter (&#8220;Matz&#8217;s Ruby Interpreter&#8221; or &#8220;Ruby MRI&#8221;) and you want to switch to Ruby Enterprise Edition (REE) the following script will help you migrating the gems. Once you have installed Ruby Enterprise Edition run this script so that REE installs the gems installed on your default [...]]]></description>
			<content:encoded><![CDATA[<p>If you have a server running the default Ruby interpreter (&#8220;Matz&#8217;s Ruby Interpreter&#8221; or &#8220;Ruby MRI&#8221;) and you want to switch to <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a> (REE) the following script will help you migrating the gems.</p>
<p>Once you have installed Ruby Enterprise Edition run this script so that REE installs the gems installed on your default ruby environment.</p>
<p><script src="http://gist.github.com/303038.js?file=migrate_rubygems_to_ruby_enterprise_edition.rb"></script></p>
<p>That&#8217;s all folks!</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Migrate+Rubygems+to+Ruby+Enterprise+Edition+%28REE%29+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D222" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/FT_nzj-_lHA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/02/12/migrate-rubygems-to-ruby-enterprise-edition-ree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/02/12/migrate-rubygems-to-ruby-enterprise-edition-ree/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=migrate-rubygems-to-ruby-enterprise-edition-ree</feedburner:origLink></item>
		<item>
		<title>Move your Ubuntu system to another computer in 3 simple steps</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/_MgWI_--ULw/</link>
		<comments>http://eggsonbread.com/2010/01/28/move-ubuntu-to-another-computer-in-3-simple-steps/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 02:13:30 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=205</guid>
		<description><![CDATA[You just got a brand new machine but you won&#8217;t like to spend hours tuning it to get the same configuration as the one you have used for years? Let&#8217;s transfer your Ubuntu configuration and applications to your new computer in three simple steps. This method is cross-architecture. I moved successfully my configuration and applications [...]]]></description>
			<content:encoded><![CDATA[<p>You just got a brand new machine but you won&#8217;t like to spend hours tuning it to get the same configuration as the one you have used for years?</p>
<p>Let&#8217;s transfer your Ubuntu configuration and applications to your new computer in three simple steps.</p>
<p>This method is cross-architecture. I moved successfully my configuration and applications from an Ubuntu 9.04 32bit to a 64bit one.</p>
<h2>Prerequisites:</h2>
<p>The same version of Ubuntu is installed on both machines. The architecture (32/64 bit) can be different.</p>
<h2>Step 1: Store the list of installed packages</h2>
<p>Run the following command on the source machine to store the installed packages names in <code>~/pkglist</code>:<br />
<code>sudo dpkg --get-selections | sed "s/.*deinstall//" | sed "s/install$//g" &gt; ~/pkglist</code></p>
<h2>Step 2: Transfer your config</h2>
<p>Use <code>scp</code> or <code>rsync</code> or even a flash drive to transfer your home directory (<code>~/*</code>, <code>~/.*</code>), the source list (<code>/etc/apt/sources.list</code>) and any other files you customized or installed (like apache config under <code>/etc</code> or softwares on <code>/opt</code>) from the source machine to the target one.</p>
<h2>Step 3: Install packages</h2>
<p>On the target machine run the following command in a failsafe terminal session to install your packages:</p>
<p><code>sudo aptitude update &amp;&amp; cat pkglist | xargs sudo aptitude install -y</code></p>
<p>That&#8217;s all folks!</p>
<p>Log into your new machine and keep working as if you were using the previous one.</p>
<p><img class="alignnone size-full wp-image-207" title="clone-ubuntu" src="http://eggsonbread.com/wp-content/uploads/2010/01/clone-ubuntu.jpg" alt="A freshly transfered Ubuntu install" width="480" height="228" /></p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Move+your+Ubuntu+system+to+another+computer+in+3+simple+steps+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D205" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/_MgWI_--ULw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2010/01/28/move-ubuntu-to-another-computer-in-3-simple-steps/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2010/01/28/move-ubuntu-to-another-computer-in-3-simple-steps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=move-ubuntu-to-another-computer-in-3-simple-steps</feedburner:origLink></item>
		<item>
		<title>Jabber-SH — SH console via XMPP/Jabber (GTalk)</title>
		<link>http://feedproxy.google.com/~r/EggsOnBread/~3/ob7NkayVpSY/</link>
		<comments>http://eggsonbread.com/2009/12/16/jabber-sh-%e2%80%94-sh-console-via-xmppjabber-gtalk/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 06:44:01 +0000</pubDate>
		<dc:creator>Philippe Creux</dc:creator>
				<category><![CDATA[EggsOnBread]]></category>
		<category><![CDATA[Project]]></category>

		<guid isPermaLink="false">http://eggsonbread.com/?p=197</guid>
		<description><![CDATA[I&#8217;ve just posted the code of Jabber-SH on GitHub. Jabber-SH is a ruby hack that allows you to administrate a remote computer via a command line through a Jabber client. It’s like SSH via GoogleTalk! :) I coded it nine month ago then I planned to add some specs, to store the configuration in a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-38" style="border: 0pt none;" title="Screenshot-Jabber-SH on GTalk" src="http://eggsonbread.com/wp-content/uploads/2009/07/Screenshot-Jabber-SSH.png" alt="Screenshot-Jabber-SH on GTalk" width="385" height="343" /></p>
<p>I&#8217;ve just posted the <a title="Jabber-SH code" href="http://gist.github.com/258561">code of Jabber-SH</a> on GitHub. Jabber-SH is a ruby hack that allows you to administrate a remote computer via a command line through a Jabber client. It’s like SSH via GoogleTalk! :)</p>
<p>I coded it nine month ago then I planned to add some specs, to store the configuration in a yaml file, to make a gem out of it but&#8230; I didn&#8217;t and I won&#8217;t get a chance to do that. So <a href="http://gist.github.com/258561">here are</a> the 25 lines of code&#8230; hackish eh?!</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Jabber-SH+%E2%80%94+SH+console+via+XMPP%2FJabber+%28GTalk%29+by+%40pcreux+http%3A%2F%2Feggsonbread.com%2F%3Fp%3D197" title="Post to Twitter"><img class="nothumb" src="http://eggsonbread.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter6.png" alt="Post to Twitter" /></a></p></div><img src="http://feeds.feedburner.com/~r/EggsOnBread/~4/ob7NkayVpSY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://eggsonbread.com/2009/12/16/jabber-sh-%e2%80%94-sh-console-via-xmppjabber-gtalk/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://eggsonbread.com/2009/12/16/jabber-sh-%e2%80%94-sh-console-via-xmppjabber-gtalk/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=jabber-sh-%25e2%2580%2594-sh-console-via-xmppjabber-gtalk</feedburner:origLink></item>
	</channel>
</rss>

