<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>tyPouypOblOg : Tag ruby, everything about ruby</title>
    <link>http://www.typouype.org/tag/ruby.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Libre, Ruby, Objet, OpenBSD, Programmation</description>
    <item>
      <title>Rails Party le 30 novembre 2008</title>
      <description>&lt;p&gt;Avec les feuilles qui tombent vient le temps de &lt;a href="http://paris.onrails.info/"&gt;ParisOnRails&lt;/a&gt; . Et cette ann&#233;e, plut&#244;t que d&amp;#8217;organiser un ap&#233;ro Ruby la veille au soir, l&amp;#8217;association &lt;a href="http://rubyfrance.org"&gt;RubyFrance&lt;/a&gt; a d&#233;cider d&amp;#8217;organiser une &lt;a href="http://rubyfrance.org/evenements/rails-party-2008/"&gt;Rails Party&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Au programme&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;L&amp;#8217;apr&#232;s-midi sera consacr&#233; &#224; des ateliers, s&#251;rement autour de &lt;a href="http://typosphere.org"&gt;Typo&lt;/a&gt;, peut-&#234;tre de &lt;a href="http://pictrails.rubyforge.org/"&gt;Pictrails&lt;/a&gt;, &lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt; et s&#251;rement bien d&amp;#8217;autres !&lt;/p&gt;


	&lt;p&gt;La soir&#233;e sera ouverte au Lightning talks (pr&#233;sentation courte d&amp;#8217;une dixaine de minutes).&lt;/p&gt;


	&lt;p&gt;L&amp;#8217;&#233;v&#232;nement se veut conviviale, c&amp;#8217;est avant tout un moyen de ce retrouver entre raillers avant les conf&#233;rences du lendemain.&lt;/p&gt;


	&lt;p&gt;Rendez-vous donc le dimanche 30 novembre 2008 de 16 heures &#224; 22 heures au Dune, 18 avenue Claude Vellefaux, dans le 10&#232;me arrondissement de Paris.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://blog.shingara.fr/2008/11/21/la-before-paris-on-rails-cest-la-rails-party-le-30-novembre-2008" title="Pictrails, Typo, et plein de rails dans la t&#234;te"&gt;Cyril y sera&lt;/a&gt;, &lt;a href="http://t37.net/rails-party-le-30-novembre-2008-i-paris"&gt;Frederic viens aussi (Typo, Ergonomie, Web, et plein de chose &#224; dire&lt;/a&gt;, bien sur l&amp;#8217;association &lt;a href="http://rubyfrance.org"&gt;RubyFrance&lt;/a&gt; avec tout plein de membre motiv&#233; autour de l&amp;#8217;organisateur des &#233;v&#232;nements Ruby Parisien Jean-Fran&#231;ois !&lt;/p&gt;


	&lt;p&gt;A dimanche alors !&lt;/p&gt;</description>
      <pubDate>Sat, 22 Nov 2008 11:54:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:8dbe2967-2300-4c46-bae0-c709aa764b17</guid>
      <comments>http://www.typouype.org/2008/11/22/rails-party-le-30-novembre-2008#comments</comments>
      <category>Ruby</category>
      <category>Rails</category>
      <category>RubyOnRails</category>
      <category>parisonrails</category>
      <category>Rubyfrance</category>
      <link>http://www.typouype.org/2008/11/22/rails-party-le-30-novembre-2008</link>
    </item>
    <item>
      <title>Quel type de d&#233;veloppeur je suis ?</title>
      <description>&lt;p&gt;La question du moment: &lt;a href="http://www.miximum.fr/culture/99-quel-developpeur-etes-vous"&gt;Quel d&#233;veloppeur &#234;tes vous ?&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Ce n&amp;#8217;est pas facile de se d&#233;finir. Je me retrouve assez bien dans la &lt;a href="http://ljouanneau.com/blog/post/2008/10/16/Quel-type-de-developpeur-suis-je"&gt;categorie Laurent Jouanneau&lt;/a&gt; :&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Le Ninja&lt;/li&gt;
		&lt;li&gt;Le pragmatique&lt;/li&gt;
		&lt;li&gt;Le libriste&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Avec des nuances:&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Ninja 10%&lt;/strong&gt;, mais pas trop: ne suis pas &#224; la recherche de l&amp;#8217;outil ultime, je ne connais pas &lt;em&gt;tout&lt;/em&gt; les raccourci de &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; , je ne pense pas &#234;tre dangereux, je ne m&#233;prise que les cons, par contre c&amp;#8217;est promis, d&#232;s que j&amp;#8217;ai le temps, je m&amp;#8217;essaie &#224; Dvorak  !&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Libriste 20%&lt;/strong&gt; Deux grosse nuances. La premi&#232;re, c&amp;#8217;est que je ne travail pas dans un environnement tr&#232;s libre. Disons que je parle peu de licence (un tord peut-&#234;tre ?). Je suis un peu comme &lt;span class="caps"&gt;TF1&lt;/span&gt; pour Coca: je vend mon temps de cerveaux disponible &#224; mes clients. Je les aident comme je peut en leur conseillant en g&#233;n&#233;ral d&amp;#8217;utilis&#233; un outil libre quand c&amp;#8217;est mieux pour lui. Mais si ces contraintes ou autre lui fond pr&#233;f&#233;rer du sources ferm&#233;, tant pis, je continue &#224; l&amp;#8217;aider. A la maison c&amp;#8217;est tout autre chose, on passe &#224; beaucoup plus ! J&amp;#8217;ai une petite barbe, j&amp;#8217;aime l&amp;#8217;entreaide, une petite tendance &#233;colo, et je n&amp;#8217;ai aucun logiciel propri&#233;taire sur mon syst&#232;me @home (ni aucun blob d&amp;#8217;ailleurs :p).&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Pragmatique 70%&lt;/strong&gt; Faire ce qu&amp;#8217;il faut pour que cela marche, ni plus ni moins. Plus peut engendrer des probl&#232;mes bien souvent, moins ne suffit pas. Apr&#232;s, le cot&#233; rentrer &#224; la maison c&amp;#8217;est tout&amp;#8230; De toute fa&#231;on &#224; la maison, je continue, du coup c&amp;#8217;est moins pragmatique&amp;#8230;&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Os&lt;/strong&gt; : &lt;a href="http://www.OpenBSD.org"&gt;OpenBSD&lt;/a&gt; / &lt;a href="http://www.microsoft.com/windows/windows-vista/default.aspx"&gt;Windows Vista&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Editeur&lt;/strong&gt; : &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt; , &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; / &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt;, &lt;a href="http://www.scintilla.org/SciTE.html"&gt;SciTE&lt;/a&gt;, &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Langage Favori&lt;/strong&gt; : &lt;a href="http://ruby-lang.org"&gt;Ruby&lt;/a&gt; / &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;, &lt;a href="http://www.progress.com/fr/index.ssp"&gt;Progress&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;&lt;span class="caps"&gt;VCS&lt;/span&gt;&lt;/strong&gt; : &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt; / &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Concurrent_versions_system"&gt;&lt;span class="caps"&gt;CVS&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Navigateur&lt;/strong&gt; : &lt;a href="http://www.mozilla-europe.org/fr/firefox/"&gt;Firefox&lt;/a&gt; / Firefox, &lt;a href="http://www.microsoft.com/france/windows/products/winfamily/ie/default.mspx"&gt;IE&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;strong&gt;Edit: pour &#234;tre honn&#234;te, je suis oblig&#233; d&amp;#8217;ajouter les outils/environnements qu&amp;#8217;il m&amp;#8217;arrive d&amp;#8217;utiliser en journ&#233;e, parfois toute la journ&#233;e :-/&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;En regardant la liste, je me demande si tout colle &#224; mon profile&amp;#8230; :-D&lt;/p&gt;


	&lt;p&gt;Je reprend maintenant la question de base, &lt;strong&gt;et vous quel d&#233;veloppeur &#234;tes vous ?&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Merci &#224; &lt;a href="http://www.miximum.fr/"&gt;Thibault&lt;/a&gt; pour ce billet tr&#232;s interessant !&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt; : Pour &#234;tre tout &#224; fait hon&#234;te, je doit ajouter windows, progress et compagnie..&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Edit 2&lt;/strong&gt; : JRuby n&amp;#8217;est effecitvement pas un langage &#224; part enti&#232;re, c&amp;#8217;est une simple impl&#233;mentation de Ruby sur la &lt;span class="caps"&gt;JVM&lt;/span&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 16 Oct 2008 22:53:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:9e642146-7646-42a3-8ddb-cc185d64cac2</guid>
      <comments>http://www.typouype.org/2008/10/16/quel-type-de-developpeur-je-suis#comments</comments>
      <category>self</category>
      <category>Ruby</category>
      <category>Development</category>
      <category>OpenBSD</category>
      <category>vim</category>
      <category>Mercurial</category>
      <category>Firefox</category>
      <link>http://www.typouype.org/2008/10/16/quel-type-de-developpeur-je-suis</link>
    </item>
    <item>
      <title>TDD C'est quoi ? (En ruby bien sur !) </title>
      <description>&lt;p&gt;&lt;em&gt;Voici un petit billet d&amp;#8217;initiation au D&#233;veloppement pilot&#233; par les Test (dit &lt;span class="caps"&gt;TDD&lt;/span&gt; pour Test Driven Development) avec Ruby. Initialiement publi&#233; sur le site de l&amp;#8217;association &lt;a href="http://rubyfrance.org"&gt;RubyFrance&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Imaginons que nous ayons besoin d&amp;#8217;un petit objet nous permettant d&amp;#8217;afficher un nom. En bon d&#233;veloppeur, nous allons d&amp;#8217;abord &#233;crire notre test.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;require &amp;quot;test/unit&amp;quot;

