<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Shiny happy people coding</title>
    <link>http://blog.shingara.fr</link>
    
    <language>fr-fr</language>
    <ttl>40</ttl>
    <description>codons avec le sourire</description>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ProgDreamShiny" /><feedburner:info uri="progdreamshiny" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Pourquoi Ruby et Ruby On Rails dans le développement d'application web ?</title>
      <description>&lt;p&gt;Cette question a été posée dernièrement sur la Mailling List de RailsFrance. Effectivement, si on veut promouvoir Ruby dans le monde informatique français, il faut pouvoir argumenter pourquoi on trouve que c'est une bonne idée.
&lt;/p&gt;

&lt;p&gt;
Tout le monde est en droit de se poser la question. Voici donc, pour moi, l'avantage de Ruby par rapport aux autres technologies à l'heure actuelle.
&lt;/p&gt;

&lt;h4&gt;Ruby c'est fun&lt;/h4&gt;

&lt;p&gt;
Matz, quand il a créé Ruby, a voulu faire un langage fun avec lequel il pourrait s'amuser à coder. Aujourd'hui tous les développeurs Ruby diront à peu près la même chose. Coder en Ruby est plaisant. L'avantage de ce point est qu'un développeur Ruby est plus détendu. Un développeur détendu est un développeur plus heureux. Un développeur plus heureux est motivant pour une équipe. Un développeur heureux essayera de faire son travail proprement. L'ambiance d'une équipe de développeur Ruby peut ainsi être agréable. Moins de stress sur un projet, c'est un projet qui part avec un peu plus de chances de réussir.
&lt;/p&gt;

&lt;h4&gt;Ruby aime les tests&lt;/h4&gt;

&lt;p&gt;
La communauté Ruby actuelle est convaincue de l'utilité des tests unitaires. Ainsi, chaque librairie est poussée par la communauté à avoir des tests. Beaucoup de développeurs, moi y compris, privilégierons une librairie avec des tests unitaires plutôt qu'une sans aucun tests.
&lt;/p&gt;
&lt;p&gt;
Cette philosophie permet d'avoir un environnement de développement de test simplifié directement dans Rails. Pas besoin de se prendre la tête pour faire des tests. Si vous ne faites pas de tests de base : soit vous ne voulez pas en faire, ce que je ne recommande pas, soit vous le faites exprès.
&lt;/p&gt;


&lt;h4&gt;Ruby aime le cloud&lt;/h4&gt;

&lt;p&gt;
En ce moment, l'évolution logique du net est le Cloud Computing. L'idée du Cloud Computing est simple. Nos sites internet ne sont plus hébergés sur une seule machine. Les services sont séparés pour améliorer la scallabilité. Au sein de la communauté Ruby, les développeurs sont très attachés à cette idée. Ainsi beaucoup d'utilitaires pour gérer et utiliser son cloud commencent à voir le jour comme Chef. L'architecture même de Rails permet de facilement sortir de Ruby On Rails pour ainsi utiliser son Cloud. ActiveRessource en est la preuve.
&lt;/p&gt;
&lt;p&gt;
Mais coder dans un Cloud implique de coder plusieurs briques. Le Ruby a des bindings pour tous ces utilitaires, comme les systèmes de queues ou les bases de Données Non-Relationnelle. Je ne dis pas que les autres ne peuvent pas le faire. Mais là encore c'est un effet de groupe. Chaque développeur ruby a envie de jouer avec un Cloud. On pense de plus en plus en cloud.
&lt;/p&gt;
&lt;h4&gt;Les plugins de Rails&lt;/h4&gt;
&lt;p&gt;
Ruby On Rails possède une très grande quantité de plugins. On peut ainsi facilement trouver la petite brique que l'on cherche pour sa propre utilisation. C'est plus que l'utilisation d'un module Drupal. Car là nous sommes dans un environement facilement modifiable et sans aucune limitation. Chose que Drupal peut vite avoir.
&lt;/p&gt;

&lt;h4&gt;Les Ressources&lt;/h4&gt;
&lt;p&gt;
Le plus grand reproche que l'on fait actuellement au choix de Ruby On Rails, c'est le manque de ressources. Effectivement, les ressources de développeurs Ruby sont plus faibles que pour d'autres langages. Mais ceci est selon moi un faux problème. L'apprentissage de Ruby et Ruby On Rails est assez simple si on connait la logique Objet. Ainsi, n'importe quel développeur Java peut tout à fait se mettre à Ruby et Ruby On Rails. Donc avec un expert Ruby/Rails, on peut former facilement une équipe complète et compétente.
&lt;/p&gt;

