<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Code Story</title>
	<link href="http://www.code-story.net/atom.xml" rel="self" />
	<link href="http://www.code-story.net/" />
	<updated>2013-02-24T08:41:33-08:00</updated>
	<id>http://www.code-story.net/</id>
	<author>
		<name>David Gageot</name>
		<email>david@gageot.net</email>
	</author>
	
	<entry>
		<title>Christophe</title>
		<link href="http://www.code-story.net/about/christophe.html" />
		<updated>2013-02-24T00:00:00-08:00</updated>
		<id>http://www.code-story.net/about/christophe</id>
		<content type="html">&lt;p&gt;Hello my name is &lt;a href='https://twitter.com/XtlCnslt'&gt;Christophe Labouisse&lt;/a&gt;. I started software development in the early 1980th (in this time most people associated computers with the one onboard the &lt;a href='http://en.wikipedia.org/wiki/Starship_Enterprise'&gt;Enterprise&lt;/a&gt;) in BASIC on a &lt;a href='http://en.wikipedia.org/wiki/PET_computer'&gt;Commodore PET&lt;/a&gt;. It quickly became a devouring passion that hasn&amp;#8217;t left me ever since.&lt;/p&gt;

&lt;p&gt;I love writing clean and efficient code, being part of a great team as well as getting my hands dirty in garbage collection issues and other technical challenges. I believe that change is one of the most important part of software development so I&amp;#8217;m always happy to discover a new framework, language or method as long as it helps moving things in the right direction.&lt;/p&gt;

&lt;p&gt;I had the opportunity to work for various companies such as SNCF, Mycom, Société Générale Corporate and Investment Banking, GHX France as an employee or a contractor. I start as a freelancer in 2008 and moved to the Bordeaux areas in 2012 thanks to ITS Group.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Xavier</title>
		<link href="http://www.code-story.net/about/xavier.html" />
		<updated>2013-02-23T00:00:00-08:00</updated>
		<id>http://www.code-story.net/about/xavier</id>
		<content type="html">&lt;p&gt;Hello, I&amp;#8217;m &lt;a href='http://twitter.com/xavierhanin'&gt;Xavier Hanin&lt;/a&gt;, and I am dev-aholic.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s been a while now, I&amp;#8217;ve written my first for loop in BASIC on a thompson MO5 when I was 10, moved to C when I was 17, code in Java since 1997 and JS since 2006.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m working for &lt;a href='http://4sh.fr/'&gt;4SH&lt;/a&gt;, where I&amp;#8217;ve founded the Java and Web development team in Bordeaux in 2008. Together with a team of 15 talented and passionated people, we help software editors to face their challenges.&lt;/p&gt;

&lt;p&gt;Besides my job, I created &lt;a href='http://ant.apache.org/ivy'&gt;Apache Ivy&lt;/a&gt; in 2004 and lead it to the ASF in 2006. This experience has been tremendous, it lead me to famous places like the Stanford University, EMC2 labs, SAS headquarters or LinkedIn. I&amp;#8217;ve also been a speaker at a few european conferences, I have founded the &lt;a href='http://bordeauxjug.org/'&gt;BordeauxJUG&lt;/a&gt; in 2008, and I&amp;#8217;m teaching at &lt;a href='http://www.enseirb-matmeca.fr'&gt;ENSEIRB MATMECA&lt;/a&gt; since 10 years.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Un nouveau binôme</title>
		<link href="http://www.code-story.net/2013/02/22/un-nouveau-binome.html" />
		<updated>2013-02-22T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/02/22/un-nouveau-binome</id>
		<content type="html">&lt;p&gt;Nous étions une petite quarantaine hier soir dans les nouveaux locaux de Google, sponsorisé par SonarSource pour le repas, pour le choix du binôme qui nous accompagnera à la conférence devoxx 2013.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/finale-2013/8.jpg' alt='Les 2 algos' /&gt;&lt;/p&gt;

&lt;p&gt;Vous avez pu vous rendre compte du &lt;a href='http://code-story.net/2013/02/21/concours-2013-phase-2.html'&gt;sujet&lt;/a&gt; que nous avons révélé en live hier soir.&lt;/p&gt;

&lt;p&gt;Il a fallu départagé une vingtaine d&amp;#8217;applications en 30 minutes, codée en 2h, chaque équipe à eu 3 minutes pour vendre sont projet à un des membres du jury. Le jury était composé de Nicolas Martignole, Nicolas de Loof, Mathilde Lemée, Audrey Neveu, Gilles Philippart, Philippe Antoine, Emmanuel Bernard, David Gageot et Jean-Laurent de Morlhon.&lt;/p&gt;

&lt;p&gt;En 2h, partir &amp;#8220;from scratch&amp;#8221; sans préparation et livrer quelque chose, c&amp;#8217;est très difficile ! Du coup, il fallait être ultra-pragmatique et avoir déjà une bonne expérience d&amp;#8217;une stack web moderne pour arriver à déployer sur le cloud afin que les jury puissent juger du résultat du travail sur leur propre portable.&lt;/p&gt;

&lt;p&gt;Il y avait donc beaucoup de chose à faire :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coder une application qui fait quelque chose&lt;/li&gt;

&lt;li&gt;La rendre visuellement attirante&lt;/li&gt;

&lt;li&gt;Coder proprement&lt;/li&gt;

&lt;li&gt;Déployer son application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pas mal de binômes, ont eu du mal à remplir tous ces critères, il suffit de perdre 30 minutes sur une clé SSH, une mauvaise configuration de son IDE ou un soucis de configuration de son cloud.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/finale-2013/5.jpg' alt='Finale' /&gt;&lt;/p&gt;

&lt;p&gt;Mais globalement sur la 20 d&amp;#8217;applications proposés, 7 ont globalement remplies ces critères. Il s&amp;#8217;agit celle de :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Henri Tremblay &amp;amp; Guillaume Rose&lt;/li&gt;

&lt;li&gt;Xavier Hanin &amp;amp; Christophe Labouisse&lt;/li&gt;

&lt;li&gt;Jean-Baptiste Lemée &amp;amp; Florent Biville&lt;/li&gt;

&lt;li&gt;Nicolas Peru &amp;amp; Gaetan Zoritchak&lt;/li&gt;

&lt;li&gt;Xavier Nopre &amp;amp; Julien Roux&lt;/li&gt;

&lt;li&gt;Yan Bonnel &amp;amp; Alexandre Ardhuin&lt;/li&gt;

&lt;li&gt;Antoine Detante &amp;amp; Mathieu Leclaire&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les membres du jury on ensuite délibéré pour élire celle qui se détachait de ces 7 présentations.&lt;/p&gt;

&lt;p&gt;Nous avons beaucoup hésité entre celle de Yan Bonnel &amp;amp; Alexandre Ardhuin et celle de Xavier Hanin &amp;amp; Christophe Labouisse.&lt;/p&gt;

&lt;p&gt;L&amp;#8217;application de &lt;a href='http://codestory.xhan.in:8080'&gt;Xavier &amp;amp; Christophe&lt;/a&gt; : &lt;img src='/images/finale-2013/xavier-christophe.png' alt='Lapplication de Xavier &amp;amp; Christophe' /&gt;&lt;/p&gt;

&lt;p&gt;L&amp;#8217;application de &lt;a href='http://serveur.ybonnel.fr:8080/'&gt;Yan &amp;amp; Alexandre&lt;/a&gt; : &lt;img src='/images/finale-2013/yan-alexandre.png' alt='Lapplication de Yan &amp;amp; Alexandre' /&gt;&lt;/p&gt;

&lt;p&gt;Nous avons finalement choisi à une petite voix prêt l&amp;#8217;application de Xavier &amp;amp; Christophe. C&amp;#8217;était vraiment très serré.&lt;/p&gt;

&lt;p&gt;Bravo donc à Xavier et Christophe, qui sont donc invité à Devoxx pour participer le jeudi 28 mars à CodeStory 2013 !&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/finale-2013/7.jpg' alt='Binome gagnant' /&gt;&lt;/p&gt;

&lt;p&gt;Ils en parlent (déjà) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.touilleur-express.fr/2013/02/22/finale-2013-de-code-story-chez-google-france/'&gt;Le Touilleur Express&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Reportage Vidéo de Nicolas de Loof (à venir)&lt;/li&gt;
&lt;/ul&gt;</content>
	</entry>
	
	<entry>
		<title>Concours 2013 phase 2</title>
		<link href="http://www.code-story.net/2013/02/21/concours-2013-phase-2.html" />
		<updated>2013-02-21T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/02/21/concours-2013-phase-2</id>
		<content type="html">&lt;p&gt;Ce jeudi 21 février à 18h00 à lieu la dernière phase de la sélection du concours CodeStory 2013. Devoxx France est dans 1 mois. Il est temps que l&amp;#8217;équipe 2013 de CodeStory se prépare pour une conférence qui s&amp;#8217;annonce exceptionelle.&lt;/p&gt;

&lt;p&gt;Pour cette phase finale, nous accueillons les meilleurs des participants à la première phase. Ils sont une quarantaine et sont regroupés en binomes. En effet nous ne sélectionnons pas des codeurs solitaires mais bien un binome aguéri, rompu au travail de groupe.&lt;/p&gt;

&lt;p&gt;Google France nous ouvre exceptionellement ses nouveaux locaux pour cette soirée, merci à Alexis. Merci aussi à SonarSource qui va assurer notre repas de Geekettes et Geeks.&lt;/p&gt;

&lt;p&gt;Le fichier json de data optionel que nous proposons est &lt;a href='http://code-story.net/data/codestory2013.json'&gt;téléchargeable&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nous avons aussi quelques binomes qui sont en remote que nous connectons à la soirée via un &lt;a href='https://plus.google.com/hangouts/_/61646304a06010ac4564c87a5986eeded79da93a?authuser=0&amp;amp;hl=en'&gt;Hangout public&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vous devez enregistrer votre serveur dans le 3eme onglet de ce &lt;a href='https://docs.google.com/a/morlhon.net/spreadsheet/ccc?key=0Alr12p0nBBordGtIVkRQVkY4OEJ5VVlacEk4THlhQ0E#gid=2'&gt;document&lt;/a&gt; google.&lt;/p&gt;

&lt;p&gt;Si vous voulez faire comme nous ce soir, vous le pouvez car nous vous livrons maintenant et ici même le sujet de la soirée.&lt;/p&gt;
&lt;script src='http://speakerdeck.com/embed/04f7f8605e5d0130e3c5123138132f99.js' /&gt;</content>
	</entry>
	
	<entry>
		<title>Location d’astronef sur Jajascript</title>
		<link href="http://www.code-story.net/2013/02/02/jajascript.html" />
		<updated>2013-02-02T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/02/02/jajascript</id>
		<content type="html">&lt;p&gt;Maintenant que le concours est terminé, nous vous livrons le second exercice auxquel nous avons soumis nos candidats. C&amp;#8217;est sur cet exercice en particulier que nous avons augmenté la complexité par petit pas.&lt;/p&gt;

&lt;p&gt;Cet exercice est plus complexe que le précédent, notamment lorsque vous devez traiter des niveaux importants de flux d&amp;#8217;astronefs. Nous avons soumis nos candidats à effectuer une réponse de traitement de calcul en moins de 30 secondes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Essayez de résoudre l&amp;#8217;exercice, avec le cas de test inclus qui contient 4 trajets.&lt;/li&gt;

&lt;li&gt;Essayez avec le ce fichier de &lt;a href='http://code-story.net/data/jajascript-50.zip'&gt;50 trajets&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Puis sur celui-ci de &lt;a href='http://code-story.net/data/jajascript-10k.zip'&gt;50000 trajets&lt;/a&gt;. (attention 4mo de json, que nous vous avons zippé par respect de bande passante).&lt;/li&gt;

&lt;li&gt;Amusez vous avec notre &lt;a href='https://github.com/CodeStory/jajascript-generator'&gt;générateur de payload&lt;/a&gt;, a tenter des chiffres encore plus grand.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notez que dans le cas du concours, il convient de répondre en 30 secondes, temps de transport de l&amp;#8217;information compris, c&amp;#8217;est à dire du payload json final. Vous aurez du mal à reproduire cette contrainte sans un client/serveur distant l&amp;#8217;un de l&amp;#8217;autre. Mais cela vous donne une idée des difficultés que les joueurs ont rencontrés pour finir cet exercice. Une réponse en moins de 30 secondes du fichier de 50000 trajets lié plus haut, permettait d&amp;#8217;obtenir les 10000 points nécessaire pour être en tête.&lt;/p&gt;

&lt;p&gt;Sans plus attendre voici l&amp;#8217;énoncé que nous avons envoyé il y a 15 jours à nos candidats :&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2 id='location_dastronef_sur_jajascript'&gt;Location d&amp;#8217;astronef sur Jajascript&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;Votre cousin par alliance, Martin O. sur la planète Jajascript vient de monter sa petite entreprise de vol spatial privée: Jajascript Flight Rental. Il loue aux grosses corporations son astronef lorsqu&amp;#8217;elles ont de fortes charges ou un pépin avec leurs propres appareils. Il s&amp;#8217;occupe de la maintenance et de l&amp;#8217;entretien de son petit astronef. Il ne pouvait s&amp;#8217;en payer qu&amp;#8217;un pour démarrer.&lt;/p&gt;

&lt;p&gt;Ces grosses corporations envoient des commandes de location qui consistent en un intervalle de temps, et le prix qu&amp;#8217;ils sont prêts à payer pour louer l&amp;#8217;astronef durant cet intervalle.&lt;/p&gt;