class TestMonObjet &amp;lt; Test::Unit::TestCase
  def test_attribut
    monObjet = MonObjet.new(&amp;quot;un titre&amp;quot;)
    assert_equal &amp;quot;un titre&amp;quot;, monObjet.nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb
Loaded suite testMonObjet
Started
E
Finished in 0.001079 seconds.

  1) Error:
test_attribut(MonObjetTest):
NameError: uninitialized constant MonObjetTest::MonObjet
    testMonObjet.rb:6:in `test_attribut'

1 tests, 0 assertions, 0 failures, 1 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Mince une erreur. Vous allez me dire, c&amp;#8217;&#233;tait couru d&amp;#8217;avance, on a encore rien cod&#233;. Bien. Allons-y alors. D&amp;#8217;abord nous allons ajouter le fichier contenant l&amp;#8217;objet que nous allons cr&#233;er.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;require &amp;quot;monobjet.rb&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Ensuite cr&#233;ons ce fichier:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Cela suffira largement pour empecher l&amp;#8217;erreur pr&#233;cedente. C&amp;#8217;est un point important dans l&amp;#8217;univers &lt;span class="caps"&gt;TDD&lt;/span&gt;. Il ne faut rien faire de plus que ce que les tests nous demande. Cela rejoint &#233;galement un autre concept: &lt;span class="caps"&gt;YAGNI&lt;/span&gt; (You Ain&amp;#8217;t Gonna Need It).&lt;/p&gt;


	&lt;p&gt;Executons encore ce test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb
Loaded suite testMonObjet
Started
E
Finished in 0.00193 seconds.

  1) Error:
test_attribut(MonObjetTest):
ArgumentError: wrong number of arguments (1 for 0)
    testMonObjet.rb:7:in `initialize'
    testMonObjet.rb:7:in `new'
    testMonObjet.rb:7:in `test_attribut'