&lt;p&gt;Cet argumentaire n'engage bien sûr que moi et peut donc être sujet à caution.&lt;/p&gt;

</description>
      <pubDate>Wed, 27 Jan 2010 23:47:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:c997485e-3ab6-409c-9b17-9ce1f34f3e5f</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/pourquoi-ruby-et-ruby-on-rails-dans-le-developpement-dapplication-web.html#comments</comments>
      <category>ruby</category>
      <category>Informatique</category>
      <category>ruby</category>
      <category>ruby_on_rails</category>
      <category>question</category>
      <category>pourquoi</category>
      <category>ressource</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/Xo6ORHNvUsY/pourquoi-ruby-et-ruby-on-rails-dans-le-developpement-dapplication-web.html</link>
    <feedburner:origLink>http://blog.shingara.fr/pourquoi-ruby-et-ruby-on-rails-dans-le-developpement-dapplication-web.html</feedburner:origLink></item>
    <item>
      <title>Que cherche un développeur dans une offre d'emploi ?</title>
      <description>&lt;p&gt;On m'a posé dernièrement cette question. Ça peut sembler bête au premier abord, mais après quelques secondes de réflexion on se rappelle que toutes les offres d'emplois sont pleines d'interrogation.&lt;/p&gt;

&lt;h4&gt;Donc qu'est ce que j'attends dans une offre d'emploi ?&lt;/h4&gt;

&lt;ul&gt;

&lt;li&gt;Le nom de l'entreprise :&lt;br/&gt;
&lt;p&gt;Le nom de l'entreprise est toujours pratique ne serait-ce que pour zapper l'annonce si on aime pas cette entreprise. Ou alors rigoler encore plus en lisant l'offre d'emploi.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;Le cœur de métier de l'entreprise :&lt;br/&gt;
&lt;p&gt;C'est toujours agréable de savoir si on va travailler pour une entreprise qui fait du beurre ou des sites Web. On peut ainsi éviter certains entretiens inutiles.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;Le nombre de développeurs dans l'entreprise :&lt;br /&gt;
&lt;p&gt;C'est une question plutôt inhabituelle pour un recruteur, mais avoir cette information permet de savoir tout de suite si on sera le geek dans son coin qui sera interrompu pour faire de l'assistance Words alors qu'il n'a plus touché à un windows depuis 3 ans. Au contraire, si on voit qu'il y a une majorité de développeurs, on pourra se dire que ça sera la fête aux trolls. Un développeur aime les Trolls \o/.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;Les personnes connues :&lt;br /&gt;
&lt;p&gt;Comme dans tous métiers, on connaît certaines personnes de réputation. Cela peut facilement aider un développeur à choisir cette offre d'emploi si une personne connue y est. En revanche, c'est aussi à double tranchant. Certains feront l'entretien juste pour voir cette personne. D'autres zapperont encore plus l'offre d'emploi à cause de cette même personne.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;L'environnement de travail :&lt;br /&gt;
&lt;p&gt;L'OS utilisé en majorité par les développeurs de la société peut être un très bon indicateur parfois. Typiquement chez AF83 où je travaille encore en ce moment, tous les développeurs sont sous UNIX, soit GNU/Linux, soit MacOSX. Pour beaucoup, cela prouve la qualité des développeurs. Et là encore la guerre aux trolls pourra facilement être ouverte.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;La contribution Open source possible et faite par l'entreprise :&lt;br /&gt;
&lt;p&gt;Avoir du temps pour faire de l'Open Source selon notre désir est un plus non négligeable selon moi. J'ai énormément de projets open source en cours que je fais en parallèle de mon emploi, mais si je pouvais les faire aussi durant une partie de celui-ci, je serais vraiment heureux. Ensuite le fait que la société produise du code Open Source, peut facilement permettre au développeur de jauger de la qualité du code de cette société. En effet, pourquoi est-ce toujours la société qui doit vérifier le code de ses futurs employés ?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selon, moi ces 6 points ne sont hélas pas toujours renseignés dans une offre d'emploi et cela serait un plus non négligeable.&lt;/p&gt;