&lt;p&gt;Les commandes de tous les clients sont connues plusieurs jours à l&amp;#8217;avance. Ce qui permet de faire un planning pour une journée. Les commandes viennent de plusieurs sociétés différentes et parfois elles se chevauchent. On ne peut donc pas toutes les honorer.&lt;/p&gt;

&lt;p&gt;Idéalement, il faut donc être capable de prendre les plus rentables, histoire de maximiser les gains de sa petite entreprise, et de s&amp;#8217;acheter d&amp;#8217;autres astronefs. Votre cousin passe des heures à trouver le planning idéal et vous demande &lt;strong&gt;pour un planning donné de calculer une solution qui maximise son gain&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id='exemple'&gt;Exemple&lt;/h3&gt;

&lt;p&gt;Considérez par exemple le cas où la JajaScript Flight Rental a 4 commandes :&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;MONAD42 : heure de départ 0, durée 5, prix 10
META18 : heure de départ 3, durée 7, prix 14
LEGACY01 : heure de départ 5, durée 9, prix 8
YAGNI17 : heure de départ 5, durée 9, prix 7&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;La solution optimale consiste à accepter MONAD42 et LEGACY01, et le revenu est de &lt;code&gt;10 + 8 = 18&lt;/code&gt;. Remarquez qu&amp;#8217;une solution à partir de MONAD42 et YAGNI17 est faisable (l&amp;#8217;avion serait loué sans interruption de 0 à 14) mais non optimale car le bénéfice serait que de 17.&lt;/p&gt;

&lt;h3 id='prcisions'&gt;Précisions&lt;/h3&gt;

&lt;p&gt;L&amp;#8217;identifiant d&amp;#8217;un vol ne dépasse jamais 50 caractères, les heures de départs, durée et prix sont des entiers positifs raisonnablement grands.&lt;/p&gt;

&lt;h3 id='serveur'&gt;Serveur&lt;/h3&gt;

&lt;p&gt;Votre serveur doit répondre aux requêtes http POST de la forme &lt;code&gt;http://serveur/jajascript/optimize&lt;/code&gt; avec un payload de la forme :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='json'&gt;  &lt;span class='p'&gt;[&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;VOL&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;NOM_VOL&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DEPART&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='err'&gt;HEURE&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DUREE&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='err'&gt;DUREE&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;PRIX&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='err'&gt;PRIX&lt;/span&gt; &lt;span class='p'&gt;},&lt;/span&gt; &lt;span class='err'&gt;...&lt;/span&gt;
  &lt;span class='p'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;En reprenant l&amp;#8217;exemple ci dessus :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='json'&gt;  &lt;span class='p'&gt;[&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;VOL&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;MONAD42&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DEPART&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DUREE&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;PRIX&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;10&lt;/span&gt; &lt;span class='p'&gt;},&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;VOL&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;META18&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DEPART&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DUREE&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;PRIX&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;14&lt;/span&gt; &lt;span class='p'&gt;},&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;VOL&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;LEGACY01&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DEPART&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DUREE&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;PRIX&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;8&lt;/span&gt; &lt;span class='p'&gt;},&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;VOL&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;YAGNI17&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DEPART&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;DUREE&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nt'&gt;&amp;quot;PRIX&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;7&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt;
  &lt;span class='p'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Vous devrez répondre le résultat suivant :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='json'&gt;    &lt;span class='p'&gt;{&lt;/span&gt;
      &lt;span class='nt'&gt;&amp;quot;gain&amp;quot;&lt;/span&gt; &lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;18&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
      &lt;span class='nt'&gt;&amp;quot;path&amp;quot;&lt;/span&gt; &lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;MONAD42&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;LEGACY01&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Le gain représentant la somme optimale, path représentant l&amp;#8217;ordre des vols.&lt;/p&gt;

&lt;p&gt;Bons calculs !&lt;/p&gt;
&lt;/blockquote&gt;</content>
	</entry>
	
	<entry>
		<title>Fin du concours de la phase 1</title>
		<link href="http://www.code-story.net/2013/02/01/concours-2013-phase-1.html" />
		<updated>2013-02-01T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/02/01/concours-2013-phase-1</id>
		<content type="html">&lt;p&gt;Hier soir à minuit c&amp;#8217;était la fin du Call for Paper de Devoxx, mais surtout la fin de la première phase du concours de CodeStory 2013.&lt;/p&gt;

&lt;p&gt;Pendant pas loin d&amp;#8217;un mois, nous avons à travers notre robot, posé tout un tas de questions aux serveurs des joueurs. A la fin du concours nous avons recensé 135 joueurs comme l&amp;#8217;atteste la &lt;a href='http://status.code-story.net'&gt;page de statut&lt;/a&gt;. Les questions étaient de 3 types différents :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Des questions d&amp;#8217;ordres générales, dont le but était de tester la connectivité entre le serveur et notre robot, notamment les temps de &amp;#8220;réveil&amp;#8221; des serveurs utilisant des solutions gratuites sur le Cloud.&lt;/li&gt;

&lt;li&gt;Des énoncés de sujets, il y en a eu 2. Le premier &lt;a href='http://code-story.net/2013/01/22/scalaskel.html'&gt;&amp;#8221;l&amp;#8217;échoppe de monade sur Scalaskel&amp;#8221;&lt;/a&gt; et le suivant &lt;a href='http://code-story.net/2013/02/02/jajascript.html'&gt;&amp;#8220;location d&amp;#8217;astronef sur Jajascript&amp;#8221;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Des tests qui visaient à vous faire coder l&amp;#8217;énoncé petit à petit en mode &amp;#8220;pas à pas&amp;#8221;. Certains ont joué le jeu de découvrir le chemin que nous avions tracé, d&amp;#8217;autre on préféré tout coder d&amp;#8217;un coup. Nous n&amp;#8217;avions bien sur pas pris en compte cette façon de faire pour notre sélection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Au final nous avons donc posé quelques questions d&amp;#8217;ordre général, un exercice relativement simple, et un autre plus complexe&amp;#8230; au départ.&lt;/p&gt;

&lt;p&gt;En effet, nous nous sommes rendu compte que plusieurs d&amp;#8217;entre vous étaient très à l&amp;#8217;aise avec nos sujets, et nous avons décidé de corser un peu l&amp;#8217;affaire en envoyant de plus en plus de calcul à faire pour notre second exercice, au point ou il fallait sacrément optimiser son algorithme pour arriver à répondre dans le temps imparti. Ceux qui ont réussi on eu 10000 points, et nous avons considéré que au delà de 1000 points, l&amp;#8217;optimisation était déjà bien réussie. De base avec un algorithme &amp;#8220;brut de fonderie&amp;#8221; il est relativement aisé de faire 100 points.&lt;/p&gt;

&lt;p&gt;Grace à un petit &lt;a href='https://gist.github.com/4693696'&gt;script&lt;/a&gt;, voici la liste de tous ceux répondant à ces critères (environ 50 personnes). Ceux qui le voudront, seront convié à la phase 2, qui aura lieu dans un endroit encore tenu secret, mais ça va vous plaire.&lt;/p&gt;
&lt;style type='text/css'&gt;
#post img {
   display: inline-block;
   margin: 0;
}
#post ul {
   margin-bottom: 5px	
}
&lt;/style&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;10000 Points&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/198449a7e196c4b0f2ed25f65279bf84?s=32' alt='' /&gt; a14n&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/cf23eaf23d3545c891bde81041919a9b?s=32' alt='' /&gt; julien_scala&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/7b5fd196f26d88a6f72c9b25744f5c6b?s=32' alt='' /&gt; Mimah&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/814533c1d939fa0d95785366ee7d6bec?s=32' alt='' /&gt; eTini&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/acede2545a558df3b183683a0cf9b962?s=32' alt='' /&gt; ybonnel&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/7d1cae5a72c40c302eef563709d034ea?s=32' alt='' /&gt; fXzo&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/f701185ff431c3d5c267a3af71f64c7b?s=32' alt='' /&gt; Iliah&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/fa65a26193f2474749b3a5f22472160d?s=32' alt='' /&gt; ardumont&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/6595ae6ba5ca0712e8e3074f2d9063d2?s=32' alt='' /&gt; laurentpetit&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/6c7f99e843b1694a14c3fc83802d4792?s=32' alt='' /&gt; redfish4ktc&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/8351ca02028e290f64939beb7e1385c1?s=32' alt='' /&gt; benzonico&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/cf0ce44e342943d56f115165b7d78bdd?s=32' alt='' /&gt; Godin&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/9814b62644127c96645055972787be3b?s=32' alt='' /&gt; jcreigno&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/54c79064a6cb32c62f0f0aed44146fad?s=32' alt='' /&gt; BenoitV&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/2799805396016e89df69d26d22c4445c?s=32' alt='' /&gt; gz_k&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/acede2545a558df3b183683a0cf9b962?s=32' alt='' /&gt; ybonnel_scala&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/45bee60d91aa367b7f1a1aa14231b8c5?s=32' alt='' /&gt; shionn&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/d4e08e932563394be8acb10f0f1e109a?s=32' alt='' /&gt; diodfr&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/244ca88ef39ec144d63d0b7792873fe1?s=32' alt='' /&gt; LittleGhost&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/faf5358ab24ee4aaee5086c943ecd9b6?s=32' alt='' /&gt; denis-labaye&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/118ef8afc587a7f4a9c979c091213255?s=32' alt='' /&gt; TomEtJerem&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/0b54c0f079b22ef60df00c5d64744d63?s=32' alt='' /&gt; dwursteisen&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/66411f269647a42d9509ca74ab513adc?s=32' alt='' /&gt; Pticed&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/6dc11d7fd372413731cfe2b326f9c905?s=32' alt='' /&gt; JroAimServices&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/2055a0b8bfcd3b02aa3109d09339fe91?s=32' alt='' /&gt; bartavelle&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/169032f2ed59261020a056eeb8b1ad9e?s=32' alt='' /&gt; DamienB&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/5a9a33e6c0397ed112a7c955728f3a1f?s=32' alt='' /&gt; XtlCnslt&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/c20f5fffaddba6702ccad53b5b1c4b49?s=32' alt='' /&gt; stephanec&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/1ee80ee0278e5ed57e43643ee4098ce6?s=32' alt='' /&gt; fbaligand&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/49d726644cf56d4b4a6c28c001b6d03a?s=32' alt='' /&gt; flagadajones&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/133b00fcaf11e63476ed9997e56e0a6c?s=32' alt='' /&gt; matleclaire&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/acede2545a558df3b183683a0cf9b962?s=32' alt='' /&gt; ybonnel_ceylon&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/638a15539632fc2caaf2a94975683f13?s=32' alt='' /&gt; oxyde&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/f420aa2420a222608f982f4ccfe3888d?s=32' alt='' /&gt; jcsirot&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/44e05663a595119d9f71d139461b5e88?s=32' alt='' /&gt; CyrilLacote&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/9ec96799dd90029b4f1caf6d1475c1bb?s=32' alt='' /&gt; sebprunier&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/cf23eaf23d3545c891bde81041919a9b?s=32' alt='' /&gt; julien&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/ae943b063539e5fa7e625e50cdc01fde?s=32' alt='' /&gt; gdhordain&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/823cc38b227e3b03babd0b3e4642f8f1?s=32' alt='' /&gt; xavierhanin&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/1f1bbe56337f5f85744c1ea94aafcfc9?s=32' alt='' /&gt; AlainMuller&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/b123fe4bebd0bfd8fb985e60c14e36bd?s=32' alt='' /&gt; JB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;2000 points&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/df747935bec069aee97b9fcd124fc7c3?s=32' alt='' /&gt; gbloquel&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/5cbc2ec2a104710bed760df82a4cc24c?s=32' alt='' /&gt; Raspberry-Pi&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/6e1fa554b8aac01f1b94521af4a22ce8?s=32' alt='' /&gt; antoine&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;1000 points&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/8643584b16941d2f2b532d122535a94e?s=32' alt='' /&gt; jeremie&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/b564ebca8f8f126b1d2eaf7496ef97e5?s=32' alt='' /&gt; Xtrmntr&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/df1516910ff74da1a423e6732f13c926?s=32' alt='' /&gt; deepintojee&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/a032ce09ea1c0aef1d231fe525a49da6?s=32' alt='' /&gt; ypetit&lt;/li&gt;

&lt;li&gt;&lt;img src='http://www.gravatar.com/avatar/8c92fcdb7c7abc1a50732a93bc361b5e?s=32' alt='' /&gt; mrenou&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content>
	</entry>
	
	<entry>
		<title>L'échoppe de monade sur Scalaskel en Java</title>
		<link href="http://www.code-story.net/2013/01/30/scalaskel-java.html" />
		<updated>2013-01-30T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/01/30/scalaskel-java</id>
		<content type="html">&lt;p&gt;Voici un exemple de solution au challenge Scalaskel. Codé en java 8. Enfin une des versions beta de java 8, sachant que l&amp;#8217;Api collection est toujours très instable.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;&lt;span class='kn'&gt;import&lt;/span&gt; &lt;span class='nn'&gt;java.util.ArrayList&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
&lt;span class='kn'&gt;import&lt;/span&gt; &lt;span class='nn'&gt;java.util.List&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;

&lt;span class='kn'&gt;import&lt;/span&gt; &lt;span class='nn'&gt;static&lt;/span&gt; &lt;span class='n'&gt;java&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;util&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;streams&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;Streams&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;repeat&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;

&lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;ScalaskelJava8&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
  &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kd'&gt;final&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;FOO&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
  &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kd'&gt;final&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;BAR&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
  &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kd'&gt;final&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;QIX&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;11&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
  &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kd'&gt;final&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;21&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;

  &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='n'&gt;List&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;List&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;Integer&lt;/span&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='nf'&gt;combinations&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;cents&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='n'&gt;Combinations&lt;/span&gt; &lt;span class='n'&gt;combinations&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='n'&gt;Combinations&lt;/span&gt;&lt;span class='o'&gt;();&lt;/span&gt;
    &lt;span class='n'&gt;combinations&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;add&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;cents&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;combinations&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;list&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;

  &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kd'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;Combinations&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='kd'&gt;final&lt;/span&gt; &lt;span class='n'&gt;List&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;List&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;Integer&lt;/span&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;list&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='n'&gt;ArrayList&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

    &lt;span class='kt'&gt;void&lt;/span&gt; &lt;span class='nf'&gt;add&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;baz&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;qix&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;bar&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;foo&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;canUse&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;((&lt;/span&gt;&lt;span class='n'&gt;canUse&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt; &lt;span class='n'&gt;add&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;baz&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;qix&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;     &lt;span class='n'&gt;bar&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;     &lt;span class='n'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;((&lt;/span&gt;&lt;span class='n'&gt;canUse&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;QIX&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;QIX&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt; &lt;span class='n'&gt;add&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;baz&lt;/span&gt;    &lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;qix&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;bar&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;     &lt;span class='n'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='n'&gt;QIX&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;QIX&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;((&lt;/span&gt;&lt;span class='n'&gt;canUse&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;BAR&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;BAR&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt; &lt;span class='n'&gt;add&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;baz&lt;/span&gt;    &lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;qix&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;     &lt;span class='n'&gt;bar&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='n'&gt;BAR&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;BAR&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;

      &lt;span class='n'&gt;list&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;add&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;repeat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;baz&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;BAZ&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
        &lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;concat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;repeat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;qix&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;QIX&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt;
        &lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;concat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;repeat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;bar&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;BAR&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt;
        &lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;concat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;repeat&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;foo&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;FOO&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt;
        &lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;into&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='n'&gt;ArrayList&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&amp;gt;()));&lt;/span&gt;
    &lt;span class='o'&gt;}&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notez que cette solution compacte, n&amp;#8217;est pas la plus rapide, en partie à cause de la récursion, en partie aussi parceque l&amp;#8217;on avance dans la récursion cent par cent.&lt;/p&gt;

&lt;p&gt;Et vous, vous avez du code à partager ?&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>L'échoppe de monade sur Scalaskel</title>
		<link href="http://www.code-story.net/2013/01/22/scalaskel.html" />
		<updated>2013-01-22T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/01/22/scalaskel</id>
		<content type="html">&lt;p&gt;Le concours de codestory bat son plein et nous avons actuellement pas loin de 115 participants actifs. Vous pouvez suivre, en live, les résultats sur la page de &lt;a href='http://status.code-story.net/'&gt;statut&lt;/a&gt;. A noter que vous pouvez contribuer au code source de cette page (hors concours) en envoyant une pull-request sur ce &lt;a href='https://github.com/dgageot/code-story-status'&gt;dépôt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cette année, le concours consiste à monter un serveur http, de s&amp;#8217;inscrire et d&amp;#8217;attendre que notre robot vienne vous soumettre des questions auxquelles pour y répondre vous allez devoir coder un petit peu. Les questions sont posées de manière à ce que votre code soit écrit de manière incrémentale. Mais vous n&amp;#8217;êtes pas obligé de suivre nos suggestions&amp;#8230; Il est encore possible de s&amp;#8217;&lt;a href='https://docs.google.com/a/xebia.fr/spreadsheet/viewform?formkey=dDdHc3N2V2R1bHRMZHFmOGk3SWZKTmc6MQ#gid=0'&gt;inscrire&lt;/a&gt; cette semaine, vous pouvez tout à fait encore rattraper les autres.&lt;/p&gt;

&lt;p&gt;Pour ceux qui ne sont pas dans la compétition, ou qui se demande bien de quoi on parle, voici l&amp;#8217;énoncé du premier exercice que notre robot soumet aux participants :&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2 id='lchoppe_de_monade_sur_scalaskel'&gt;L’échoppe de monade sur Scalaskel.&lt;/h2&gt;

&lt;p&gt;Sur la planète Scalaskel, une planète en marge de la galaxie, aux confins de l&amp;#8217;univers, la monnaie se compte en cents, comme chez nous. 100 cents font un groDessimal. Le groDessimal est la monnaie standard utilisable partout sur toutes les planètes de l’univers connu. C&amp;#8217;est un peu compliqué à manipuler, mais si on ne s&amp;#8217;en sert pas y&amp;#8217;a toujours des erreurs d&amp;#8217;arrondis incroyables quand on les soustrais ou on les divise, c’est idiot, mais c’est comme ça. Sur Scalaskel, on utilise rarement des groDessimaux, on utilise des pièces plus petites : Le &lt;strong&gt;Foo&lt;/strong&gt; vaut &lt;strong&gt;1 cent&lt;/strong&gt;, le &lt;strong&gt;Bar&lt;/strong&gt; vaut &lt;strong&gt;7 cents&lt;/strong&gt;, le &lt;strong&gt;Qix&lt;/strong&gt; vaut &lt;strong&gt;11 cents&lt;/strong&gt; et le &lt;strong&gt;Baz&lt;/strong&gt; vaut &lt;strong&gt;21 cents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vous tenez une échoppe de monade et autres variables méta-syntaxique sur Scalaskel. Pour faire face à l’afflux de touristes étrangers avec les poches remplies de groDessimaux vous avez besoin d’écrire un programme qui pour toute somme de 1 à 100 cents, vous donnera toutes les décompositions possibles en pièces de &lt;strong&gt;Foo&lt;/strong&gt;, &lt;strong&gt;Bar&lt;/strong&gt;, &lt;strong&gt;Qix&lt;/strong&gt; ou &lt;strong&gt;Baz&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Par exemple, 1 cent ne peut se décomposer qu’en une seule pièce &lt;strong&gt;Foo&lt;/strong&gt;. Par contre 7 cents peuvent se décomposer soit en 7 pièces &lt;strong&gt;Foo&lt;/strong&gt;, soit en 1 pièce &lt;strong&gt;Bar&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id='serveur_web_'&gt;Serveur Web :&lt;/h2&gt;

&lt;p&gt;Votre serveur doit répondre aux requetes http GET de la forme &lt;code&gt;http://serveur/scalaskel/change/X&lt;/code&gt;, &lt;code&gt;X&lt;/code&gt; étant une valeur en cents de 1 à 100 cents.&lt;/p&gt;

&lt;p&gt;La réponse attendue est un json de la forme :&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;[{“foo”: w, “bar”: x, “qix”: y, “baz”: z}, …]&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Exemples Pour &lt;code&gt;http://serveur/scalaskel/change/1&lt;/code&gt; il faut répondre :&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;[ {“foo”: 1} ]&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Pour &lt;code&gt;http://serveur/scalaskel/change/7&lt;/code&gt; il faut répondre :&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;[ {“foo”: 7}, {“bar”: 1} ]&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;L’ordre des valeurs dans le tableau json, ainsi que le formatage n’a pas d’importance à partir du moment ou c’est du json valide, il s’entends.&lt;/p&gt;

&lt;p&gt;Bon courage !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ainsi si vous avez reussi cet exercice, que vous pourriez faire sans appel http, vous avez fait une bonne partie du challenge.&lt;/p&gt;

&lt;p&gt;Happy Clean Coding &amp;amp; see you at Devoxx.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>FAQ Concours 2013</title>
		<link href="http://www.code-story.net/2013/01/08/concours-2013-FAQ.html" />
		<updated>2013-01-08T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/01/08/concours-2013-FAQ</id>
		<content type="html">&lt;h2 id='faq_du_concours_2013'&gt;FAQ du concours 2013&lt;/h2&gt;

&lt;p&gt;Nous avons reçu de nombreuses questions par email, twitter et IRL. Voici une petite FAQ qui vise à y répondre :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Toutes les phases sont-elles obligatoires ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Oui, toutes les phases sont obligatoires. On ne peut pas arriver en cours de concours. Il faut donc forcément participer à la première phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jusqu&amp;#8217;à quand puis-je participer ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il faut t&amp;#8217;inscrire et répondre aux questions du serveur CodeStory pendant la phase de pré-sélection c&amp;#8217;est à dire d&amp;#8217;ici au 31 Janvier 2013 minuit. Si tu es rapide, tu peux t&amp;#8217;y mettre le 31 à 23h. L&amp;#8217;important, c&amp;#8217;est la date limite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combien de temps ça va me prendre ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pour la phase de pré-sélection : c&amp;#8217;est assez variable. On code tous de manières différentes. Mais les petits exercices que nous avons préparés ne devraient pas vous prendre plus de 2 ou 3 heures. Nous nous réservons le droit de poser d&amp;#8217;autres questions après-coup si les premiers exercices ne permettent pas de départager les candidats. Mais ça donne un ordre d&amp;#8217;idée.&lt;/p&gt;

&lt;p&gt;Pour la seconde phase, fin février: ça sera une soirée de 2-3 heures sur Paris.&lt;/p&gt;

&lt;p&gt;Pour la dernière phase, ça sera une journée pendant &lt;a href='http://www.devoxx.com/display/FR13/Home'&gt;Devoxx France&lt;/a&gt;, de toutes les façons tu allais venir. Alors ça ne compte pas vraiment ;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mon serveur dors et vous n&amp;#8217;envoyez rien ! Qu&amp;#8217;est ce qui ce passe ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rien d&amp;#8217;anormal, notre timing est serré entre nos vies personnelles et professionnelles bien remplies. Be patient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ou puis-je trouver un serveur pour participer ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il y a des hébergeurs cloud qui proposent spécifiquement leur produits pour le concours :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloubees propose &lt;a href='http://twitter.com/ndeloof/status/288230002955264000'&gt;Intégration Continue &amp;amp; Hébergement&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;CloudFoundry propose de &lt;a href='http://twitter.com/ebottard/status/288232326893301760'&gt;l&amp;#8217;hébergement&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;CleverCloud propose de &lt;a href='http://code-story.net/2013/01/04/concours-2013.html#comment-759028628'&gt;l&amp;#8217;hébergement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cela dit n&amp;#8217;importe quelle machine connectée à Internet, par exemple chez toi derrière ta box adsl, peut faire l&amp;#8217;affaire. (Ou le raspberry pi que tu as acheté pour Noël et qui dort déjà dans un tiroir&amp;#8230;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mon serveur se &amp;#8220;réveille&amp;#8221; à la première requête, et donc je vais être pénalisé si vous comptabilisez le temps de réponse.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ca n&amp;#8217;est pas un concours de performance. A priori ça n&amp;#8217;est donc pas critique. Eventuellement nous pouvons regarder la latence intelligemment pour départager les candidats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quel langage puis-je utiliser ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nous ne sommes pas sectaires, on accepte tous les langages. Même Scala.&lt;/p&gt;

&lt;p&gt;N&amp;#8217;hésitez pas à nous demander sur Twitter ou dans les commentaires ci dessous si vous avez d&amp;#8217;autres questions.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Concours pour Devoxx France 2013</title>
		<link href="http://www.code-story.net/2013/01/04/concours-2013.html" />
		<updated>2013-01-04T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2013/01/04/concours-2013</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;CodeStory, c&amp;#8217;est quoi déjà ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CodeStory est un concours de code récurrent organisé par &lt;a href='http://code-story.net/about/david.html'&gt;David Gageot&lt;/a&gt; et &lt;a href='http://code-story.net/about/jean-laurent.html'&gt;Jean-Laurent de Morlhon&lt;/a&gt;. L’année dernière, avant Devoxx France 2012, nous avons organisé un concours afin d’élire le binôme qui allait coder avec nous en live durant la conférence. Les gagnants, &lt;a href='http://code-story.net/about/eric.html'&gt;Eric&lt;/a&gt; &amp;amp; &lt;a href='http://code-story.net/about/sebastian.html'&gt;Sebastian&lt;/a&gt; Le Merdy, nous ont également accompagné à Devoxx World en novembre dernier.&lt;/p&gt;

&lt;p&gt;En 2013, Eric et Sébastian ont décidé de remettre leur titre en jeu ! Nous devons donc trouver un nouveau binôme de &amp;#8220;challengers&amp;#8221; qui les affronteront.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Le concours 2013&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le concours pour sélectionner ces &amp;#8220;challengers&amp;#8221; se déroulera en trois phases :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Une phase de pré-selection commençant maintenant et se terminant fin janvier.&lt;/li&gt;

&lt;li&gt;Une seconde phase courant février. Les concurrents qui auront passé la première phase, seront invités à coder en live avec nous, sur Paris, pendant une soirée. A l’issue de cette soirée, nous choisirons le binôme de &amp;#8220;challengers&amp;#8221; !&lt;/li&gt;

&lt;li&gt;Le grand final aura lieu à Devoxx France, du 27 au 29 Mars 2013. Lors de cette finale, nous confronterons les 2 binômes. (Sous réserve de confirmation par l’équipe d’organisation de Devoxx !)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Comment va se dérouler la phase de pré-sélection ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chaque développeur souhaitant participer doit se faire connaitre sur &lt;a href='https://docs.google.com/spreadsheet/viewform?formkey=dDdHc3N2V2R1bHRMZHFmOGk3SWZKTmc6MQ#gid=0'&gt;ce formulaire&lt;/a&gt;. Il devra également installer un serveur web public qui lui servira pour participer. Le principe est simple: L’équipe de CodeStory va poser une question au serveur de chaque participant au travers d’une requête http GET. Chaque serveur doit répondre à cette question avant de passer à la question suivante. En cas de mauvaise réponse, la question sera répétées régulièrement jusqu’à ce qu’une bonne réponse soit fournie. La réponse doit être fournie dans le body de la réponse de la requête http.&lt;/p&gt;

&lt;p&gt;La première question est simple. L’url &lt;code&gt;http://(serveur)/?q=Quelle+est+ton+adresse+email&lt;/code&gt; de votre serveur doit répondre par un document ne contenant que votre adresse email.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl http://foobar.com:9090/?q=Quelle+est+ton+adresse+email
&amp;gt; GET / HTTP/1.1
&amp;gt; User-Agent: curl/7.24.0
&amp;gt; Host: foobar.com
&amp;gt; Accept: */*
&amp;gt; 
&amp;lt; HTTP/1.1 200 OK
&amp;lt; Date: Fri, 04 Jan 2013 15:35:35 GMT
&amp;lt; Server: AllYourBaseAreBelongToUs
&amp;lt; 
foo@bar.com&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ensuite, les questions auront pour but de vous guider dans l’écriture d’un programme dont il vous sera demandé les sources à l’issue de la phase de pré-sélection. Nous jugerons les participants à la fois sur la qualité du code écrit et sur la vitesse à laquelle les serveurs ont répondu aux questions.&lt;/p&gt;

&lt;p&gt;Ne paniquez pas, en cours de concours, vous recevrez des emails pour vous donner plus d’instructions sur le déroulement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Par où commencer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Inscrivez-vous &lt;a href='https://docs.google.com/spreadsheet/viewform?formkey=dDdHc3N2V2R1bHRMZHFmOGk3SWZKTmc6MQ#gid=0'&gt;ici&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Puis, pour des exemples de façons de démarrer un serveur web dans plusieurs langages, voir &lt;a href='https://github.com/xebia-france/extreme_startup_servers'&gt;https://github.com/xebia-france/extreme_startup_servers&lt;/a&gt;&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>What has been done at Devoxx</title>
		<link href="http://www.code-story.net/2012/11/16/what-has-been-done-at-devoxx.html" />
		<updated>2012-11-16T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/11/16/what-has-been-done-at-devoxx</id>
		<content type="html">&lt;p&gt;Yesterday we finished the &lt;a href='http://devoxx.com/display/DV12/Code+Story'&gt;Devoxx session&lt;/a&gt; of Code-Story.&lt;/p&gt;

&lt;p&gt;Our challenge was to develop &lt;a href='http://fight.code-story.net'&gt;Code-Story Fight&lt;/a&gt;, a website that allows users to create and share fights between two keywords(speaker, tag, subject), &amp;#8220;a la&amp;#8221; Google Fight. Then you get the scores based on what people liked the most at Devoxx.&lt;/p&gt;

&lt;p&gt;Before the event we hacked a &lt;a href='http://planning.code-story.net'&gt;schedule website&lt;/a&gt; using our Code-Story standards :) in order to gather votes for Devoxx talks. This data was leveraged by the &lt;a href='http://fight.code-story.net'&gt;fight website&lt;/a&gt; bootstrapped in front of the Devoxxians.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/fight-session.jpg' alt='One session' /&gt;&lt;/p&gt;

&lt;p&gt;We did develop the website and did deploy it very quickly. Here are some stats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 hours of coding&lt;/li&gt;

&lt;li&gt;a website deployed from hour one&lt;/li&gt;

&lt;li&gt;about 1300 votes by 70 people&lt;/li&gt;

&lt;li&gt;more than 4000 hits on the fight application!&lt;/li&gt;

&lt;li&gt;cool features like bookmarkable urls, &lt;em&gt;tweet this page&lt;/em&gt;, css animations, Top Fights, etc&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src='/images/fight-firstversion.jpg' alt='First version of our application' /&gt;&lt;/p&gt;

&lt;p&gt;This session was great and we hope that everybody enjoyed the show. Please fork &lt;a href='https://github.com/CodeStory/code-story-fight'&gt;our repository&lt;/a&gt;: this is merely what we have done during this crazy two days of live coding.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Screencast - adding Guice</title>
		<link href="http://www.code-story.net/2012/11/07/CodeStory-screencast-add-guice.html" />
		<updated>2012-11-07T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/11/07/CodeStory-screencast-add-guice</id>
		<content type="html">&lt;p&gt;When some classes interact with each others then dependency injection may play a key role into keeping code clean and fully testable.&lt;/p&gt;

&lt;p&gt;Starting from &lt;a href='https://github.com/CodeStory/code-story-world/commit/398b5d2547b489336fa3f7d5771f49ff8219fdd7'&gt;commit 398b5d2547&lt;/a&gt;, we have introduced &lt;a href='http://code.google.com/p/google-guice'&gt;Google Guice&lt;/a&gt; into our &lt;a href='http://fight.code-story.net/planning.html'&gt;planning application&lt;/a&gt;. We use it with Jersey because it is well integrated.&lt;/p&gt;

&lt;p&gt;This screencast shows why and how we started usinging it.&lt;/p&gt;
&lt;iframe mozallowfullscreen='mozallowfullscreen' src='http://player.vimeo.com/video/52971931?badge=0' webkitAllowFullScreen='webkitAllowFullScreen' allowFullScreen='allowFullScreen' frameborder='0' height='449' width='800'&gt;screencast&lt;/iframe&gt;
&lt;p&gt;Come to see us at &lt;a href='http://devoxx.com/display/DV12/Code+Story'&gt;Devoxx&lt;/a&gt;!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Screencast - add screen name to planning application</title>
		<link href="http://www.code-story.net/2012/10/31/CodeStory-screencast-screename-feature.html" />
		<updated>2012-10-31T00:00:00-07:00</updated>
		<id>http://www.code-story.net/2012/10/31/CodeStory-screencast-screename-feature</id>
		<content type="html">&lt;p&gt;We have recently deployed a new &lt;a href='http://fight.code-story.net/planning.html'&gt;planning application&lt;/a&gt; which allows users to star any &lt;a href='http://www.devoxx.com'&gt;Devoxx World 2012&lt;/a&gt; talks they like.&lt;/p&gt;

&lt;p&gt;Although the code of this application is available &lt;a href='https://github.com/CodeStory/code-story-world'&gt;on github&lt;/a&gt;, we think that a screencast may be useful to whet your appetite until &lt;a href='http://devoxx.com/display/DV12/Code+Story'&gt;our live coding at Devoxx&lt;/a&gt;.&lt;/p&gt;
&lt;iframe src='http://www.youtube.com/embed/6BDr4_XN1d4?rel=0' allowfullscreen='allowfullscreen' frameborder='0' height='450' width='800'&gt;screencast&lt;/iframe&gt;
&lt;p&gt;This is an explanation of &lt;a href='https://github.com/CodeStory/code-story-world/commit/cfd7b5fbf56dd9c48e476bfa3a8bf1915b62de1d'&gt;commit cfd7b5fbf5&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Sébastian</title>
		<link href="http://www.code-story.net/about/sebastian.html" />
		<updated>2012-09-03T00:00:00-07:00</updated>
		<id>http://www.code-story.net/about/sebastian</id>
		<content type="html">&lt;p&gt;Sébastian likes Software Development Done Right.&lt;/p&gt;

&lt;p&gt;He is passionate about software development and innovative technologies. Java is his natural language but craft some code using ruby or javascript as well. He likes to release early and release often to end users by using agility practices.&lt;/p&gt;

&lt;p&gt;You may be able to meet him in a coding dojo or a live coding session. He works at Xebia since 2011 as a consultant.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Jean-Laurent</title>
		<link href="http://www.code-story.net/about/jean-laurent.html" />
		<updated>2012-09-03T00:00:00-07:00</updated>
		<id>http://www.code-story.net/about/jean-laurent</id>
		<content type="html">&lt;p&gt;&lt;a href='http://twitter.com/morlhon'&gt;Jean-Laurent de Morlhon&lt;/a&gt;, I&amp;#8217;m CTO at &lt;a href='http://studio.xebia.fr'&gt;Xebia Studio&lt;/a&gt;, have founded &lt;a href='http://serpodile.com'&gt;Serpodile&lt;/a&gt; to help all the kids write easily and am an happy father of 4 kids. I write software for almost 15 years.&lt;/p&gt;

&lt;p&gt;I love the act of writing software transforming a vague idea from the mind of someone, into an efficient software which really helps.&lt;/p&gt;

&lt;p&gt;Writing software is often associated with bloat, bugs, late, unmaintainable code and crappy interface. I like challenging this idea, and thrive to convince people that there is another way of writing software. For that matter I explore the software craftsmanship movement and built from the ground up the &lt;a href='http://studio.xebia.fr'&gt;Xebia Studio&lt;/a&gt; where we write elegant software for client who care for quickness and quality.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m a tdd guy, and I host many &lt;a href='http://coderetreat.org/about'&gt;coderetreats&lt;/a&gt;, to meet clever developpers, learn new techniques, and just train.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Eric</title>
		<link href="http://www.code-story.net/about/eric.html" />
		<updated>2012-09-03T00:00:00-07:00</updated>
		<id>http://www.code-story.net/about/eric</id>
		<content type="html">&lt;p&gt;&lt;a href='http://twitter.com/ericlemerdy'&gt;Eric&lt;/a&gt; is especially happy when he codes.&lt;/p&gt;

&lt;p&gt;Led by Agile spirit, he enjoys belonging to a cool code team and sharing its happiness. In addition to his interest for practicing the art of programming, he also likes theory. Lean Software Developement satisfies his interest for both japanese culture and people empowering models that work.&lt;/p&gt;

&lt;p&gt;Inspired by Software Craftsmanship, he tries to remove a feature every day and evict legacy from this world (legacy being code that could have been written the day before by himself).&lt;/p&gt;

&lt;p&gt;He is a happy member of &lt;a href='http://blog.valtech.fr'&gt;Valtech Technology Paris&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>David</title>
		<link href="http://www.code-story.net/about/david.html" />
		<updated>2012-09-03T00:00:00-07:00</updated>
		<id>http://www.code-story.net/about/david</id>
		<content type="html">&lt;p&gt;Hi, my name is &lt;a href='http://twitter.com/dgageot'&gt;David Gageot&lt;/a&gt;, freelance developer.&lt;/p&gt;

&lt;p&gt;My passion&amp;#160;? Writing complex yet simple software. Trying to be a facilitator helping teams being more innovative and more efficient, leveraging both my creativity and my expertise.&lt;/p&gt;

&lt;p&gt;I started coding with Logo 28 years ago. I&amp;#8217;ve been participating to Java projets since 1995, as &lt;a href='http://fr.adesoft.com/'&gt;Adesoft&lt;/a&gt;&amp;#8217;s R&amp;#38;D leader, as Java and Agile consultant at &lt;a href='http://www.valtech.fr/fr/index/it.html'&gt;Valtech&lt;/a&gt;, CTO at &lt;a href='http://blog.javabien.net/?s=algodeal'&gt;Algodeal&lt;/a&gt;, a hedge fund and then developer at &lt;a href='http://www.sonarsource.com'&gt;SonarSource&lt;/a&gt;, the company behind &lt;a href='http://www.sonarsource.org'&gt;Sonar&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In 2010, I took the leadership on open-sourced &lt;a href='http://infinitest.github.com'&gt;Infinitest&lt;/a&gt;. An Eclipse and IntelliJ plugin that runs unit tests as soon as changes are made to the source code. Infinitest is the dream come true for TDD addicts because it dramatically reduces feedback loops.&lt;/p&gt;

&lt;p&gt;You might be a reader of my blog &lt;a href='http://javabien.net/'&gt;JavaBien!&lt;/a&gt; since 2004.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>CodeStory at Devoxx World, November 14-15</title>
		<link href="http://www.code-story.net/2012/09/03/CodeStoryWorld.html" />
		<updated>2012-09-03T00:00:00-07:00</updated>
		<id>http://www.code-story.net/2012/09/03/CodeStoryWorld</id>
		<content type="html">&lt;p&gt;Last year, at Devoxx France, the CodeStory Team live-coded an &lt;a href='http://prod.code-story.net/index.html'&gt;application&lt;/a&gt; from scratch, in front of the audience. (Parleys in french, &lt;a href='http://www.parleys.com/#st=5&amp;amp;id=3174&amp;amp;sl=0'&gt;here&lt;/a&gt; and &lt;a href='http://www.parleys.com/#st=5&amp;amp;id=3179&amp;amp;sl=0'&gt;here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Because we received an &lt;a href='http://www.google.com/#hl=en&amp;amp;q=codestory+devoxx'&gt;amazing feedback&lt;/a&gt;, we are back at Devoxx world, in english this time, with a new application.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/team.jpeg' alt='CodeStory Team' /&gt;&lt;/p&gt;

&lt;p&gt;You want real code, no slides, right? Same for us. During two days (wednesday and thursday), you’re going to participate to the development of an exciting application and discover great programming techniques.&lt;/p&gt;

&lt;p&gt;We’ll breakdown the show in one hour long sessions, using visual feedback tools, making sure you understand what we’re doing.&lt;/p&gt;

&lt;p&gt;Can&amp;#8217;t wait to meeting you there, and stay tune for the preparation of the show might keep you interested too!&lt;/p&gt;

&lt;p&gt;Photo: &lt;a href='https://plus.google.com/u/0/105461265446151835406/photos'&gt;Arnaud Héritier&lt;/a&gt; and &lt;a href='https://plus.google.com/118041907032714528693/photos'&gt;Pierre-Antoine Grégoire&lt;/a&gt;&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>CodeStory @ ParisJUG</title>
		<link href="http://www.code-story.net/2012/02/17/CodeStory-au-ParisJug.html" />
		<updated>2012-02-17T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/02/17/CodeStory-au-ParisJug</id>
		<content type="html">&lt;p&gt;Nous avons convié nos 5 binômes au ParisJUG, qui nous a fait l&amp;#8217;honneur de recevoir cette dernière étape de sélection pour CodeStory. Pas loin de 180 personnes se sont déplacées pour assister à cette soirée du JUG, le soir de la Saint Valentin. Nous avons fait un hommage virtuel à &amp;#8220;nos moitiés&amp;#8221; comme il se doit.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/rose.jpeg' alt='rose' /&gt;&lt;/p&gt;

&lt;p&gt;Le but de la soirée est de trouver le binôme qui va nous accompagner pour Devoxx, parmis les 5 binômes que nous avons &amp;#8220;short-listés&amp;#8221;. Pour nous aider dans cette tâche nous avons demandé à 3 personnes de jouer le rôle de Jury.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://ericlefevre.net/'&gt;Eric Lefevre-Ardant&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.touilleur-express.fr/'&gt;Nicolas Martignole&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.arkey.fr/'&gt;Brice Dutheil&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les 5 binômes vont se succéder sur scène, pour coder un exercice par période de 5 minutes. Au bout de 5 minutes ils vont soumettre leur code à un repository git à travers un réseau wifi monté pour l&amp;#8217;occasion afin que le binôme suivant continu l&amp;#8217;exercice. Le format est celui d&amp;#8217;un Randori que l&amp;#8217;on rencontre parfois dans les coding dojos. Nous avons un peu pimenté l&amp;#8217;exercice en donnant la possibilité au jury à tout moment de &amp;#8220;buzzer&amp;#8221; un binôme et de le renvoyer sur sa chaise s&amp;#8217;il est ennuyeux ou que le code produit est &amp;#8220;mauvais&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Aprés une courte présentation pour rappel à tous ceux qui ne connaissent pas encore le principe de CodeStory, nous avons présenté l&amp;#8217;exercice du soir.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Application Bancaire.

Pensez à votre expérience personnelle de compte bancaire. Dans le doute de l&amp;#39;application d&amp;#39;une règle, partez sur la solution la plus simple.

Fonctions :
#1 Opérations de bases sur le compte bancaire (Dépôt, Retrait)
#2 Transfert d&amp;#39;argent vers un client de la même banque.
#3 Encours de compte (Inclure toutes les opérations avec la date, le montant et la balance)
#4 Afficher l&amp;#39;encours de compte sur la console
#5 Filtrer la liste d&amp;#39;encours en fonction d&amp;#39;une période de temps et d&amp;#39;un montant (moins/plus) que ce montant)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Cet exercice est dérivé d&amp;#8217;un kata nommé &lt;a href='https://github.com/xebia-france/oobank-kata'&gt;OOBank&lt;/a&gt;, que nous utilisons de temps en temps à Xebia pour illustrer &lt;a href='http://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign'&gt;OOD&lt;/a&gt; et &lt;a href='http://c2.com/cgi/wiki?DomainDrivenDesign'&gt;DDD&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Le binôme constitué de Florent Biville &amp;amp; Pierre-Yves Ricau a démarré la session.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/piwai.jpeg' alt='piwai' /&gt;&lt;/p&gt;

&lt;p&gt;5 minutes plus tard, ils ont été remplacés par Jean-Baptiste Lievremont et Nicolas Peru qui ont fait le déplacement depuis la Suisse.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/swissguys.jpeg' alt='swiss' /&gt;&lt;/p&gt;

&lt;p&gt;Fabrice Croiseaux &amp;amp; Antoine Detante venant du Luxembourg, avec des polos CodeStory bien réussis, ont pris leur place en introduisant un objet qui va dérouter les binômes suivants.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/fabrice.jpeg' alt='lux' /&gt;&lt;/p&gt;

&lt;p&gt;Guillaume Tardif et Frédéric Fallière ont eu du mal à se dépatouiller du code de leur prédécesseur.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/guillaume.jpeg' alt='gui' /&gt;&lt;/p&gt;

&lt;p&gt;Pour finir le dernier binôme, constitué d&amp;#8217;Eric et Sebastian Lemerdy arborant des casquettes de Mario &amp;amp; Luigi.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/twin.jpeg' alt='twin' /&gt;&lt;/p&gt;

&lt;p&gt;Aprés la pause, le jury a été en droit d&amp;#8217;éliminer les binômes les plus &amp;#8220;ennuyeux&amp;#8221;. Etant donné la pression assez forte de ce &amp;#8220;live coding&amp;#8221; en public, David et Jean-Laurent se sont prêtés au jeu et ont un peu nettoyé le code des binômes, non sans se prendre quelques railleries bien méritées.&lt;/p&gt;

&lt;p&gt;Nous avons ensuite repris le randori, un binôme après l&amp;#8217;autre toutes les 5 minutes.&lt;/p&gt;

&lt;p&gt;Le premier binôme a se faire éliminer en tentant d&amp;#8217;introduire une notion d&amp;#8217;opération a été nos amis Suisses, malgré les &lt;a href='https://twitter.com/#!/GenevaJUG/status/169528342876389376'&gt;menaces&lt;/a&gt;, le jury a bien tenu. Dans la foulée il a éliminé le binôme emmené par Pierre-Yves puis celui de Guillaume. Pour des raisons similaires.&lt;/p&gt;

&lt;p&gt;Le jury, emmené par Nicolas Martignole, a proposé de repêcher un des 3 groupes en demandant au public du JUG de voter via twitter. Sans équivoques, le binôme de Pierre-Yves a été repeché.&lt;/p&gt;

&lt;p&gt;Quelques itérations après, nous avons atteint le temps imparti. Nous avons demandé aux membres du jury de voter pour l&amp;#8217;un des 3 binômes restant.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/finalcountdown.jpeg' alt='finalcountdown' /&gt;&lt;/p&gt;

&lt;p&gt;Et les gagnants sont Eric &amp;amp; Sebastian Lemerdy, posant fièrement avec les organisateurs.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/winners.jpeg' alt='winners' /&gt;&lt;/p&gt;

&lt;p&gt;C&amp;#8217;était un exercice particulièrement difficile, coder en live devant 180 personnes, sur du code que vous n&amp;#8217;avez pas écrit, pour une durée de 5 minutes&amp;#8230; Merci à tous les participants de CodeStory, aux organisateurs et aux participants du JUG pour avoir rendu possible cette soirée.&lt;/p&gt;

&lt;p&gt;Le jury a été juste et impartial et nous avons hâte de vous dévoiler le reste de l&amp;#8217;aventure CodeStory que nous allons maintenant préparer à 4.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Introduction à la finale</title>
		<link href="http://www.code-story.net/2012/02/16/Finale-Intro.html" />
		<updated>2012-02-16T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/02/16/Finale-Intro</id>
		<content type="html">&lt;p&gt;Voici les slides d&amp;#8217;introduction à la finale de la sélection Code Story au Paris JUG :&lt;/p&gt;
&lt;script src='http://speakerdeck.com/embed/4f3ca7f8fd7df8001f00086b.js' /&gt;</content>
	</entry>
	
	<entry>
		<title>GildedRose WebStyle</title>
		<link href="http://www.code-story.net/2012/02/09/GildedRose-WebStyle.html" />
		<updated>2012-02-09T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/02/09/GildedRose-WebStyle</id>
		<content type="html">&lt;p&gt;Le second tour de codestory qui a eu lieu le 1er février dernier a été une soirée haute en couleurs. David et moi même avons accueillis 14 binômes particulièrement motivés. 6 personnes venant de Suisse, 4 du Luxembourg et 18 de France (essentiellement de région Parisienne).&lt;/p&gt;

&lt;p&gt;Nous avions préparé pour nous les organisateurs une paire de tshirt CodeStory histoire de mettre tout le monde dans l&amp;#8217;ambiance. Mais plusieurs binômes avaient, eux aussi, préparé des tshirts assez élaborés. Bravo encore à vous pour votre préparation.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/tshirt2.jpeg' alt='tshirt1' /&gt;&lt;/p&gt;

&lt;p&gt;Chaque binôme a amené son propre matériel, Xebia fournissant boissons, nourriture et wifi.&lt;/p&gt;

&lt;p&gt;Après les encouragements de notre guest star du soir, à savoir Nicolas Martignole, auteur du blog le Touilleur Express et organisateur de la conférence Devoxx France, pendant laquelle CodeStory va se dérouler.&lt;/p&gt;

&lt;h1 id='lexercice'&gt;L&amp;#8217;exercice&lt;/h1&gt;

&lt;p&gt;L&amp;#8217;exercice de la soirée consistait à hériter d&amp;#8217;un bout de code particulièrement atroce, d&amp;#8217;ajouter une nouvelle fonction dans celui-ci puis de présenter le tout dans une webapp. Le tout en 2 heures, compréhension de l&amp;#8217;exercice compris !&lt;/p&gt;

&lt;p&gt;L&amp;#8217;exercice en question est un dérivé du kata de refactoring nommé GildedRose dont voici l&amp;#8217;énoncé :&lt;/p&gt;

&lt;h2 id='gilded_rose_kata'&gt;Gilded Rose Kata&lt;/h2&gt;

&lt;p&gt;Hi and welcome to team Gilded Rose. As you know, we are a small inn with a prime location in a prominent city ran by a friendly innkeeper named Allison. We also buy and sell only the finest goods. Unfortunately, our goods are constantly degrading in quality as they approach their sell by date. We have a system in place that updates our inventory for us. It was developed by a no-nonsense type named Leeroy, who has moved on to new adventures.&lt;/p&gt;

&lt;h2 id='your_tasks'&gt;Your tasks&lt;/h2&gt;

&lt;p&gt;Your tasks are to :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add the new feature to our system so that we can begin selling a new category of items.&lt;/li&gt;

&lt;li&gt;Present the system as a web application so that we can take orders worldwide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First an introduction to our system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All items have a SellIn value which denotes the number of days we have to sell the item&lt;/li&gt;

&lt;li&gt;All items have a Quality value which denotes how valuable the item is&lt;/li&gt;

&lt;li&gt;At the end of each day our system lowers both values for every item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pretty simple, right? Well this is where it gets interesting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the sell by date has passed, Quality degrades twice as fast&lt;/li&gt;

&lt;li&gt;The Quality of an item is never negative&lt;/li&gt;

&lt;li&gt;“Aged Brie” actually increases in Quality the older it gets&lt;/li&gt;

&lt;li&gt;The Quality of an item is never more than 50&lt;/li&gt;

&lt;li&gt;“Sulfuras”, being a legendary item, never has to be sold or decreases in Quality&lt;/li&gt;

&lt;li&gt;“Backstage passes”, like aged brie, increases in Quality as it’s SellIn value approaches; Quality increases by 2 when there are 10 days or less and by 3 when there are 5 days or less but Quality drops to 0 after the concert&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='new_feature'&gt;New feature&lt;/h2&gt;

&lt;p&gt;We have recently signed a supplier of conjured items. This requires an update to our system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Conjured” items degrade in Quality twice as fast as normal items&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L&amp;#8217;exercice est &amp;#8220;livré&amp;#8221; avec la classe &lt;a href='https://github.com/CodeStory/code-story-step2/blob/master/src/main/java/gildedrose/Inn.java'&gt;Inn&lt;/a&gt; (qui a elle seule vaut le détour) et &lt;a href='https://github.com/CodeStory/code-story-step2/blob/master/src/main/java/gildedrose/Item.java'&gt;Item&lt;/a&gt;. Vous trouverez l&amp;#8217;ensemble de l&amp;#8217;exercice dans le dépot &lt;a href='https://github.com/CodeStory/code-story-step2'&gt;github de codestory&lt;/a&gt;&lt;/p&gt;

&lt;h1 id='droul'&gt;Déroulé&lt;/h1&gt;

&lt;p&gt;Sur un exercice de ce style, et vu le code absolument abominable que l&amp;#8217;on récupère, ajouter du comportement dans le code sans un minimum de tests est un allez simple pour un crash en beauté. La plupart des binômes l&amp;#8217;ont compris assez vite en commençant à tisser un harnais de tests.&lt;br /&gt; Le harnais de tests permet, dans cet exercice, de mieux comprendre le fonctionnement du système et de rentrer dans l&amp;#8217;exercice progressivement sans forcément tout avoir à comprendre d&amp;#8217;un coup.&lt;br /&gt; Une fois ce harnais de tests plus ou moins constitué, vient la phase de refactoring de la méthode &lt;strong&gt;updateQuality&lt;/strong&gt; de la classe &lt;strong&gt;Inn&lt;/strong&gt;, afin de simplifier un peu ces imbrications impossibles de if.&lt;br /&gt; Certains binômes ont cherché à pousser très loin le refactoring, qui n&amp;#8217;a rien d&amp;#8217;un refactoring facile. D&amp;#8217;autres on simplement profité du harnais de tests pour ajouter la nouvelle fonctionnalité en toute confiance.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/tshirt1.jpeg' alt='tshirt2' /&gt;&lt;/p&gt;

&lt;p&gt;L&amp;#8217;exercice étant limité à 2 heures, certains ont du se résoudre soit à finir le refactoring pour présenter le code le plus propre possible, soit à démarrer la webapp. Certains ont choisi la première voie, d&amp;#8217;autre la seconde. Parfois dans les dernières 10 minutes, non sans un certain stress&amp;#8230;&lt;/p&gt;

&lt;p&gt;A la fin du temps imparti nous avions 6 binômes ayant partiellement refactoré la méthode &lt;strong&gt;UpdateQuality&lt;/strong&gt; (pour certain c&amp;#8217;était vraiment super léger&amp;#8230;), ajouté un harnais de tests sur la classe &lt;strong&gt;Inn&lt;/strong&gt; et présenté le tout dans une WebApp.&lt;/p&gt;

&lt;p&gt;Nous avons eu droit, a une servlet, du SpringMVC, du Simple et même du Play!, le tout parfois agrémenté de css maison voir de Twitter BootStrap pour les plus webaware d&amp;#8217;entre eux.&lt;/p&gt;

&lt;h1 id='conclusion'&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Nous avons sélectionné 5 binômes en partant du principe que ce que nous voulions c&amp;#8217;est l&amp;#8217;ensemble des fonctionnalités. A savoir une webapp avec des objets &amp;#8220;conjured&amp;#8221; fonctionnelle et le code le plus propre possible. Dans cet ordre.&lt;/p&gt;

&lt;p&gt;Vous trouverez la solution &lt;a href='https://github.com/CodeStory/code-story-step2/commits/master'&gt;propre&lt;/a&gt; et &lt;a href='https://github.com/CodeStory/code-story-step2/tree/Ugly'&gt;moins propre&lt;/a&gt; de David et de &lt;a href='https://github.com/jeanlaurent/CodeStoryStep2'&gt;Jean-Laurent&lt;/a&gt; si vous voulez voir à quoi nous sommes arrivé, dans sensiblement les mêmes conditions que les binômes.&lt;/p&gt;

&lt;p&gt;Rendez-vous le 14 février &lt;a href='http://www.parisjug.org/xwiki/bin/view/Meeting/20120214'&gt;au Paris JUG&lt;/a&gt; pour l&amp;#8217;élection du top binôme qui partira faire des étincelles à Devoxx.&lt;/p&gt;

&lt;p&gt;Un autre résumé avec de belles photos est disponible sur le &lt;a href='http://www.touilleur-express.fr/2012/02/04/code-story-demie-finale-chez-xebia/'&gt;site web de Nicolas&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Et les finalistes sont...</title>
		<link href="http://www.code-story.net/2012/02/02/les-finalistes.html" />
		<updated>2012-02-02T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/02/02/les-finalistes</id>
		<content type="html">&lt;p&gt;Merci à tous les participants du deuxième tour de Code Story. Ce fut une soirée vraiment sympa !&lt;/p&gt;

&lt;p&gt;Après moult discussions entre nous, voici la liste des binômes sélectionnés pour la finale de Code Story au Paris JUG le 14/02 :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sébastian et Eric Le Merdy&lt;/li&gt;

&lt;li&gt;Guillaume Tardif et Frederic Falliere&lt;/li&gt;

&lt;li&gt;Jean-Baptiste Lièvremont et Nicolas Peru&lt;/li&gt;

&lt;li&gt;Florent Biville et Pierre-Yves Ricau&lt;/li&gt;

&lt;li&gt;Fabrice Croiseaux et Philippe Eymann&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rendez-vous le 14 février &lt;a href='http://www.parisjug.org/xwiki/bin/view/Meeting/20120214'&gt;au Paris JUG&lt;/a&gt; et ce week-end, sur ce blog, pour un debrief de la soirée du 1er février.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>C'est parti pour le deuxième tour</title>
		<link href="http://www.code-story.net/2012/01/16/deuxieme-tour.html" />
		<updated>2012-01-16T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2012/01/16/deuxieme-tour</id>
		<content type="html">&lt;p&gt;Souvenez-vous, le mois dernier, près de soixantes développeurs passionnés avaient participé au &lt;a href='/2011/12/22/bravo.html'&gt;premier tour&lt;/a&gt; de sélection de CodeStory. En ligne de mire, une participation à &lt;a href='http://www.devoxx.fr/display/FR12/Accueil'&gt;Devoxx France&lt;/a&gt; pour deux jours de folie pendant lesquels nous allons coder, en direct, une application à huit mains (Car oui, deux binômes, ça fait huit mains).&lt;/p&gt;

&lt;p&gt;Mais il reste encore deux étapes pour sélection notre binôme gagnant.&lt;/p&gt;

&lt;h1 id='prochaine_tape_dans_deux_semaines'&gt;Prochaine étape dans deux semaines&lt;/h1&gt;

&lt;p&gt;Dans deux semaines, le 01 février, les 15 binômes survivants vont se réunir dans les locaux de Xebia pour s&amp;#8217;affronter en huis clos autour d&amp;#8217;un kata préparé par Jean-Laurent et moi. Chut, le sujet est encore secret, il ne sera dévoilé que le soir même pour donner des chances égales à chaque équipe.&lt;/p&gt;

&lt;p&gt;Lors de cet affrontement, nous allons passer un peu de temps avec chaque binôme afin de voir comment il travaille. Quel est leur niveau de maitrise de leurs outils ? Savent-ils écrire du code simple et efficace ? Sont-ils des adeptes du test-first ? Ont-ils un mode de raisonnement et de travail compatible avec le nôtre ?&lt;/p&gt;

&lt;p&gt;L&amp;#8217;enjeu est important. Dès le 03 février, nous annoncerons sur ce blog les trois ou quatre binômes finalistes. Ceux qui devront se battre jusqu&amp;#8217;à la mort lors de l&amp;#8217;ultime étape &amp;#8221;&lt;a href='http://www.parisjug.org/xwiki/bin/view/Meeting/20120214'&gt;au Paris JUG&lt;/a&gt;&amp;#8221;&lt;/p&gt;

&lt;h1 id='le_paris_jug_en_fvrier'&gt;Le Paris JUG en Février&lt;/h1&gt;

&lt;p&gt;Les romains avaient des gladiateurs et des arênes, les espagnols, la corrida, et Tron, sa Disc Arena. Et bien le Paris JUG a maintenant son &lt;strong&gt;Ultimate Randori Night&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En voici les règles :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Les binômes finalistes vont s&amp;#8217;affronter jusqu&amp;#8217;à l&amp;#8217;élimination de tous sauf un.&lt;/li&gt;

&lt;li&gt;Ils vont développer une petite application en prenant à tour de rôle le clavier.&lt;/li&gt;

&lt;li&gt;Par tranche de 5 minutes (&lt;strong&gt;Randori&lt;/strong&gt;), ils vont devoir construire une application en suivant les règles imposées.&lt;/li&gt;

&lt;li&gt;Pour ajouter un peu de fun, les règles changeront en cours de route sans prévenir !&lt;/li&gt;

&lt;li&gt;Pour encore plus de fun, le public pourra proposer ses propres règles&lt;/li&gt;

&lt;li&gt;Pendant qu&amp;#8217;ils codent, et expliquent ce qu&amp;#8217;ils font, un jury implacable commentera et jugera leurs mouvements, buzzer à la main.&lt;/li&gt;

&lt;li&gt;Avant le buffet, un binôme buzzé passe le relais.&lt;/li&gt;

&lt;li&gt;Après le buffet, le buzzer est éliminatoire.&lt;/li&gt;

&lt;li&gt;Le binôme survivant participera à Devoxx France.&lt;/li&gt;

&lt;li&gt;En cas d&amp;#8217;égalité, c&amp;#8217;est le public qui trancera à l&amp;#8217;applaudimètre&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour toi public, c&amp;#8217;est l&amp;#8217;occasion de voir de bons développeurs à l&amp;#8217;action, dans un climat de compétition amicale, où tous les coups bas sont permis, où la frime est non seulement tolérée mais encouragée et où le fun et le beau code doivent cohabiter.&lt;/p&gt;

&lt;p&gt;Prêts ? Rendez-vous en Février.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Bravo aux participants du premier tour</title>
		<link href="http://www.code-story.net/2011/12/22/bravo.html" />
		<updated>2011-12-22T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2011/12/22/bravo</id>
		<content type="html">&lt;p&gt;Waouh ! Une soixantaine de soumissions. Autant de projets à lire, parfois à décrypter et finalement à juger. Au fil de nos lectures, nous vous avons concocté un petit florilège.&lt;/p&gt;

&lt;h1 id='les_invitables_oneliners'&gt;Les inévitables one-liners&lt;/h1&gt;

&lt;p&gt;Certains d&amp;#8217;entre vous se souviennent peut être des GFA Punchs de STMag. Le challenge consistait à coder en 20 lignes de Basic les applications les plus folles. De nos jours, la mode est aux 140 caractères max pour tenir dans un tweet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;En Scala (127 caractères)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='scala'&gt;&lt;span class='k'&gt;for&lt;/span&gt;&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='k'&gt;&amp;lt;-&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt; &lt;span class='n'&gt;to&lt;/span&gt; &lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;&lt;span class='n'&gt;m&lt;/span&gt;&lt;span class='o'&gt;=(&lt;/span&gt;&lt;span class='nc'&gt;Seq&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;).&lt;/span&gt;&lt;span class='n'&gt;filter&lt;/span&gt;&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;}++(&lt;/span&gt;&lt;span class='nc'&gt;Seq&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;&lt;span class='n'&gt;collect&lt;/span&gt;&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='n'&gt;c&lt;/span&gt;&lt;span class='o'&gt;@(&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;&lt;span class='k'&gt;=&amp;gt;&lt;/span&gt;&lt;span class='n'&gt;c&lt;/span&gt;&lt;span class='o'&gt;}))&lt;/span&gt;&lt;span class='n'&gt;map&lt;/span&gt;&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='nc'&gt;Map&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;En Ioke (117 caractères)&lt;/em&gt;&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;.&lt;/span&gt;&lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='p'&gt;,(&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='n'&gt;map&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;d&lt;/span&gt;&lt;span class='p'&gt;,(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='n'&gt;d&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='mi'&gt;8&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;d&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;+[&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='n'&gt;map&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;d&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;case&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;d&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt;&lt;span class='n'&gt;sum&lt;/span&gt; &lt;span class='p'&gt;?&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='n'&gt;println&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;En Groovy (137 caractères)&lt;/em&gt;&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='n'&gt;j&lt;/span&gt;&lt;span class='o'&gt;=[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:&amp;#39;Foo&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;5&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:&amp;#39;Bar&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;7&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:&amp;#39;Qix&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;.&lt;/span&gt;&lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt;&lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='n'&gt;println&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;inject&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;){&lt;/span&gt;&lt;span class='n'&gt;w&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='n'&gt;k&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='n'&gt;w&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='n'&gt;k?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:j&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;$k&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)}&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;$n&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;collect&lt;/span&gt;&lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='n'&gt;j&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='n'&gt;it&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='sc'&gt;?:&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;}&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;sum&lt;/span&gt;&lt;span class='p'&gt;()?&lt;/span&gt;&lt;span class='ss'&gt;:n&lt;/span&gt;&lt;span class='p'&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notez qu&amp;#8217;aucun one-liner n&amp;#8217;a été sélectionné pour le second tour. Il s&amp;#8217;agissait plus de soumissions pour le fun. Et c&amp;#8217;est vrai que c&amp;#8217;est fun même si ça pique un peu les yeux !&lt;/p&gt;

&lt;h1 id='les_sages'&gt;Les sages&lt;/h1&gt;

&lt;p&gt;Notez qu&amp;#8217;en Ruby, on peut aussi faire du code propre. Très propre même si on réfrène ses envies de tout compacter.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;Foo&lt;/span&gt;
  &lt;span class='no'&gt;EQ&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='mi'&gt;3&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
    &lt;span class='mi'&gt;5&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
    &lt;span class='mi'&gt;7&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;
  &lt;span class='p'&gt;}&lt;/span&gt;

  &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nc'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='nf'&gt;eval&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='n'&gt;retour&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;divisible_ou_contient_un_chiffre&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='n'&gt;retour&lt;/span&gt; &lt;span class='o'&gt;!=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class='p'&gt;?&lt;/span&gt; &lt;span class='n'&gt;retour&lt;/span&gt; &lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;to_s&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;

  &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nc'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='nf'&gt;divisible_ou_contient_un_chiffre&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='n'&gt;listes_des_diviseurs&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;join&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;\&lt;/span&gt;
    &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;lettres&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;map&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;lettre&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='n'&gt;symbol_equivalent&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;lettre&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;join&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;

  &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nc'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='nf'&gt;listes_des_diviseurs&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='no'&gt;EQ&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;select&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;k&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='n'&gt;k&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;values&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;

  &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nc'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='nf'&gt;lettres&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;to_s&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;split&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;

  &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nc'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='nf'&gt;symbol_equivalent&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;lettre&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='no'&gt;EQ&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='n'&gt;lettre&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;to_i&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En Fantom, pareil :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;&lt;span class='kd'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;FBQNumber&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
  &lt;span class='n'&gt;Int&lt;/span&gt; &lt;span class='n'&gt;number&lt;/span&gt;
  &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nf'&gt;make&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;Int&lt;/span&gt; &lt;span class='n'&gt;number&lt;/span&gt;&lt;span class='o'&gt;){&lt;/span&gt;
    &lt;span class='k'&gt;this&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;number&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;number&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;
  
  &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;Str&lt;/span&gt; &lt;span class='nf'&gt;count&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;Int&lt;/span&gt; &lt;span class='n'&gt;target&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;..&lt;/span&gt;&lt;span class='na'&gt;target&lt;/span&gt;&lt;span class='o'&gt;).&lt;/span&gt;&lt;span class='na'&gt;map&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;number&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='n'&gt;Str&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt; &lt;span class='n'&gt;FBQNumber&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;number&lt;/span&gt;&lt;span class='o'&gt;).&lt;/span&gt;&lt;span class='na'&gt;toStr&lt;/span&gt;  &lt;span class='o'&gt;}&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;join&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;

  &lt;span class='n'&gt;override&lt;/span&gt; &lt;span class='n'&gt;Str&lt;/span&gt; &lt;span class='nf'&gt;toStr&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='n'&gt;Str&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;:=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt;  &lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;))&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;
    
    &lt;span class='n'&gt;number&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toStr&lt;/span&gt;&lt;span class='o'&gt;().&lt;/span&gt;&lt;span class='na'&gt;each&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;digit&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt; 
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;digit&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toChar&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;3&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt; 
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;digit&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toChar&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt; 
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;digit&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toChar&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;7&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt; 
    &lt;span class='o'&gt;}&lt;/span&gt;
    
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='n'&gt;number&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toStr&lt;/span&gt; 
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;
  
  &lt;span class='n'&gt;Bool&lt;/span&gt; &lt;span class='nf'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;Int&lt;/span&gt; &lt;span class='n'&gt;multiple&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;number&lt;/span&gt; &lt;span class='o'&gt;!=&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class='n'&gt;number&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;mod&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;multiple&lt;/span&gt;&lt;span class='o'&gt;)==&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il y a aussi des exemples à mi-chemin. Ni trop compact, ni très verbeux. En Groovy.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;.&lt;/span&gt;&lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;pfx&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;it&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Foo&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:&amp;#39;&amp;#39;&lt;/span&gt;
    &lt;span class='n'&gt;pfx&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='n'&gt;it&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Bar&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:&amp;#39;&amp;#39;&lt;/span&gt;
    &lt;span class='n'&gt;pfx&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='n'&gt;it&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Qix&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:&amp;#39;&amp;#39;&lt;/span&gt;
    
    &lt;span class='n'&gt;res&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;pfx&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;$it&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;collect&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='n'&gt;n&lt;/span&gt; &lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;       
       &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Foo&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:n&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;5&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Bar&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:n&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;7&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Qix&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:pfx?&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class='ss'&gt;:n&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;sum&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;

    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;res&lt;/span&gt; &lt;span class='o'&gt;=~&lt;/span&gt; &lt;span class='sr'&gt;/[FBQ]/&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='n'&gt;res&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;res&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;replaceAll&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='sr'&gt;/[0-9]/&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='n'&gt;println&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;$it: $res&amp;quot;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id='les_affectifs'&gt;Les affectifs&lt;/h1&gt;

&lt;p&gt;Vous savez, ceux qui ont un outil préféré et l&amp;#8217;utilisent tout le temps. Quitte à complexifier le code.&lt;/p&gt;

&lt;p&gt;Voici par exemple un fan de Pattern Matching en Scala. Le code est très lisible. Mais utiliser match comme un opérateur ternaire (?:), est-ce justifié ? Certains préfereront.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='scala'&gt;&lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='n'&gt;process&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;Int&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;String&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
  &lt;span class='n'&gt;modulo3&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;modulo5&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;modulo7&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;contains&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;toString&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;toList&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='k'&gt;match&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;toString&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='n'&gt;notEmpty&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;notEmpty&lt;/span&gt;
  &lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='n'&gt;modulo3&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;Int&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;String&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt;
  &lt;span class='n'&gt;n&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='mi'&gt;3&lt;/span&gt; &lt;span class='k'&gt;match&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='n'&gt;modulo5&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;Int&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;String&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt;
  &lt;span class='n'&gt;n&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='mi'&gt;5&lt;/span&gt; &lt;span class='k'&gt;match&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='n'&gt;modulo7&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;Int&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;String&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt;
  &lt;span class='n'&gt;n&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='mi'&gt;7&lt;/span&gt; &lt;span class='k'&gt;match&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='n'&gt;contains&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;chars&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;List&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='kt'&gt;Char&lt;/span&gt;&lt;span class='o'&gt;])&lt;/span&gt;&lt;span class='k'&gt;:&lt;/span&gt; &lt;span class='kt'&gt;String&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt;
  &lt;span class='n'&gt;chars&lt;/span&gt; &lt;span class='k'&gt;match&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='nc'&gt;Nil&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='sc'&gt;&amp;#39;3&amp;#39;&lt;/span&gt; &lt;span class='o'&gt;::&lt;/span&gt; &lt;span class='n'&gt;tail&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;contains&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;tail&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='sc'&gt;&amp;#39;5&amp;#39;&lt;/span&gt; &lt;span class='o'&gt;::&lt;/span&gt; &lt;span class='n'&gt;tail&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;contains&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;tail&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='sc'&gt;&amp;#39;7&amp;#39;&lt;/span&gt; &lt;span class='o'&gt;::&lt;/span&gt; &lt;span class='n'&gt;tail&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;contains&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;tail&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
    &lt;span class='k'&gt;case&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt; &lt;span class='o'&gt;::&lt;/span&gt; &lt;span class='n'&gt;tail&lt;/span&gt; &lt;span class='k'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;contains&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;tail&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous avons aussi croisé un grand malade d&amp;#8217;expressions régulières. Lui, il a du souffrir dans sa jeunesse en Perl. Comme s&amp;#8217;était assumé, il nous a bien fait rire. Par contre en production, c&amp;#8217;est moins sympa.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;&lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;value&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;...&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
							 &lt;span class='n'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;value&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;.....&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
							 &lt;span class='n'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;value&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;.......&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;

&lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='nf'&gt;isMultiple&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;valueInString&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;divisor&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;keyWord&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;format&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;%0&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;valueInString&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;).&lt;/span&gt;&lt;span class='na'&gt;replaceAll&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;divisor&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;).&lt;/span&gt;&lt;span class='na'&gt;replaceAll&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;$^&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;keyWord&lt;/span&gt;&lt;span class='o'&gt;).&lt;/span&gt;&lt;span class='na'&gt;replaceAll&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;^(?!&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;keyWord&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;).*$&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;valueInString&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id='les_psychopathes'&gt;Les psychopathes&lt;/h1&gt;

&lt;p&gt;Encore plus dangereux que les fans de regexp, ça existe ? Oui. Il y a les psychopathes. Ceux qui ont plongé trop profond dans les abymes de Java.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;&lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;FooBarQix&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kt'&gt;void&lt;/span&gt; &lt;span class='nf'&gt;main&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;[]&lt;/span&gt; &lt;span class='n'&gt;args&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
        &lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;&amp;lt;=&lt;/span&gt; &lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;++)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
            &lt;span class='n'&gt;System&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;out&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;println&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;Integer&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toString&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;));&lt;/span&gt;
        &lt;span class='o'&gt;}&lt;/span&gt;
    &lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous voyez le problème ? Non. Il est là caché dans deux autres fichiers&amp;#8230;&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;&lt;span class='nb'&gt;echo&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Compiling the source code...&amp;quot;&lt;/span&gt;
javac -sourcepath src -d bin -cp lib/javassist.jar src/main/java/net/thecodersbreakfast/codestory/foobarqix/*.java

&lt;span class='nb'&gt;echo&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Waving hands to unleash some powerful magic and change the whole Java universe as we know it...&amp;quot;&lt;/span&gt;
&lt;span class='nb'&gt;echo&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;(well, at least the Integer class)&amp;quot;&lt;/span&gt;
java -cp lib/javassist.jar:bin net.thecodersbreakfast.codestory.foobarqix.Setup temp

&lt;span class='nb'&gt;echo&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Launching the FooBarQix challenge...&amp;quot;&lt;/span&gt;
java -cp bin -Xbootclasspath/p:temp net.thecodersbreakfast.codestory.foobarqix.FooBarQix
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;&lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='kt'&gt;void&lt;/span&gt; &lt;span class='nf'&gt;main&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;[]&lt;/span&gt; &lt;span class='n'&gt;args&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='n'&gt;ClassPool&lt;/span&gt; &lt;span class='n'&gt;pool&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;ClassPool&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getDefault&lt;/span&gt;&lt;span class='o'&gt;();&lt;/span&gt;
    &lt;span class='n'&gt;CtClass&lt;/span&gt; &lt;span class='n'&gt;cl&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='kc'&gt;null&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;try&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
        &lt;span class='n'&gt;cl&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;pool&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;get&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;java.lang.Integer&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
        &lt;span class='n'&gt;CtMethod&lt;/span&gt; &lt;span class='n'&gt;toStringMethod&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;cl&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getDeclaredMethod&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;toString&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='n'&gt;CtClass&lt;/span&gt;&lt;span class='o'&gt;[]{&lt;/span&gt;&lt;span class='n'&gt;CtClass&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;intType&lt;/span&gt;&lt;span class='o'&gt;});&lt;/span&gt;
        &lt;span class='n'&gt;toStringMethod&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;setBody&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;getCode&lt;/span&gt;&lt;span class='o'&gt;());&lt;/span&gt;
        &lt;span class='n'&gt;cl&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;writeFile&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;args&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;]);&lt;/span&gt;
    &lt;span class='o'&gt;}&lt;/span&gt; &lt;span class='k'&gt;catch&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;Exception&lt;/span&gt; &lt;span class='n'&gt;e&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
        &lt;span class='n'&gt;System&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;err&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;println&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;Could not instrument : &amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;e&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getMessage&lt;/span&gt;&lt;span class='o'&gt;());&lt;/span&gt;
    &lt;span class='o'&gt;}&lt;/span&gt; &lt;span class='k'&gt;finally&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
        &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;cl&lt;/span&gt; &lt;span class='o'&gt;!=&lt;/span&gt; &lt;span class='kc'&gt;null&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
            &lt;span class='n'&gt;cl&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;detach&lt;/span&gt;&lt;span class='o'&gt;();&lt;/span&gt;
        &lt;span class='o'&gt;}&lt;/span&gt;
    &lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;private&lt;/span&gt; &lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='nf'&gt;getCode&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;{&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;if ($1 == Integer.MIN_VALUE) return \&amp;quot;-2147483648\&amp;quot;;\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;int size = ( $1 &amp;lt; 0) ? stringSize(0 - $1 ) + 1 : stringSize( $1 );\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;char[] buf = new char[size];\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;getChars( $1, size, buf);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;StringBuilder fbqBuffer = new StringBuilder();\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;if ( $1 % 3 == 0) fbqBuffer.append(\&amp;quot;Foo\&amp;quot;);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;if ( $1 % 5 == 0) fbqBuffer.append(\&amp;quot;Bar\&amp;quot;);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;if ( $1 % 7 == 0) fbqBuffer.append(\&amp;quot;Qix\&amp;quot;);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;for (int idx=0; idx&amp;lt;buf.length; idx++) {\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;    char c = buf[idx];\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;    if (c==&amp;#39;3&amp;#39;) fbqBuffer.append(\&amp;quot;Foo\&amp;quot;);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;    if (c==&amp;#39;5&amp;#39;) fbqBuffer.append(\&amp;quot;Bar\&amp;quot;);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;    if (c==&amp;#39;7&amp;#39;) fbqBuffer.append(\&amp;quot;Qix\&amp;quot;);\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;}\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;String result = fbqBuffer.toString();\n&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;return result.isEmpty() ? new String(0, size, buf) : result;&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
    &lt;span class='s'&gt;&amp;quot;}&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id='conclusion'&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Pour la fin, un peu de code Java pour montrer qu&amp;#8217;on peut faire du code simple, sans if et (presque) sans boucle, en Java aussi.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;&lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='nf'&gt;generate&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
	&lt;span class='n'&gt;StringBuilder&lt;/span&gt; &lt;span class='n'&gt;builder&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='n'&gt;StringBuilder&lt;/span&gt;&lt;span class='o'&gt;();&lt;/span&gt;
	&lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;&amp;lt;=&lt;/span&gt; &lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;++)&lt;/span&gt;
		&lt;span class='n'&gt;builder&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;append&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;fooBarQix&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;)).&lt;/span&gt;&lt;span class='na'&gt;append&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
	&lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;builder&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;toString&lt;/span&gt;&lt;span class='o'&gt;();&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='nf'&gt;fooBarQix&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
	&lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;line&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;byDivisor&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;byDivisor&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;byDivisor&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;7&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;byDigit&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;byDigit&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;byDigit&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
	&lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;line&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;isEmpty&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt; &lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;valueOf&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='n'&gt;line&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='nf'&gt;byDivisor&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;dividend&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;divisor&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
	&lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;dividend&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='n'&gt;divisor&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='n'&gt;fbq&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='n'&gt;divisor&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt; &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='nf'&gt;byDigit&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
	&lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;fbq&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='n'&gt;n&lt;/span&gt;&lt;span class='o'&gt;%&lt;/span&gt;&lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='o'&gt;];&lt;/span&gt;
&lt;span class='o'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;static&lt;/span&gt; &lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;[]&lt;/span&gt; &lt;span class='n'&gt;fbq&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Foo&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Bar&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Qix&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
	</entry>
	
	<entry>
		<title>Sélection FooBarQix</title>
		<link href="http://www.code-story.net/2011/12/17/selectionfoobarqix.html" />
		<updated>2011-12-17T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2011/12/17/selectionfoobarqix</id>
		<content type="html">&lt;p&gt;Hier était la date de fin de soumission pour la sélection pour participer à CodeStory, le live coding que nous souhaitons organiser dans le cadre de &lt;a href='http://devoxx.com/display/FR12'&gt;Devoxx France&lt;/a&gt; du 18 au 20 avril 2012. Cette pré-sélection consistait à nous fournir un bout de code répondant à des critère précis ainsi que de trouver un binôme pour coder avec nous.&lt;/p&gt;

&lt;h1 id='quelques_statistiques'&gt;Quelques statistiques&lt;/h1&gt;

&lt;p&gt;La participation a été largement au delà de nos espérances, nous sommes en train de dépiler les 55 différentes soumissions de code de la part de 45 personnes différentes (sans compter les binômes). Et le moins que l&amp;#8217;on puisse dire, c&amp;#8217;est qu&amp;#8217;il y a de la variété ! Ces soumissions ont été écrites à l&amp;#8217;aide de 13 langages différents : Java, Scala, Ruby, Groovy, Javascript, Clojure, Haskell, C, Shell, Fantom, Jython, Ioke, Yeti. (Si si, &lt;a href='http://mth.github.com/yeti/'&gt;ça&lt;/a&gt; existe&amp;#8230;) On y trouve de tout, des one-liner, du test first, du test after, des builders, de l&amp;#8217;introspection, du play, du guava, du maven, du clean-code et du moins clean-code, bref un grand éclectisme. Certains ont soumis jusqu&amp;#8217;à 6 solutions différentes.&lt;/p&gt;

&lt;p&gt;Une majorité de Java et pas mal de scala, la participation des autres langages est plus diluée, mais bien présente (1/4). Autant la contrainte de FooBarQix ne demandait que de pouvoir s&amp;#8217;exécuter sur une JVM autant pour le live coding à Devoxx, nous utiliserons Java (7 avec des bouts de 8 dedans en fonction de ce qui sera disponible dans quelques mois). Le live coding en lui même étant déjà assez contraignant pour que nous nous limitions à des langages que nous maitrisons bien. Le but ultime de ce live coding est de fournir une application utilisable à la fin de Devoxx, tout en étant distrayant, instructif &amp;amp; fun.&lt;/p&gt;
&lt;script src='//ajax.googleapis.com/ajax/static/modules/gviz/1.0/chart.js' type='text/javascript'&gt; {&quot;dataSourceUrl&quot;:&quot;//docs.google.com/a/morlhon.net/spreadsheet/tq?key=0Alr12p0nBBordEhMdnFiaVN6YWZZTVR6ZXFfUjhRUGc&amp;transpose=0&amp;headers=0&amp;range=A5%3AB7&amp;gid=1&amp;pub=1&quot;,&quot;options&quot;:{&quot;vAxes&quot;:[{&quot;viewWindowMode&quot;:&quot;pretty&quot;,&quot;viewWindow&quot;:{}},{&quot;viewWindowMode&quot;:&quot;pretty&quot;,&quot;viewWindow&quot;:{}}],&quot;title&quot;:&quot;Langages&quot;,&quot;backgroundColor&quot;:&quot;#FFFFFF&quot;,&quot;legend&quot;:&quot;right&quot;,&quot;colors&quot;:[&quot;#38761d&quot;,&quot;#f1c232&quot;,&quot;#cc0000&quot;,&quot;#3d85c6&quot;,&quot;#990099&quot;,&quot;#0099C6&quot;,&quot;#DD4477&quot;,&quot;#66AA00&quot;,&quot;#B82E2E&quot;,&quot;#316395&quot;,&quot;#994499&quot;,&quot;#22AA99&quot;,&quot;#AAAA11&quot;,&quot;#6633CC&quot;,&quot;#E67300&quot;,&quot;#8B0707&quot;,&quot;#651067&quot;,&quot;#329262&quot;,&quot;#5574A6&quot;,&quot;#3B3EAC&quot;,&quot;#B77322&quot;,&quot;#16D620&quot;,&quot;#B91383&quot;,&quot;#F4359E&quot;,&quot;#9C5935&quot;,&quot;#A9C413&quot;,&quot;#2A778D&quot;,&quot;#668D1C&quot;,&quot;#BEA413&quot;,&quot;#0C5922&quot;,&quot;#743411&quot;],&quot;is3D&quot;:true,&quot;hasLabelsColumn&quot;:true,&quot;hAxis&quot;:{&quot;maxAlternations&quot;:1},&quot;width&quot;:565,&quot;height&quot;:376},&quot;state&quot;:{},&quot;view&quot;:&quot;{\&quot;columns\&quot;:[0,1]}&quot;,&quot;chartType&quot;:&quot;PieChart&quot;,&quot;chartName&quot;:&quot;Graphique 1&quot;} &lt;/script&gt;
&lt;h1 id='la_gense'&gt;La genèse&lt;/h1&gt;

&lt;p&gt;Lorsque nous avons publié l&amp;#8217;énoncé lors de Devoxx 2011, nous avons été assaillis de questions, et comme nous nous étions inspiré d&amp;#8217;un &lt;a href='https://github.com/jeanlaurent/fizzbuzz-kata'&gt;kata existant&lt;/a&gt; en le transformant un peu&amp;#8230; Du coup nous n&amp;#8217;avions pas pu répondre à toutes les questions sur l&amp;#8217;instant. Nous avons donc codé un laptop sur les genoux pendant la soporifique keynote d&amp;#8217;Oracle une &lt;a href='https://github.com/jeanlaurent/FooBarQix'&gt;solution&lt;/a&gt; pour pouvoir répondre à toutes les questions.&lt;/p&gt;

&lt;h1 id='les_prochaines_tapes'&gt;Les prochaines étapes&lt;/h1&gt;

&lt;p&gt;Nous allons contacter tous les participants dans les jours à venir pour leur indiquer le statut de leur soumission, le temps qu&amp;#8217;on dépile ce tas de code. Nous allons aussi proposer un système pour ceux qui seront sélectionnés sans binôme afin qu&amp;#8217;ils en trouve un.&lt;/p&gt;

&lt;p&gt;L&amp;#8217;étape suivante sera de se retrouver tous ensemble une soirée afin de coder et de s&amp;#8217;apprécier d&amp;#8217;un point de vue technique et humain. David et moi même sélectionneront à ce moment là quelques binômes pour un battle final qui aura lieu début mars.&lt;/p&gt;

&lt;p&gt;Dans les semaines à venir, nous publierons ce que nous avons aimé et ce que nous avons moins aimé dans le code qui nous a été soumis, avec l&amp;#8217;accord des auteurs, bien sur.&lt;/p&gt;

&lt;p&gt;Merci à vous tous, d&amp;#8217;avoir participer avec une telle ferveur.&lt;/p&gt;

&lt;p&gt;Stay tuned pour la suite !&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Quel est le but de ce concours ?</title>
		<link href="http://www.code-story.net/2011/11/17/but.html" />
		<updated>2011-11-17T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2011/11/17/but</id>
		<content type="html">&lt;p&gt;Notre projet &lt;strong&gt;Code Story&lt;/strong&gt; va se dérouler en 3 phases : une pré-sélection, une sélection, une session à &lt;strong&gt;Devoxx France&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/schema.png' alt='Les 3 phases' /&gt;&lt;/p&gt;

&lt;p&gt;Commençons par la fin pour comprendre le but de notre démarche.&lt;/p&gt;

&lt;h1 id='code_story__devoxx_france'&gt;&amp;#8220;Code Story&amp;#8221; à Devoxx France&lt;/h1&gt;

&lt;p&gt;Nous, &lt;a href='https://plus.google.com/100241047121875700803/about'&gt;David&lt;/a&gt; et &lt;a href='https://plus.google.com/104208514956133087454/about'&gt;Jean-Laurent&lt;/a&gt;, souhaitons coder à Devoxx France, une application en direct, en 2 jours. L&amp;#8217;idée est de produire une application exceptionnelle tout en montrant à l&amp;#8217;audience des techniques exceptionnelles.&lt;/p&gt;

&lt;p&gt;Nous pensons fragmenter la session en itérations d&amp;#8217;une heure ou deux, avec un maximum de feedback visuel. Ainsi chaque participant pourra suivre et comprendre ce qui se passe sur le projet même s&amp;#8217;il n&amp;#8217;assiste qu&amp;#8217;à une itération.&lt;/p&gt;

&lt;p&gt;Nous avons déjà quelques idées sur les fonctionnalités de l&amp;#8217;application à développer mais la forme et le contenu exacts de cette session sont encore vagues. Cela va s&amp;#8217;affiner dans le semaines qui viennent.&lt;/p&gt;

&lt;h1 id='comment_juger_notre_succs_'&gt;Comment juger notre succès ?&lt;/h1&gt;

&lt;p&gt;Nous serons heureux si chaque participant ressort en ayant appris quelque chose. Nous serons comblés si chaque participant à la conférence vient assister à au moins une itération.&lt;/p&gt;

&lt;h1 id='slection_et_prslection'&gt;Sélection et pré-sélection&lt;/h1&gt;

&lt;p&gt;Afin que la session se passe dans les meilleurs conditions possibles, nous voulons trouver 1 autre binôme, donc 2 personnes pour nous aider dans la préparation et la réalisation du produit. Coder une application en live et permettre que ça soit visible et compréhensible par le public, qui va venir interagir avec nous, demande plus que deux personnes.&lt;/p&gt;

&lt;p&gt;Pour trouver ce binôme nous avons lancé au moment de l&amp;#8217;annonce de &lt;strong&gt;Devoxx France&lt;/strong&gt;, une pré-sélection sous la forme d&amp;#8217;un mini-concours qui consiste à nous envoyer un petit bout de code.&lt;/p&gt;

&lt;p&gt;Le deuxième tour de sélection aura lieu sous forme de démonstration live de code, avec un jury dont nous ferons parti mais pas exclusivement, et qui choisira le binome gagnant.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Premier exercice de sélection, FooBarQix</title>
		<link href="http://www.code-story.net/2011/11/16/foobarqix.html" />
		<updated>2011-11-16T00:00:00-08:00</updated>
		<id>http://www.code-story.net/2011/11/16/foobarqix</id>
		<content type="html">&lt;p&gt;Ecrivez un programme qui affiche les nombres de 1 à 100. Un nombre par ligne. Respectez les règles suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si le nombre est divisible par 3 ou contient 3, écrire &amp;#8220;Foo&amp;#8221; à la place de 3.&lt;/li&gt;

&lt;li&gt;Si le nombre est divisible par 5 ou contient 5, écrire &amp;#8220;Bar&amp;#8221; à la place de 5.&lt;/li&gt;

&lt;li&gt;Si le nombre est divisible par 7 ou contient 7, écrire &amp;#8220;Qix&amp;#8221; à la place de 7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id='voici_un_exemple_de_rendu'&gt;Voici un exemple de rendu&lt;/h1&gt;

&lt;pre&gt;&lt;code&gt;1
2
FooFoo
4
BarBar
Foo
QixQix
8
Foo
Bar
...&lt;/code&gt;&lt;/pre&gt;

&lt;h1 id='mise__jour__clarifications_sur_les_rgles'&gt;Mise à jour : clarifications sur les règles&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;On regarde les diviseurs avant le contenu (ex: 51 -&amp;gt; FooBar)&lt;/li&gt;

&lt;li&gt;On regarde le contenu dans l&amp;#8217;ordre où il apparait (ex: 53 -&amp;gt; BarFoo)&lt;/li&gt;

&lt;li&gt;On regarde les multiples dans l&amp;#8217;ordre Foo, Bar puis Qix (ex: 21 -&amp;gt; FooQix)&lt;/li&gt;

&lt;li&gt;13 contient 3 donc s&amp;#8217;écrit &amp;#8220;Foo&amp;#8221;&lt;/li&gt;

&lt;li&gt;15 est divisible par 3 et 5 et contient un 5 donc s&amp;#8217;écrit &amp;#8220;FooBarBar&amp;#8221;&lt;/li&gt;

&lt;li&gt;33 contient deux fois 3 et est divisible par 3 donc s&amp;#8217;écrit &amp;#8220;FooFooFoo&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id='a_vous_de_jouer_'&gt;A vous de jouer !&lt;/h1&gt;

&lt;p&gt;Votre code doit tourner dans une JVM, si vous faites des trucs inhabituels, laissez nous des instructions pour faire tourner votre code. Vous n&amp;#8217;avez qu&amp;#8217;à nous envoyer une URL pointant sur un dépôt github public contenant le code de FooBarQix et ajouter tout ce que vous voudriez nous dire sur votre code à &lt;a href='mailto:qualif@code-story.net'&gt;qualif@code-story.net&lt;/a&gt; avant le 16 décembre 2011.&lt;/p&gt;

&lt;p&gt;Soyez inventif, pragmatique, écrivez du code formidable, impressionnez nous, montrez que vous voulez venir coder avec nous.&lt;/p&gt;

&lt;p&gt;Nous sommes impatient de coder avec vous.&lt;/p&gt;</content>
	</entry>
	
</feed>