1 tests, 0 assertions, 0 failures, 1 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Hmm, encore une erreur, mais cette fois ce sont les param&#232;tres de notre objet qui pose probl&#232;me. Bien, corrigeons notre objet.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons encore ce test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
E
Finished in 0.001091 seconds.

  1) Error:
test_attribut(MonObjetTest):
NoMethodError: undefined method `nom' for #&amp;lt;MonObjet:0x80e4d100&amp;gt;
    testMonObjet.rb:8:in `test_attribut'

1 tests, 0 assertions, 0 failures, 1 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Encore une erreur. Mais cette fois c&amp;#8217;est la method nom qui est manquante pour MonObjet. Ajoutons la:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
  end
  def nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test (oui, en tdd, on passe notre temps &#224; tester ! :-)):&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
F
Finished in 0.198677 seconds.

  1) Failure:
test_attribut(MonObjetTest) [testMonObjet.rb:8]:
&amp;lt;&amp;quot;un titre&amp;quot;&amp;gt; expected but was
&amp;lt;nil&amp;gt;.

1 tests, 1 assertions, 1 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Voil&#224; qui deviens interessant. Cette fois, ce n&amp;#8217;est pas une erreur, c&amp;#8217;est un echec du test. La m&#233;thode &amp;#8220;nom&amp;#8221; ne renvoi pas la bonne valeur. 
La situation d&amp;#8217;echec dans le test unitaire est aussi appel&#233; &amp;#8220;la barre rouge&amp;#8221;. Et quand il y a une barre rouge, le principe est de la faire redevenir verte le plus rapidement possible (en ajoutant tr&#232;s peu de code voir en enlevant du code).&lt;/p&gt;


	&lt;p&gt;Modifions donc rapidement notre code pour r&#233;pondre au besoin du test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
  end
  def nom
    &amp;quot;un titre&amp;quot;
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Doucement, doucement, je vous vois venir, oui j&amp;#8217;ai mis une valeur en dur, executons le test (c&amp;#8217;est barre rouge), nous en parlons juste apr&#232;s.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
.
Finished in 0.000902 seconds.