</description>
      <pubDate>Sat, 23 Jan 2010 11:40:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:b9bc22ba-25ce-4436-8785-5e69f273c40f</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/que-cherche-un-developpeur-dans-une-offre-demploi.html#comments</comments>
      <category>Informatique</category>
      <category>question</category>
      <category>offre</category>
      <category>d</category>
      <category>emploi</category>
      <category>voir</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/TNAicoPo91A/que-cherche-un-developpeur-dans-une-offre-demploi.html</link>
    <feedburner:origLink>http://blog.shingara.fr/que-cherche-un-developpeur-dans-une-offre-demploi.html</feedburner:origLink></item>
    <item>
      <title>Sortie de Typo 5.4.0</title>
      <description>&lt;p&gt;Ça y est, une nouvelle version de &lt;a href="http://typosphere.org"&gt;Typo&lt;/a&gt; est lancée dans la nature. Je n'ai
hélas que très peu participé à cette nouvelle version faute de
motivation/temps. Mais je suis toujours très content de voir une nouvelle
version de ce blog sortir.&lt;/p&gt;

&lt;p&gt;A chaque release, une nouvelle admin fait son apparition, mais à chaque
fois elle est meilleure que la précédente, donc c'est une excellente chose.&lt;/p&gt;

&lt;p&gt;J'ai bien-sûr mis à jour ce blog et j'ai aussi switché sur le nouveau thème
par défaut. Je suis toujours aussi nul en design.&lt;/p&gt;

&lt;p&gt;En petit cadeau, voici mon fichier &lt;a href="http://capify.org/"&gt;capistrano&lt;/a&gt; que j'utilise pour déployer
ce blog. Ça peux toujours vous servir. On ne sait jamais.&lt;/p&gt;

&lt;div class="CodeRay"&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class="CodeRay"&gt;set &lt;span class="sy"&gt;:application&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;typo&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class="sy"&gt;:repository&lt;/span&gt;,  &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;git://github.com/fdv/typo.git&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class="sy"&gt;:domain&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;blog.shingara.fr&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class="c"&gt;# If you aren't deploying to /u/apps/#{application} on the target&lt;/span&gt;
&lt;span class="c"&gt;# # servers (which is the default), you can specify the actual location&lt;/span&gt;
&lt;span class="c"&gt;# # via the :deploy_to variable:&lt;/span&gt;
set &lt;span class="sy"&gt;:deploy_to&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/var/rails/blog-typo&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# # If you aren't using Subversion to manage your source code, specify&lt;/span&gt;
&lt;span class="c"&gt;# # your SCM below:&lt;/span&gt;
set &lt;span class="sy"&gt;:scm&lt;/span&gt;, &lt;span class="sy"&gt;:git&lt;/span&gt;

set &lt;span class="sy"&gt;:runner&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;rails&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class="sy"&gt;:user&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;rails&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class="sy"&gt;:use_sudo&lt;/span&gt;, &lt;span class="pc"&gt;false&lt;/span&gt;

set &lt;span class="sy"&gt;:thin_conf&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/etc/thin/&lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;domain&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;.yml&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

role &lt;span class="sy"&gt;:app&lt;/span&gt;, domain
role &lt;span class="sy"&gt;:web&lt;/span&gt;, domain
role &lt;span class="sy"&gt;:db&lt;/span&gt;,  domain, &lt;span class="sy"&gt;:primary&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;true&lt;/span&gt;