1 tests, 1 assertions, 0 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Voil&#224;, le test passe. Nous pouvons maintenant parler. J&amp;#8217;ai mis une valeur en dur dans la m&#233;thode &amp;#8220;nom&amp;#8221;, cela vous d&#233;range ? Et bien pas moi. Je r&#233;pond ici au besoin exprim&#233; dans le test. Mais je n&amp;#8217;ai pas dit que nous allions nous arreter l&#224; ! Ajoutons un test pour bien pr&#233;ciser notre besoin.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;require &amp;quot;test/unit&amp;quot;

class TestMonObjet &amp;lt; Test::Unit::TestCase
  def test_attribut
    monObjet = MonObjet.new(&amp;quot;un titre&amp;quot;)
    assert_equal &amp;quot;un titre&amp;quot;, monObjet.nom
  end
  def test_attribut_autre
    monObjet = MonObjet.new(&amp;quot;un autre titre&amp;quot;)
    assert_equal &amp;quot;un autre titre&amp;quot;, monObjet.nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test unitaire maintenant enrichi d&amp;#8217;un test.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
.F
Finished in 0.024359 seconds.

  1) Failure:
test_attribut_autre(MonObjetTest) [testMonObjet.rb:12]:
&amp;lt;&amp;quot;un autre titre&amp;quot;&amp;gt; expected but was
&amp;lt;&amp;quot;un titre&amp;quot;&amp;gt;.

2 tests, 2 assertions, 1 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Forcement, avec une valeur en dur, cela ne vas pas. Faisons passer la barre au vert avant de discuter:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
    @nom = un_nom
  end
  def nom
    @nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
..
Finished in 0.001734 seconds.

2 tests, 2 assertions, 0 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Parfait ! Barre verte !&lt;/p&gt;


	&lt;p&gt;Bien, maintenant, on peut laisser &#233;taler nos connaissance en ruby pour effectuer un petit refactoring:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  attr_reader :nom
  def initialize un_nom
    @nom = un_nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test a nouveau pour &#234;tre sur que ce refactoring n&amp;#8217;a pas chang&#233; la donne:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
..
Finished in 0.001734 seconds.

2 tests, 2 assertions, 0 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Un des inter&#234;t de faire un d&#233;veloppement pilot&#233; par les tests c&amp;#8217;est de tendre une sorte de filet de s&#233;curit&#233; permettant de donn&#233;e plus de courage, ou au moins de tranquillit&#233; pour effectuer le refactoring. Mais il existe bien d&amp;#8217;autre avantage &#224; ce mode de d&#233;veloppement. Notamment celui de ne pas faire plus que n&#233;cessaire.&lt;/p&gt;


	&lt;p&gt;Les tests ainsi &#233;crit, modifi&#233;, mis &#224; jour permette de disposer &#224; tout moment d&amp;#8217;une documentation sur l&amp;#8217;execution du programme.&lt;/p&gt;</description>
      <pubDate>Sun, 28 Sep 2008 19:14:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:38bbeb2c-b2ea-4207-b07d-cc7cc1821e94</guid>
      <comments>http://www.typouype.org/2008/09/28/tdd-c-est-quoi#comments</comments>
      <category>Ruby</category>
      <category>tdd</category>
      <category>test</category>
      <category>agiles</category>
      <category>Code</category>
      <link>http://www.typouype.org/2008/09/28/tdd-c-est-quoi</link>
    </item>
    <item>
      <title>Des shoes propres avec Ajax</title>
      <description>&lt;p&gt;&lt;img src="http://zone.typouype.org/shoes-logo.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Voil&#224; que &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; se pare d&amp;#8217;une nouvelle fonctionnalit&#233;e: xmlHttpRequest. En gros, et pour reprendre sont exemple, vous pouvez lancer une op&#233;ration de &lt;em&gt;download&lt;/em&gt; tout en continuant &#224; travailler&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Je vous laisse voir cela plus en d&#233;tail sur le blog d&amp;#8217;&lt;a href="http://hackety.org/2008/08/15/threadedDownloadsInShoes.html"&gt;hackety.org: threadedDownloadsInShoes&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Merci qui ? Merci &lt;a href="http://whytheluckystiff.net/"&gt;_Why&lt;/a&gt; !&lt;/p&gt;</description>
      <pubDate>Sat, 30 Aug 2008 14:57:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:374884a9-3ecf-457a-b0e2-d73816317ba7</guid>
      <comments>http://www.typouype.org/2008/08/30/#comments</comments>
      <category>Ruby</category>
      <category>Shoes</category>
      <category>xmlhttprequest</category>
      <category>Ajax</category>
      <link>http://www.typouype.org/2008/08/30/</link>
    </item>
    <item>
      <title>JRuby 1.1.4</title>
      <description>&lt;p&gt;La nouvelle version de &lt;a href="http://http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt; viens de sortir: &lt;a href="http://dist.codehaus.org/jruby/"&gt;Jruby 1.1.4&lt;/a&gt; .&lt;/p&gt;


	&lt;p&gt;Au programme, pas mal de chose dont&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Un gros &lt;em&gt;refactoring&lt;/em&gt; de la couche d&amp;#8217;int&#233;gratiohn java.&lt;/li&gt;
		&lt;li&gt;de 2 &#224; 20 fois plus rapide sur la plus part des fonctionnalit&#233;es &lt;/li&gt;
		&lt;li&gt;Les exceptions java peuvent &#234;tre maintenant r&#233;cup&#233;rer directement dans Ruby&lt;/li&gt;
		&lt;li&gt;Am&#233;lioration de la gestion m&#233;moire&lt;/li&gt;
		&lt;li&gt;D&#233;but du support de Ruby 1.9 (vivement les fibres dans jruby ! je veux voir &#231;a)&lt;/li&gt;
		&lt;li&gt;Am&#233;lioration des performances&lt;/li&gt;
		&lt;li&gt;Pool de Thread am&#233;lior&#233; &lt;/li&gt;
		&lt;li&gt;Acc&#232;s concurent sur les tableaux am&#233;lior&#233;&lt;/li&gt;
		&lt;li&gt;Et 72 bug r&#233;solu depuis la version 1.1.3&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Dans les prochain mois, l&amp;#8217;&#233;quipe va travailler pour essayer de sortir des release plus fr&#233;quement (quelque chose comme une fois par mois). Le but &#233;tant de corriger au plus vite les divers probl&#232;me, et apport&#233; les &#233;volutions plus rapidement aux utilisateurs.&lt;/p&gt;


	&lt;p&gt;Un bon projet toujours sur un bon rythme :)&lt;/p&gt;</description>
      <pubDate>Fri, 29 Aug 2008 09:03:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:a17bf3e2-25b6-48f6-9b16-c777d78b8499</guid>
      <comments>http://www.typouype.org/2008/08/29/#comments</comments>
      <category>Ruby</category>
      <category>jruby</category>
      <category>1.1.4</category>
      <category>Java</category>
      <link>http://www.typouype.org/2008/08/29/</link>
    </item>
    <item>
      <title>Shoes change de pompes</title>
      <description>&lt;p&gt;Le micro framework graphique initi&#233; par &lt;a href="http://whytheluckystiff.net/"&gt;_Why&lt;/a&gt; &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; a un nouveau site d&#233;di&#233;: &lt;a href="http://shoooes.net/"&gt;http://shoooes.net/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://shoooes.net/"&gt;&lt;img src="http://zone.typouype.org/shoes-stone2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Un petit rappel &#233;galement pour le tr&#232;s intessant &lt;a href="http://the-shoebox.org/"&gt;The Shoebox&lt;/a&gt; qui est une &lt;em&gt;gallerie&lt;/em&gt; d&amp;#8217;application Shoes.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;On en reparlera plus tard ;-)&lt;/em&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 19 Aug 2008 10:07:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:3b8f8dbd-5a68-407e-894a-9b8004978e83</guid>
      <comments>http://www.typouype.org/2008/08/19/shoes-change-de-pompe#comments</comments>
      <category>Ruby</category>
      <category>Shoes</category>
      <category>Why</category>
      <link>http://www.typouype.org/2008/08/19/shoes-change-de-pompe</link>
    </item>
    <item>
      <title>Ruby : Test Unitaire</title>
      <description>&lt;p&gt;Ruby b&#233;n&#233;ficie comme beaucoup d&amp;#8217;autres langages modernes de son framework de test. Voici donc une petite documentation sur &lt;strong&gt;comment &#233;crire un test unitaire&lt;/strong&gt; pour Ruby.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Pour ceux qui ne savent pas ce qu&amp;#8217;est un test unitaire, je vous renvoie sur l&amp;#8217;article &lt;a href="http://fr.wikipedia.org/wiki/Test_unitaire"&gt;Test Unitaire [wikipedia]&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Pour commencer il nous faut importer la librairie &amp;#8220;Test::Unit&amp;#8221;&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 