task &lt;span class="sy"&gt;:update_config&lt;/span&gt;, &lt;span class="sy"&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:app&lt;/span&gt;] &lt;span class="r"&gt;do&lt;/span&gt;
  run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;cp -Rf &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;shared_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;/config/* &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;release_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;/config/&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;ln -s &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;shared_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;/files &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;release_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;/public/files&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="r"&gt;end&lt;/span&gt;

task &lt;span class="sy"&gt;:update_gems&lt;/span&gt;, &lt;span class="sy"&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:app&lt;/span&gt;] &lt;span class="r"&gt;do&lt;/span&gt;
  run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;cd &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;release_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; &amp;amp;&amp;amp; RAILS_ENV=production rake gems:install&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="r"&gt;end&lt;/span&gt;


after &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;deploy:update_code&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:update_config&lt;/span&gt;
after &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;deploy:update_code&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:update_gems&lt;/span&gt;


namespace &lt;span class="sy"&gt;:deploy&lt;/span&gt; &lt;span class="r"&gt;do&lt;/span&gt;
  task &lt;span class="sy"&gt;:start&lt;/span&gt;, &lt;span class="sy"&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:app&lt;/span&gt;] &lt;span class="r"&gt;do&lt;/span&gt;
    run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;thin -C &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;thin_conf&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; start&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class="r"&gt;end&lt;/span&gt;

  task &lt;span class="sy"&gt;:stop&lt;/span&gt;, &lt;span class="sy"&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:app&lt;/span&gt;] &lt;span class="r"&gt;do&lt;/span&gt;
    run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;thin -C &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;thin_conf&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; stop&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class="r"&gt;end&lt;/span&gt;

  task &lt;span class="sy"&gt;:restart&lt;/span&gt;, &lt;span class="sy"&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:app&lt;/span&gt;] &lt;span class="r"&gt;do&lt;/span&gt;
    run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;thin -C &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;thin_conf&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; restart&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class="r"&gt;end&lt;/span&gt;
&lt;span class="r"&gt;end&lt;/span&gt;

task &lt;span class="sy"&gt;:clear_cache&lt;/span&gt;, &lt;span class="sy"&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:app&lt;/span&gt;] &lt;span class="r"&gt;do&lt;/span&gt;
  run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;cd &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;current_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; &amp;amp;&amp;amp; RAILS_ENV=production rake sweep_cache&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  run &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;cd &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;current_path&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; &amp;amp;&amp;amp; RAILS_ENV=production rake tmp:cache:clear&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="r"&gt;end&lt;/span&gt;

after &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;deploy:restart&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:clear_cache&lt;/span&gt;
after &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;deploy:start&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:clear_cache&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blog.shingara.fr/en/2009-12-21-typo-5-4-0-released.html"&gt;English Translation&lt;/a&gt;&lt;/p&gt;

</description>
      <pubDate>Mon, 21 Dec 2009 21:30:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2f6dab7d-7ba7-4f68-8f63-cc5f98284c72</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/sortie-de-typo-5-4-0.html#comments</comments>
      <category>ruby</category>
      <category>release</category>
      <category>ruby_on_rails</category>
      <category>annonce</category>
      <category>typo</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/QCdm6fB5QAs/sortie-de-typo-5-4-0.html</link>
    <feedburner:origLink>http://blog.shingara.fr/sortie-de-typo-5-4-0.html</feedburner:origLink></item>
    <item>
      <title>Sortie de Oupsnow 0.4.0</title>
      <description>&lt;p&gt;Ca y est, Oupsnow 0.4.0 est enfin sorti. Cette version est un refactoring quasiment complet. Après avoir eu une version 0.3.0 en Merb/DataMapper, cette version est désormais en Rails/MongoDB. Le back-end et le serveur ont changé.&lt;/p&gt;

&lt;p&gt;Cette nouvelle version, outre son refactoring comprend aussi l'ajout de quelques nouvelles fonctionnalités.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajout d'un filtre par Status dans la recherche de ticket&lt;/li&gt;
&lt;li&gt;Ajout de la possibilité de changer la fonction de tous les membres d'un project&lt;/li&gt;
&lt;li&gt;Ajout de la preview des tickets et commentaires sur les tickets&lt;/li&gt;
&lt;li&gt;Ajout de la visualisation de la milestone courante dans la visualisation d'un ticket&lt;/li&gt;
&lt;li&gt;Possibilité d'ordonner tous les champs de recherche dans la vue des tickets&lt;/li&gt;
&lt;li&gt;Login par l'email et plus par le pseudo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vous pouvez télécharger cette version sur &lt;a href="http://rubyforge.org/frs/?group_id=7685"&gt;rubyforge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si vous souhaitez tester cette version, une &lt;a href="http://oupsnow.shingara.fr/"&gt;version de demo de oupsnow&lt;/a&gt; est en ligne. Les login/mdp sont : admin@admin.com/oupsnow. Amusez vous bien.&lt;/p&gt;

</description>
      <pubDate>Tue, 01 Dec 2009 23:02:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2e95842f-f7d0-417c-8c09-c311db64c6e0</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/sortie-de-oupsnow-0-4-0.html#comments</comments>
      <category>ruby</category>
      <category>release</category>
      <category>ruby_on_rails</category>
      <category>annonce</category>
      <category>oupsnow</category>
      <category>mongomapper</category>
      <category>mongodb</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/7xkdfSdvz4o/sortie-de-oupsnow-0-4-0.html</link>
    <feedburner:origLink>http://blog.shingara.fr/sortie-de-oupsnow-0-4-0.html</feedburner:origLink></item>
    <item>
      <title>Comment tester devise ? réélement ?</title>
      <description>&lt;p&gt;Alors que j'ai cherché comment tester facilement &lt;a href="http://github.com/plataformatec/devise"&gt;Devise&lt;/a&gt;. J'ai indiqué une technique dans &lt;a href="http://blog.shingara.fr/devise-cest-bien-mais-il-faut-le-tester.html"&gt;mon précédent post&lt;/a&gt;. Mais cette technique est loin d'être la meilleure. Voici donc la nouvelle solution, la solution officielle.&lt;/p&gt;

&lt;p&gt;Il suffit d'inclure &lt;code&gt;Devise::TestHelpers&lt;/code&gt;. Ensuite pour se logger avec un utilisateur, on utilise la méthode &lt;code&gt;sign_in&lt;/code&gt;. La méthode &lt;code&gt;sign_out&lt;/code&gt; existe aussi.&lt;/p&gt;

</description>
      <pubDate>Mon, 30 Nov 2009 22:58:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:dc4a0217-abc3-4fe4-89d7-8d11438f2cc4</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/comment-tester-devise-reelement.html#comments</comments>
      <category>ruby</category>
      <category>ruby_on_rails</category>
      <category>test</category>
      <category>devise</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/9tyFg3tK8Nk/comment-tester-devise-reelement.html</link>
    <feedburner:origLink>http://blog.shingara.fr/comment-tester-devise-reelement.html</feedburner:origLink></item>
    <item>
      <title>Devise ? c'est bien, mais il faut le tester.</title>
      <description>&lt;p&gt;Alors que j'ai évoqué ma &lt;a href="http://blog.shingara.fr/oupsnow-de-merb-i-rails.html"&gt;migration de Merb à Rails pour
Oupsnow&lt;/a&gt;, il a
fallu trouver un système d'authentification ORM Agnostique.&lt;/p&gt;

&lt;p&gt;Le plugin d'authentification le plus connu à l'heure actuel est &lt;a
href="http://rdoc.info/projects/binarylogic/authlogic"&gt;Authlogic&lt;/a&gt;.
Ce plugin est vraiment très performant, mais tous les essais de le rendre ORM
Agnostique ont été vain. C'est alors qu'au même moment, durant le &lt;a
href="http://www.railssummit.com.br/"&gt;Rails Summit 2009&lt;/a&gt;,
George Guimarães et Carlos Antonio annoncent la sortie de &lt;a
href="http://github.com/plataformatec/devise"&gt;Devise&lt;/a&gt;, un plugin Rails au
dessus de &lt;a href="http://github.com/hassox/warden"&gt;Warden&lt;/a&gt; (
Rack middleware d'authentification). C'est exactement, ce qu'il me faut, un
nouveau système d'authentification a tester et peut-être une possibilité
d'ajouter une couche d'ORM Agnostique dedans. En plus Warden étant un
RackMiddleware, je pourrais un peu tester ce que ça donne.&lt;/p&gt;

&lt;p&gt;J'installe donc Devise et commence à l'utiliser dans Oupsnow. Tout se passe
à merveille, jusqu'au moment où il faut faire les tests. Tout de suite le bât
blesse. Les tests controlleurs de Rails ne communiquent pas avec la couche Rack
qui n'est pas initialisée. On se retrouve donc avec une impossibilité de
définir si un utilisateur est loggé ou non et si oui, qui est cet
utilisateur.&lt;/p&gt;

&lt;p&gt;Après de nombreux tests et essais. J'ai fini par trouver comment faire.
Warden ajoute à la requête une variable d'environment dans la requête. On peux
y accéder par
&lt;code&gt;request.env['warden']&lt;/code&gt;. Il suffit donc de remplir cette
variable.&lt;/p&gt;

&lt;p&gt;Pour avoir un utilisateur non loggé, il faut faire :&lt;/p&gt;

&lt;div class="CodeRay"&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class="CodeRay"&gt;&lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;unlogged&lt;/span&gt;
  request.env[&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;warden&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;] = &lt;span class="co"&gt;Warden&lt;/span&gt;::&lt;span class="co"&gt;Proxy&lt;/span&gt;.new(request.env, {&lt;span class="sy"&gt;:default_strategies&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:rememberable&lt;/span&gt;, &lt;span class="sy"&gt;:authenticable&lt;/span&gt;],&lt;span class="sy"&gt;:silence_missing_strategies&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;true&lt;/span&gt;})
&lt;span class="r"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour se logger avec un utilisateur en particulier il faut faire :&lt;/p&gt;

&lt;div class="CodeRay"&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class="CodeRay"&gt;&lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;logged_as&lt;/span&gt;(user)
  proxy = &lt;span class="co"&gt;Warden&lt;/span&gt;::&lt;span class="co"&gt;Proxy&lt;/span&gt;.new(request.env, {&lt;span class="sy"&gt;:default_strategies&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:rememberable&lt;/span&gt;, &lt;span class="sy"&gt;:authenticable&lt;/span&gt;], &lt;span class="sy"&gt;:silence_missing_strategies&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;true&lt;/span&gt;})
  proxy.set_user(user, &lt;span class="sy"&gt;:store&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;true&lt;/span&gt;, &lt;span class="sy"&gt;:scope&lt;/span&gt; =&amp;gt; &lt;span class="sy"&gt;:user&lt;/span&gt;)
  request.env[&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;warden&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;] = proxy
&lt;span class="r"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Personnellement, j'aime beaucoup &lt;a href="http://github.com/plataformatec/devise"&gt;devise&lt;/a&gt;. A tel point que j'ai permis de le
rendre ORM Agnostique et compatible avec &lt;a href="http://github.com/jnunemaker/mongomapper/"&gt;MongoMapper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;EDIT du 30 Novembre 2009: la technique indiquée ici n'est pas optimum et ne marche pas avec les dernières versions de Devise. utilisez plutôt la technique décrite dans mon ticket &lt;a href="http://blog.shingara.fr/comment-tester-devise-reelement.html"&gt;Comment tester devise ? réélement ?&lt;/a&gt;&lt;/p&gt;

</description>
      <pubDate>Thu, 19 Nov 2009 23:36:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:df4d9e7c-a5f0-492d-8267-c63b21cc0866</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/devise-cest-bien-mais-il-faut-le-tester.html#comments</comments>
      <category>ruby</category>
      <category>authentification</category>
      <category>ruby_on_rails</category>
      <category>test</category>
      <category>oupsnow</category>
      <category>mongomapper</category>
      <category>devise</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/5GXIjC7tGOg/devise-cest-bien-mais-il-faut-le-tester.html</link>
    <feedburner:origLink>http://blog.shingara.fr/devise-cest-bien-mais-il-faut-le-tester.html</feedburner:origLink></item>
    <item>
      <title>Oupsnow de Merb à Rails</title>
      <description>&lt;p&gt;Dernièrement, j'ai fini par me décider de migrer &lt;a
href="http://oupsnow.rubyforge.org"&gt;Oupsnow&lt;/a&gt;, de Merb à Rails.&lt;/p&gt;

&lt;p&gt;Alors que je
finissais une migration de SQL à MongoDB, j'en entame une nouvelle. Celle-ci
beaucoup plus profonde.&lt;/p&gt;

&lt;p&gt;La raison de ma migration ?&lt;/p&gt;

&lt;p&gt;Rails 3. En
effet, depuis Décembre 2008, soit presque un an, Merb s'est figé.
Certain me diront que la communauté Merb est en train de revivre et c'est tout
à fait vrai. J'en suis même ravi. Mais Merb a pris un immense retard en
presque un an. Même si Rails n'a pas vraiment avancé dans sa version stable,
sa version Edge a elle énormément avancée.&lt;/p&gt;

&lt;p&gt;Voulant toujours tester les
nouvelles technologies en Ruby, je voudrais tester Rails 3. Mais aucun système
n'existe pour passer de Merb à Rails 3. Un rapide test m'a montré que la
différence était par contre minime entre Rails 2.3.x et Rails 3. La
migration de Rails 2.3.x à Rails 3 en sera donc d'autant plus simple.&lt;/p&gt;

&lt;p&gt;Voulant vraiment sortir une version stable le plus vite possible, j'ai
donc pris la décision de migrer Oupsnow vers Rails 2.3.x pour ensuite migrer
sur Rails 3 pour cette fois sortir une version de Oupsnow compatible Rails 3.&lt;/p&gt;

&lt;p&gt;Oupsnow devient donc un projet Rails/MongoMapper et non plus
Merb/DataMapper comme sa dernière version. Toute aide est bien-sûr la
bienvenue.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.shingara.fr/en/2009-11-19-oupsnow-from-merb-to-rails.html"&gt;English translation&lt;/a&gt;&lt;/p&gt;

</description>
      <pubDate>Wed, 18 Nov 2009 23:47:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:13f0d80d-c7a7-4bc4-8cce-30c10f527a20</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/oupsnow-de-merb-i-rails.html#comments</comments>
      <category>ruby</category>
      <category>rails</category>
      <category>migration</category>
      <category>merb</category>
      <category>oupsnow</category>
      <category>mongomapper</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/KHsXkDzlaE8/oupsnow-de-merb-i-rails.html</link>
    <feedburner:origLink>http://blog.shingara.fr/oupsnow-de-merb-i-rails.html</feedburner:origLink></item>
    <item>
      <title>RabbitMQ ne marche pas avec Mac OS ?</title>
      <description>&lt;p&gt;Il y a quelque semaine, alors que je me remettais tout simplement à l'utilisation de &lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt;, j'ai eu un gros problème. Alors qu'il faut configurer les vhost et les utilisateurs de RabbitMQ, impossible de contacter mon service rabbitMQ avec la commande &lt;code&gt;rabbitmqctl&lt;/code&gt;. Prévoyant une migration vers Mac OS Snow Leopard et n'ayant pas un besoin urgent de RabbitMQ, j'ai repoussé la recherche du problème.&lt;/p&gt;

&lt;p&gt;Mais voilà, maintenant que je suis sous Mac Os Snow Leopard, j'ai réinstaller RabbitMQ pour le réutiliser à nouveau. Et là, surprise toujours le même soucis. Après de longue recherche, je viens enfin de trouver la cause, le hostname.&lt;/p&gt;

&lt;p&gt;Que faire si votre noeud de contrôle rabbitMQ n'arrive pas à discuter avec le noeud maitre ?&lt;/p&gt;

&lt;p&gt;Très simple, faite un simple &lt;code&gt;hostname -s&lt;/code&gt; et ajouter ce hostname en concordance de l'ip 127.0.0.1 dans votre fichier &lt;code&gt;/etc/hosts&lt;/code&gt;. Ça y est tout fonctionne. C'est parfois tellement simple la résolution d'un problème.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.shingara.fr/en/2009-11-18-rabbitmq-doesn-t-works-with-macosx.html"&gt;English translation&lt;/a&gt;&lt;/p&gt;

</description>
      <pubDate>Wed, 04 Nov 2009 22:53:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:93d7448b-3625-429f-bd85-0823683ba781</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/rabbitmq-ne-marche-pas-avec-mac-os.html#comments</comments>
      <category>Informatique</category>
      <category>rabbitmq</category>
      <category>mac</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/mGiu8AxhnRg/rabbitmq-ne-marche-pas-avec-mac-os.html</link>
    <feedburner:origLink>http://blog.shingara.fr/rabbitmq-ne-marche-pas-avec-mac-os.html</feedburner:origLink></item>
    <item>
      <title>Le logger ruby avec son bloc</title>
      <description>&lt;p&gt;Alors que je m'amusais à étendre le Logger de base de Ruby, j'ai découvert que l'on pouvait utiliser le Logger comme ci-dessous :&lt;/p&gt;

&lt;div class="CodeRay"&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class="CodeRay"&gt;&lt;span class="co"&gt;Logger&lt;/span&gt;.debug { &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;My object is &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;&lt;span class="pc"&gt;self&lt;/span&gt;.map(&amp;amp;&lt;span class="sy"&gt;:id&lt;/span&gt;)&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; }&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Par défaut, on l'utilise en fournissant une string en paramètre comme ceci : &lt;code&gt;Logger.debug("My object is #{self.map(&amp;:id)}")&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;La différence entre ces deux écritures ?&lt;/p&gt;

&lt;p&gt;La première permet d'éviter d'évaluer la chaine qui sera loggé si elle n'en a pas besoin. Contrairement à la deuxième qui sera toujours évaluée même si vous ne la loggez pas. Ainsi le temps de traitement pourrais s'en faire ressentir.&lt;/p&gt;

&lt;p&gt;Grâce à ça, on peux facilement éviter les fameux :&lt;/p&gt;

&lt;div class="CodeRay"&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class="CodeRay"&gt;&lt;span class="co"&gt;Logger&lt;/span&gt;.debug(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;My object is &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;&lt;span class="pc"&gt;self&lt;/span&gt;.map(&amp;amp;&lt;span class="sy"&gt;:id&lt;/span&gt;)&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class="r"&gt;if&lt;/span&gt; &lt;span class="co"&gt;Logger&lt;/span&gt;.level == &lt;span class="co"&gt;Logger&lt;/span&gt;::&lt;span class="co"&gt;DEBUG&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En effet, ce genre de code est très fréquent en Java, pour gagner un petit peu en performance sans perdre ses logs.&lt;/p&gt;

</description>
      <pubDate>Wed, 21 Oct 2009 23:08:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:e9403a43-7d1a-4927-9660-19bb38ecb1cf</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/le-logger-ruby-avec-son-bloc.html#comments</comments>
      <category>ruby</category>
      <category>Informatique</category>
      <category>Java</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/hGCblRTdWM4/le-logger-ruby-avec-son-bloc.html</link>
    <feedburner:origLink>http://blog.shingara.fr/le-logger-ruby-avec-son-bloc.html</feedburner:origLink></item>
    <item>
      <title>Pourquoi Rspec au lieu de Test::Unit?</title>
      <description>&lt;p&gt;Dernièrement, on m'a posé la question toute bête :&lt;/p&gt;

 &lt;p&gt;&lt;strong&gt;Pourquoi Rspec au lieu de Test::Unit ?&lt;/strong&gt;

 &lt;p&gt;C'est vrai que je suis un adepte de &lt;a href="http://rspec.info/"&gt;Rspec&lt;/a&gt; et que je n'utilise que ça si c'est possible. mais je
 n'ai jamais expliqué ici clairement ce qui me pousse dans ce choix. Donc
 voici un résumé très bref de mon choix.&lt;/p&gt;

 &lt;h2&gt;Les formateurs&lt;/h2&gt;

&lt;p&gt;
 Une des options méconnues de Rspec est la possibilité de définir son formateur.
 Il existe ainsi plusieurs formateurs base. On peux ainsi avoir un retour
 direct sous format HTML ou text avec les points ( classique avec Test::Unit).
 Mais certain formateur peuvent aussi calculer le temps que dure un exemple.
 Ainsi nous avons une facilité de détection des test les plus lent pour les
 refactorer et essayer d'améliorer le temps de réalisation de ses tests. Dans ce sens, j'ai moi même créer mon &lt;a href="http://github.com/shingara/rspec-formatter"&gt;propre formateur Rspec&lt;/a&gt;.
&lt;/p&gt;

 &lt;h2&gt;Les tests partagés&lt;/h2&gt;

&lt;p&gt;
Rspec dispose d'une possibilité sous estimés, les tests partagés. En effet, on peux définir
 certain jeux de test comme "partageable" on a ainsi la possibilité de les
 incorporer facilement dans divers tests. C'est une fonction vraiment pratique
 dans le cadre de test fonctionnel principalement. Plus besoin de
 copier/coller son code. :)
&lt;/p&gt;

&lt;h2&gt;Compatibilité Test::Unit&lt;/h2&gt;

&lt;p&gt;Le passage a Rspec est assez aisé de part sa compatibilité avec Test::Unit. En effet, si vous n'êtes pas familier ou que vous n'aimez pas la formalation &lt;code&gt;my_array.should be_empty&lt;/code&gt;, rien ne vous y oblige. Vous pouvez tout à fait utiliser la syntaxe Test::Unit &lt;code&gt;assert my_array.empty?&lt;/code&gt;. La migration s'en trouve très largement aisée.&lt;/p&gt;

</description>
      <pubDate>Sun, 04 Oct 2009 22:59:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:b672998f-a05b-4cae-ac54-f6f9fb9accc9</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/pourquoi-rspec-au-lieu-de-test-unit.html#comments</comments>
      <category>ruby</category>
      <category>ruby</category>
      <category>rspec</category>
      <category>test</category>
      <category>comparaison</category>
      <category>unit</category>
      <link>http://feedproxy.google.com/~r/ProgDreamShiny/~3/_DryZZLgh9o/pourquoi-rspec-au-lieu-de-test-unit.html</link>
    <feedburner:origLink>http://blog.shingara.fr/pourquoi-rspec-au-lieu-de-test-unit.html</feedburner:origLink></item>
  </channel>
</rss>