&lt;/pre&gt;

	&lt;p&gt;Rien que cela nous permet d&#233;j&#224; de faire un premier test en executant notre script.&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started

Finished in 0.000607 seconds.

0 test, 0 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Le fait d&amp;#8217;inclure la librairie de test unitaire permet d&amp;#8217;avoir un comportement par d&#233;faut qui va:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Charger la suite de test &#224; executer&lt;/li&gt;
		&lt;li&gt;lancer les tests&lt;/li&gt;
		&lt;li&gt;faire l&amp;#8217;affichage des resultats de test&lt;/li&gt;
		&lt;li&gt;faire un compte rendu de cette execution&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Ajoutons un test maintenant&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 

class StringTest &amp;lt; Test::Unit::TestCase
  def test_length
    s = "Bon test &#224; tous !" 
    assert_equal(17, s.length)
  end
end
&lt;/pre&gt;

	&lt;p&gt;Nous avons d&#233;fini une classe, celle-ci doit &#233;tendre TestCase. Cela permet au framework de test de s&amp;#8217;y retrouver.
Chaque m&#233;thode de test d&#233;finie ensuite doit contenir &lt;code&gt;test&lt;/code&gt; en d&#233;but de nom (le caract&#232;re &lt;code&gt;_&lt;/code&gt; n&amp;#8217;est plac&#233; que pour une meilleur lisibilit&#233; et selon les conventions couramment appliqu&#233;es en Ruby)&lt;/p&gt;


	&lt;p&gt;Les m&#233;thodes assert (ici &lt;code&gt;assert_equal&lt;/code&gt;, mais il en existe beaucoup d&amp;#8217;autres) permettent d&amp;#8217;effectuer un test. Ici un test d&amp;#8217;&#233;galit&#233;, mais nous pourrions &#233;galement v&#233;rifi&#233; une diff&#233;rence, un boul&#233;en r&#233;pondant vrai ou faux et d&amp;#8217;autres encore (voir la documentation sur le &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit/Assertions.html"&gt;module Test::Unit::Assertions&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Apr&#232;s execution, voici le r&#233;sultat:&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
.
Finished in 0.000802 seconds.

1 test, 1 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Un test a &#233;t&#233; execut&#233; avec succ&#232;s.&lt;/p&gt;


	&lt;p&gt;Ajoutons encore un test pour avancer:&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 

class StringTest &amp;lt; Test::Unit::TestCase
  def test_length
    s = "Bon test &#224; tous !" 
    assert_equal(17, s.length)
  end
  def test_expression_substitution
    assert_equal("", "#{'ah! ' * 3}")
  end
end
&lt;/pre&gt;

	&lt;p&gt;Apr&#232;s ex&#233;cution nous obtenons:&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
F.
Finished in 0.000827 seconds.

  1) Failure:
test_expression_substitution(StringTest) [testUnit.rb:12]:
&amp;lt;""&amp;gt; expectedbut was
&amp;lt;"ah! ah! ah! "&amp;gt;.
2 test, 2 assertions, 1 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Et voil&#224;, comme vous l&amp;#8217;aviez devin&#233;, nous avons une erreur. Dans notre cas, l&amp;#8217;erreur viens de notre test.&lt;/p&gt;


	&lt;p&gt;On vois ici l&amp;#8217;inter&#234;t de mettre chaque test sur un domaine diff&#233;rent dans une m&#233;thode diff&#233;rente: on vois facilement quel type de test nous voulions effectuer. Dans le d&#233;veloppement d&amp;#8217;une application compl&#232;te, avec plusieurs dizaines d&amp;#8217;objets &#224; tester, et plusieurs dizaines de m&#233;thodes sur chacun d&amp;#8217;eux, les erreurs d&amp;#8217;ex&#233;cution de test peuvent devenir un vrai casse-t&#234;te.&lt;/p&gt;


	&lt;p&gt;Effectuons la correction:&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 

class StringTest &amp;lt; Test::Unit::TestCase
  def test_length
    s = "Bon test &#224; tous !" 
    assert_equal(17, s.length)
  end
  def test_expression_substitution
    assert_equal("ah! ah! ah! ", "#{'ah! ' * 3}")
  end
end
&lt;/pre&gt;

	&lt;p&gt;ex&#233;cution du test:&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
..
Finished in 0.001273 seconds.

2 test, 2 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Et voil&#224;. Vous devriez &#234;tre capables de commencer &#224; &#233;crire quelques tests, mais ce n&#8217;est qu&#8217;un d&#233;but !.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;&lt;strong&gt;Cet article a &#233;t&#233; &#233;crit pour le site de l&amp;#8217;association &lt;a href="http://www.rubyfrance.org"&gt;RubyFrance&lt;/a&gt;, vous pourrez le retrouver dans les documentations propos&#233;es par l&amp;#8217;association: &lt;a href="http://rubyfrance.org/documentations/test-unitaire/"&gt;RubyFrance: TestUnitaire&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 15 Aug 2008 14:41:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:dc63084f-0cd8-4d87-b869-f08b1e45c8a3</guid>
      <comments>http://www.typouype.org/2008/08/15/ruby-test-unitaire#comments</comments>
      <category>Ruby</category>
      <category>testunit</category>
      <category>testfirst</category>
      <category>test</category>
      <link>http://www.typouype.org/2008/08/15/ruby-test-unitaire</link>
    </item>
    <item>
      <title>Typo Upgrade</title>
      <description>&lt;p&gt;Ce blog tourne maintenant avec la version 5.1.2 du moteur de blog &lt;a href="http://typosphere.org/projects/show/typo"&gt;Typo&lt;/a&gt; (&#233;galement appeler &lt;a href="http://typosphere.org/projects/show/typo"&gt;typoesphere&lt;/a&gt;). Comme d&amp;#8217;habitude, du bon boulot.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Bravo &#224; l&amp;#8217;&#233;quipe !&lt;/strong&gt;
&lt;strong&gt;Merci Cartier Bresson !&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;L&amp;#8217;annonce officiel: &lt;a href="http://blog.typosphere.org/2008/07/21/typo-5-1-cartier-bresson-is-out"&gt;Typo 5.1 Cartier Bresson is out&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Et pour compl&#233;ter ce billet, je tiens &#224; vous signaler/rappeler que l&amp;#8217;&#233;quipe de Typo &#224; mis en place &lt;a href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt; un gestionnaire de projet &#233;crit en &lt;a href="http://rubyonrails.org"&gt;RubyOnRails&lt;/a&gt; et que vous pouvez trouver tout plein de th&#232;me dans le &lt;a href="http://typogarden.org"&gt;jardin de typo&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;D&amp;#8217;autres nouveaut&#233; devrait arriver d&amp;#8217;ici le 15 aout dans les parrages&amp;#8230;&lt;/em&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 01 Aug 2008 21:51:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:ae30b8a1-9ed7-4baf-ac3a-1f172f88bc70</guid>
      <comments>http://www.typouype.org/2008/08/01/typo-upgrade#comments</comments>
      <category>typo</category>
      <category>Ruby</category>
      <category>RubyOnRails</category>
      <category>Typosphere</category>
      <link>http://www.typouype.org/2008/08/01/typo-upgrade</link>
    </item>
    <item>
      <title>Jruby 1.1.3</title>
      <description>&lt;p&gt;&lt;a href="http://jruby.codehaus.org/"&gt;Jruby&lt;/a&gt; vous connaissez ? C&amp;#8217;est l&amp;#8217;impl&#233;mentation &lt;a href="http://java.sun.com"&gt;Java&lt;/a&gt; du langage de programmation &lt;a href="http://ruby-lang.org"&gt;Ruby&lt;/a&gt;. Une impl&#233;mentation qui &#224; mon avis s&#233;duit ou s&#233;duira la plus part des entreprise ayant d&#233;j&#224; une infrastructure bas&#233; sur la technologie Java.&lt;/p&gt;


	&lt;p&gt;Et bien cette semaine, c&amp;#8217;est la derni&#232;re ligne droite, &lt;a href="http://www.bloglines.com/blog/ThomasEEnebo"&gt;Tom&lt;/a&gt; a d&#233;clench&#233; les &lt;em&gt;hostilit&#233;es&lt;/em&gt; en annon&#231;ant la sortie d&amp;#8217;ici la fin de semaine de la nouvelle version 1.1.3 de cette impl&#233;mentation, et du coup propose &#224; tous de signaler ce qu&amp;#8217;ils souhaitent voir dans cette version (archives de l&amp;#8217;annonce: &lt;a href="http://archive.jruby.codehaus.org/dev/21ef583e0807141035v622ce2aao7364aa2f3467491a%40mail.gmail.com" lang="jruby-dev"&gt; JRuby 1.1.3 by end of week&amp;#8230;Nominate problems here&amp;#8230;&lt;/a&gt;. &lt;a href="http://headius.blogspot.com/"&gt;Charles Oliver Nutter&lt;/a&gt; a surench&#233;ri en faisant suivre le message sur la mailing list User (&lt;a href="http://archive.jruby.codehaus.org/user/487B944E.4090707%40sun.com"&gt;The reason we&amp;#8217;re pushing 1.1.3 now is so we can finally branch 1.1 into 
full maintenance mode and start hitting Java integration hard&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Les demandes pleuvent, je vous pr&#233;vient un peu tard peut-&#234;tre pour participer, mais essay&#233; toujours. Au pire on fera les tests sur cette nouvelle mouture.&lt;/p&gt;</description>
      <pubDate>Thu, 17 Jul 2008 11:49:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:ab9f9602-aad3-48a9-b68a-9c754ca8e30d</guid>
      <comments>http://www.typouype.org/2008/07/17/jruby-1-1-3#comments</comments>
      <category>Ruby</category>
      <category>jruby</category>
      <category>Java</category>
      <category>Programmation</category>
      <category>Code</category>
      <link>http://www.typouype.org/2008/07/17/jruby-1-1-3</link>
    </item>
    <item>
      <title>F&#234;te en grande Pompe</title>
      <description>&lt;p&gt;On connait (ou pas) ce merveilleux petit &lt;em&gt;framework&lt;/em&gt; d&amp;#8217;interface graphique en &lt;a href="http://www.ruby-lang.org"&gt;Ruby&lt;/a&gt; :  &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;Shoes&lt;/a&gt; (une oeuvre sign&#233; &lt;a href="http://whytheluckystiff.net/"&gt;_Why&lt;/a&gt; encore une fois !).&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://code.whytheluckystiff.net"&gt;&lt;img src="http://hackety.org/images/nks-small.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;2 grandes rencontres virtuelles vont avoir lieu pour partager, tester, discuter, d&#233;couvrir, documenter autour de ce &lt;em&gt;framework&lt;/em&gt;: l&amp;#8217;une &#224; lieu en ce moment (vendredi 11 Juillet) et l&amp;#8217;autre aura lieu dans 2 semaines (le vendredi 25 Juillet). C&amp;#8217;est toute la journ&#233;e, &#231;a se passe sur &lt;a href="http://fr.wikipedia.org/wiki/Irc"&gt;&lt;span class="caps"&gt;IRC&lt;/span&gt;&lt;/a&gt; : #shoes@freenode.net , c&amp;#8217;est ouvert &#224; tous: d&#233;veloppeur, testeur, documenteur, partageur, d&#233;couvreur; du &lt;em&gt;framework&lt;/em&gt; ou bien d&amp;#8217;application l&amp;#8217;utilisant. &lt;em&gt;Vu le cot&#233; international, &#231;a se passe en Anglais bien sur.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Si vous ne connaissez pas Shoes, c&amp;#8217;est peut-&#234;tre le moment d&amp;#8217;aller d&#233;couvrir ce &lt;em&gt;framework&lt;/em&gt;. D&amp;#8217;ailleurs, c&amp;#8217;est un &#233;v&#232;nement qui pr&#233;c&#232;de la prochaine grosse release qui devrait avoir lieu &#224; la fin du mois.&lt;/p&gt;


	&lt;p&gt;L&amp;#8217;annonce officiel de l&amp;#8217;&#233;v&#232;nement: &lt;a href="http://ihack.us/2008/06/27/shoesfests-on-july-11th-and-july-25th/"&gt;7/11 &amp;#38; 7/25 ShoesFests with Why The Lucky Stiff&lt;/a&gt;
L&amp;#8217;annonce sur RubyInside: &lt;a href="http://www.rubyinside.com/shoesfest-announcement-948.html"&gt;Join Why The Lucky Stiff (And Others) For an Online &#8220;ShoesFest&#8221;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 11 Jul 2008 11:38:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:533c5239-4e93-4c53-9b1d-c0d286742986</guid>
      <comments>http://www.typouype.org/2008/07/11/fete-en-grande-pompes#comments</comments>
      <category>Ruby</category>
      <category>Shoes</category>
      <category>FrameWork</category>
      <category>Code</category>
      <category>Programmation</category>
      <link>http://www.typouype.org/2008/07/11/fete-en-grande-pompes</link>
    </item>
  </channel>
</rss>
