<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Duchess France</title>
	<atom:link href="http://jduchess.org/duchess-france/feed/" rel="self" type="application/rss+xml" />
	<link>http://jduchess.org/duchess-france</link>
	<description>A Duchess Community Blog for France</description>
	<lastBuildDate>Wed, 18 Jan 2012 14:02:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Participez à la Battle Langage</title>
		<link>http://jduchess.org/duchess-france/blog/participez-a-la-battle-langag/</link>
		<comments>http://jduchess.org/duchess-france/blog/participez-a-la-battle-langag/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 14:02:00 +0000</pubDate>
		<dc:creator>Claude Falguière</dc:creator>
		
		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=6052</guid>
		<description><![CDATA[Comment aborder un nouveau langage ? C&#8217;était justement la question posée lors de la soirée &#8220;Autour de la Marmite&#8221; de janvier. Lors de cette session sur les langages dynamiques, beaucoup de participants ont été intéressés par d&#8217;autres langages que Java. Mais lesquels ? Pourquoi s&#8217;y intéresser ? Comment trouver le déclic pour se lancer et [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left;margin-right: 30px"><a href="http://www.flickr.com/photos/thibaudsaudrais/4525731987/in/photostream"><img style="border: 0px solid;width: 161px;height: 240px" src="http://farm5.staticflickr.com/4021/4525731987_19c0516cff_m.jpg" alt="image de dance breaker" /></a></div>
<div style="height: 250px;margin-right: 50px">
<p>Comment aborder un nouveau langage ? C&#8217;était justement la question posée lors de la soirée &#8220;Autour de la Marmite&#8221; de janvier. Lors de cette session sur les langages dynamiques, beaucoup de participants ont été intéressés par d&#8217;autres langages que Java. Mais lesquels ? Pourquoi s&#8217;y intéresser ? Comment trouver le déclic pour se lancer et trouver des compagnons pour faire ce voyage.</p>
<p>Pour vous aider à y voir plus clair, Duchess va organiser  en février une Battle Langage autour de la Marmite. On fourni la marmite, à vous de définir les ingrédients de la potion magique <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
</div>
<h3>Comment ça va se passer ?</h3>
<ul>
<li>la session se passera à l&#8217;ISEP la 3ième ou 4ième semaine de février</li>
<li>5 mn par langage pour nous dire pourquoi vous l&#8217;aimez</li>
<li>après ces présentations, les participants voteront pour sélectionner quelques ateliers</li>
<li>les gens pourront participer aux ateliers pour des démos de code ou des discussions plus approfondies sur ces langages.</li>
</ul>
<h3><span style="font-weight: bold">Quels langages ?</span></h3>
<p>Tous ! Des langages utilisés, des langages nouveaux, des langages rares, des langages bizarres&#8230; Nous sommes prêts à partager tous vos coups de coeurs avec vous !</p>
<h3>Comment participer ?</h3>
<p>Si vous voulez présenter un langage, voici les règles à suivre :</p>
<ul>
<li>envoyer un <span style="font-weight: bold">email </span>à duchessfr @ gmail.com <span style="font-weight: bold">avant le 31 janvier </span>avec le <span style="font-weight: bold">titre &#8220;Battle Langage&#8221;</span>et indiquez nous le langage de votre choix.</li>
<li>vous pourrez faire votre présentation sans slides, ou avec quelques slides que vous nous <span style="font-weight: bold">transmettrez la veille </span>de la session. Pas de troll, pas de longues explications sur toutes les caractéristiques du langage, choisissez uniquement les quelques points qui vous ont donné envie de découvrir ce langage et qui donneront à d&#8217;autres l&#8217;envie de vous rejoindre en atelier</li>
<li>amenez votre machine et un environnement de développement prêt pour le langage que vous avez choisi. Attention ! La salle de l&#8217;ISEP n&#8217;a pas d&#8217;accès Internet public, préparer un peu de code si vous ne maîtrisez pas tous les recoins du langage.</li>
</ul>
<p>A vous de jouer, nous attendons vos propositions de langages et pour les autres ne ratez pas cette occasion de découvrir de nouveaux langages avec ceux qui les pratiquent.</p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/participez-a-la-battle-langag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour sur la soirée Langages Dynamiques avec S. Douche du 09/01</title>
		<link>http://jduchess.org/duchess-france/blog/retour-sur-la-soiree-langages-dynamiques-avec-s-douche-du-0701/</link>
		<comments>http://jduchess.org/duchess-france/blog/retour-sur-la-soiree-langages-dynamiques-avec-s-douche-du-0701/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 14:29:31 +0000</pubDate>
		<dc:creator>Audrey Neveu</dc:creator>
				<category><![CDATA[La Marmite]]></category>
		<category><![CDATA[Langages Dynamiques]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=6070</guid>
		<description><![CDATA[Cet article a été co-écrit avec Cédric Levasseur @sdouche Pour cette première session “Autour de la marmite” de l’année, Sébastien Douche nous a fait le plaisir de venir nous faire une courte présentation sur les langages dynamiques et notamment sur un de leur élément de base : le typage. En nous exposant rapidement les avantages [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify"><em>Cet article a été co-écrit avec <a title="&quot;@CedricLevasseur" href="http://jduchess.org//twitter.com/#!/cedriclevasseur&quot;">Cédric Levasseur</a></em></p>
<div>
<div style="float: right;margin-left: 20px;margin-right: 20px;text-align: center"><img src="https://twimg0-a.akamaihd.net/profile_images/64962323/sdouche_reasonably_small.jpg" alt="" /></p>
<p><a title="@sdouche" href="https://twitter.com/#!/sdouche">@sdouche</a></div>
<p>Pour cette première session “Autour de la marmite” de l’année, Sébastien Douche nous a fait le plaisir de venir nous faire une courte présentation sur les langages dynamiques et notamment sur un de leur élément de base : le typage.</p>
<p>En nous exposant rapidement les avantages et les inconvénients d’un typage fort tel que celui de Java ou d’Eiffel et ceux d’un typage faible à la Python ou Ruby, Sébastien nous a invité à réfléchir à notre rapport à la programmation, et en particulier à notre langage préféré, car tout développeur ou développeuse a une préférence marquée pour un langage en particulier.</p>
<p>Tous les participants ont donc pu poser les questions qu’ils souhaitaient voir débattre, ce qui a amené un premier groupe a discuter Python avec Sébastien, pendant qu’un autre groupe avait retenu les deux questions suivantes :</p>
<ul>
<li>On a toujours tendance à revenir à ce que l’on connaît. Quelles bonnes pratiques pour apprendre un nouveau langage de programmation ?</li>
<li>Pour apprendre les bonnes pratiques de la programmation, vaut-il mieux un langage à type statique ou dynamique ?</li>
</ul>
</div>
<p>Comme souvent dans les sessions <acronym title="Open Space Technologies">OST</acronym>, les discussions ont eu tendance à dévier, les deux questions ont été traitées dans le désordre le plus total, des gens sont partis d’un groupe pour aller dans l’autre, des groupes se sont formés et se sont défaits bref c’était le bazar et c’est tant mieux ! L’objectif de la soirée à ainsi été respecté : se faire plaisir en venant débattre avec des gens aussi passionnés que soi <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>1/ On a toujours tendance à revenir à ce que l’on connaît. Quelles bonnes pratiques pour apprendre un nouveau langage de programmation ?</h3>
<p>Concernant cette question, trois solutions nous ont d’emblée été proposées :</p>
<ul>
<li>Faire de l’IRC : les gens qui adorent leur langage de prédilection aiment aider à favoriser son adoption par d’autres</li>
<li>Lire le livre du concepteur du langage car c’est celui qui possède la philosophie du langage. Et comme le dit Sébastien, l’intérêt d’un langage est plus dans sa philosophie que dans sa syntaxe.</li>
<li>Trouver un projet Open-Source auquel contribuer : et apprendre directement avec des passionnés, ce qui reste encore la meilleure façon d’apprendre à coder dans un langage, quel qu’il soit.</li>
</ul>
<p>Pour autant, en cas de difficultés, la tentation est grande de ne pas continuer l’expérience et de retourner à son langage de prédilection ! Il ne faut donc pas négliger le ticket d’entrée dans l’apprentissage d’un langage : certains sont réputés plus difficiles que d’autres (Scala ou Clojure par exemple) et la motivation qui vous pousse à l’apprendre doit être proportionnelle, sans quoi le découragement fera vite son oeuvre.</p>
<p>L’écosystème est également un point important dans l’apprentissage d’un langage : on dit souvent que ce qui fait la richesse de Java c’est son écosystème … et de fait c’est incontestablement lui qui a le plus lourd. Mais on peut vite être découragé devant le nombre de frameworks ou de librairies qu’il va nous falloir connaître, sans parler de l’installation du poste de travail qui peut se révéler franchement laborieuse, longue et pénible pour peu qu’on soit sous Windows (troll inside <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<p>C’est là que coder en groupe apparaît comme étant la solution idéale : comme on l’a déjà dit la transmission humaine reste ce qui est le plus simple, le plus enrichissant mais aussi sûrement le plus motivant. Et finalement même si on succombe sous les difficultés, ce n’est pas dramatique, il s’agit juste d’une expérience avortée qui nous aura néanmoins enrichi <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>2/ Quel langage de programmation pour apprendre à bien coder ?</h3>
<p>Nous avons tous les capacités d’apprendre, pourtant, force est de constater que certains langages nous paraissent plus faciles à apprendre que d’autres.</p>
<p>Intuitivement, la plupart des participants sont tentés de répondre qu’un langage fortement typé est préférable pour commencer : un langage comme PHP dans ses premières versions avait la réputation d’un langage facile à apprendre pour des débutants en programmation mais qui allait totalement à l’encontre des bonnes pratiques avec sa permissivité à outrance.</p>
<p>La question de l’Objet se pose donc tout de suite après celle du typage : certes un langage Objet est naturellement plus contraignant, néanmoins ça n’empêche pas de coder n’importe comment ! Tout le monde a en tête des exemples de C++ ou de Java dont on espère sincèrement que l’auteur a changé de métier <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  alors qu’à contrario on peut tout à fait faire du code propre et structuré en javascript.</p>
<p>Le typage et l’objet ne sont donc pas la réponse mais en font néanmoins partie : nous avons abordé la notion de ticket d’entrée dans la réponse à la première question et ce ticket repose sur notre aisance avec ses notions et avec d’autres, ce qui le rend intrinsèquement lié au développeur. Certains développeurs ne seront pas à l’aise avec la syntaxe de <a href="http://confluence.jetbrains.net/display/Kotlin/Welcome">Kotlin</a> et d’autres ne pourront jamais se résoudre à passer des fonctions en paramètres d’autres fonctions dans une forêt de parenthèses comme on peut le faire en <a href="http://clojure.org/">Clojure</a> …</p>
<p>Il n’y a donc pas de réponse “toute prête” à la question posée car il y a une grande part d’affectif dans notre adoption d’un langage : notre langage préféré ne sera peut être pas le plus populaire dans la communauté des développeurs, il a peut être des défauts, peut être même ne convient-il qu’à un usage particulier … mais c’est le nôtre. Et c’est rapport affectif qui va nous donner envie de progresser, et donc de bien coder. Alors n’hésitez pas, même si pour cela vous sortez des sentiers battus du monde professionnel, à cultiver cette affectivité pour progresser !</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/retour-sur-la-soiree-langages-dynamiques-avec-s-douche-du-0701/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Code Retreat : Mode d&#8217;emploi (retour sur le Global Day of Code Retreat 2011)</title>
		<link>http://jduchess.org/duchess-france/blog/code-retreat-mode-demploi-retour-sur-le-global-day-of-code-retreat-2011/</link>
		<comments>http://jduchess.org/duchess-france/blog/code-retreat-mode-demploi-retour-sur-le-global-day-of-code-retreat-2011/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 12:13:54 +0000</pubDate>
		<dc:creator>Isabelle Blasquez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5981</guid>
		<description><![CDATA[Le 3 Décembre 2011 a eu lieu le Global Day of Code Retreat où plus de 2200 développeurs se sont retrouvés le temps d&#8217;une journée dans plus de 90 villes du monde , simplement, pour écrire du beau code&#8230; En France, seulement trois Code Retreat ont été organisés à l&#8217;occasion de cette journée: - un [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://lh5.googleusercontent.com/-HmbvdU2MRBM/Tw_vCrUTQjI/AAAAAAAAACs/qR03ItC3gyE/w235-h176-n-k/DuchessCodeRetreatGrand.jpg" alt="Duchess au Global Day of Code Retreat" align="right" />Le 3 Décembre 2011 a eu lieu le <a href="http://globalday.coderetreat.org/" target="_blank">Global Day of Code Retreat</a> où plus de 2200 développeurs se sont retrouvés le temps d&#8217;une journée dans <a href="http://coderetreat.ning.com/events/event/listByDate?date=2011-12-3" target="_blank">plus de 90 villes du monde </a>, simplement, pour écrire du beau code&#8230;</p>
<p>En France, seulement trois Code Retreat ont été organisés à l&#8217;occasion de cette journée:<br />
- <a href="http://coderetreat.ning.com/events/code-retreat-paris-france" target="_blank">un à Paris dans les locaux de Xébia</a><br />
- <a href="http://coderetreat.ning.com/events/global-day-of-codertreat-bordeaux-france" target="_blank">un à Bordeaux dans les locaux d&#8217;Arpinum</a><br />
- <a href="http://coderetreat.ning.com/events/global-day-of-coderetreat-in-toulouse" target="_blank">et un à Toulouse dans les locaux de DocDoku</a></p>
<p>Connaissant déjà les<a href="http://jduchess.org/duchess-france/blog/resolutions-2011-coding-dojo-code-retreat/" target="_blank"> Coding Dojo</a>, j&#8217;étais curieuse d&#8217;en savoir plus sur les bienfaits d&#8217;un Code Retreat que l&#8217;on m&#8217;avait décrit comme une journée de code composée de <strong>5 ou 6 itérations de 45 minutes</strong> ; chaque itération étant consacrée à <strong>coder le même problème</strong> dans le langage de son choix&#8230; et tout cela en prenant bien soin <strong>à la fin de chaque itération d&#8217;effacer le code écrit et de changer de binôme !</strong><br />
Et c&#8217;est surtout ce point qui m&#8217;intriguait : effacer et recommencer à coder&#8230;.mais pourquoi ?</p>
<p>C&#8217;est donc, avec une certaine curiosité, que j&#8217;ai rejoint dès 8h30 du matin les 15 autres participants de ce premier Code Retreat toulousain. Là, j&#8217;ai pu constater qu&#8217;un des premiers mérites du Code Retreat avait été de regrouper des habitués de plusieurs User Group toulousains : <a href="http://toulousejug.org/" target="_blank">Toulouse JUG</a> ,  <a href="http://www.aperoweb.fr/category/Toulouse" target="_blank">Apéro WEB</a> , et les agilistes de la <a href="http://sigmat.fr/" target="_blank">SigmaT</a></p>
<p>Après un café, <a href="http://twitter.com/avernois" target="_blank">Antoine</a>, notre animateur du jour (<em><strong>&#8220;facilitator&#8221;</strong></em>) nous a présenté le déroulement de la journée, mais surtout le problème à coder qui n&#8217;était autre que le jeu de la vie (Game of Life). Le<strong> jeu de la vie</strong> est un  automate cellulaire imaginé par John Horton <strong>Conway</strong> en 1970. L&#8217;<em><strong>univers</strong></em> du jeu de la vie se déroule sur une grille à deux dimensions, théoriquement infinie. Chaque <em><strong>cellule</strong></em> a 2 états possibles <em><strong>vivante</strong></em> ou <em><strong>morte</strong></em>. À chaque étape, l’évolution d’une cellule est entièrement déterminée par l’état de ses voisines. Les règles suivantes nous ont été proposées :</p>
<ul>
<li>Si une cellule est vivante et a strictement moins de 2 voisines vivantes, elle mourra à l’étape suivante en raison d&#8217;une sous-population.</li>
<li>Si une cellule est vivante et a strictement plus de 3 voisines vivantes, elle mourra à l’étape suivante en raison d&#8217;une sur-population.</li>
<li>Si une cellule est vivante et a 2 ou 3 voisines vivantes, elle restera vivante à l’étape suivante.</li>
<li>Si une cellule est morte et a exactement 3 voisines vivantes, elle naîtra et deviendra ainsi vivante à l’étape suivante.</li>
</ul>
<p>Cette journée étant consacrée au code, il était donc fondamental de rappeler également <a href="http://c2.com/cgi/wiki?XpSimplicityRules" target="_blank">les 4 règles élémentaires requises pour écrire du code de qualité</a> :</p>
<ul>
<li>Faire passer les tests, autrement dit pratiquer du TDD (Test Driven Developpment)</li>
<li>Eviter la duplication de code (principe DRY  :  Don&#8217;t Repeat Yourself )</li>
<li>Faire en sorte que le code soit clair, expressif, autrement dit qu&#8217;il révèle l&#8217;intention (noms de variables, de méthodes explicites&#8230;y compris pour les tests)</li>
<li>Ecrire du &#8220;petit code&#8221;, autrement dit minimiser la longueur des classes et des méthodes.</li>
</ul>
<p>Un des principes du Code Retreat est que chaque participant vienne avec un ordinateur portable sur lequel il a installé au moins un environnement de développement de son choix (comprenant bien sûr une libraire de tests unitaires&#8230;).<br />
Les itérations se déroulent ensuite en <strong>pair-programming</strong> (en binôme) où le<em><strong> ping pong</strong></em> est encouragé :</p>
<ul>
<li>un membre du binôme écrit un test unitaire,</li>
<li>l&#8217;autre membre doit écrire le code métier qui fait passer ce test,</li>
<li>puis avant de repasser le clavier à son collègue, il écrit un nouveau test unitaire, que son collègue doit faire passer,</li>
<li>et ainsi de suite&#8230;</li>
</ul>
<p>La présentation terminée, il était grand temps de découvrir les langages du jour. La plupart des participants étaient venus avec un environnement Java, mais il était également possible de développer en C++, Python, C#, Php et même Javascript.<br />
Tout était dit. La première itération de code pouvait être lancée !<br />
Les binômes se sont rapidement formés au hasard et le marathon des six itérations a pu commencer&#8230;</p>
<p><em><strong>Première itération :  Installation &amp; Compréhension du  problème&#8230;</strong></em><br />
Cette première itération sert en quelque sorte d&#8217;échauffement pour la suite de la journée.<br />
Après l&#8217;installation des binômes et le lancement des environnements de développement vient le temps de la réflexion et de l&#8217;analyse du problème donné. On commence alors à s&#8217;approprier les règles du jeu de la vie, à griffonner un diagramme d&#8217;états, puis le code peut enfin s&#8217;exprimer. Dans cette première itération, nous avons choisi d&#8217;implémenter l&#8217;<em><strong>univers</strong></em> du jeu de la vie de manière très simple (tableaux à deux dimensions) afin de s&#8217;intéresser au plus vite aux règles métier. Aucune consigne n&#8217;avait été donnée pour cette itération, à part le respect du ping pong. Mais 45 minutes passent très vite (trop vite) et c&#8217;est vraiment lorsqu&#8217;on commence à être un peu  productif, à rentrer dans le vif du sujet, que l&#8217;on doit s&#8217;arrêter. Et oui, c&#8217;est déjà fini&#8230;  Au bout de ces premières 45 minutes, l&#8217;application est loin d&#8217;être terminée et le code écrit pas vraiment optimisé.<br />
Je dirais que cette première itération sert de défrichage et permet de se mettre dans l&#8217;ambiance de la journée.<br />
Chaque itération est ensuite suivie d&#8217;une rétrospective de 15 minutes animée par le &#8220;facilitator&#8221;.<br />
A la fin de la rétrospective, Il faut respecter <strong>une des règles d&#8217;or du Code Retreat : effacer le code produit au cours de l&#8217;itération</strong>. Cela est un peu déroutant la première fois. Donc ce n&#8217;est pas sans quelques réticences que nous avons supprimé notre code, mais c&#8217;est la règle !</p>
<p><em><strong>Deuxième itération :  Vers une conception Objet mieux pensée &#8230;</strong></em><br />
Chaque itération donne l&#8217;occasion de coder avec une nouvelle personne, les binômes devant être recomposés à chaque fois. Il est même possible de changer de langage d&#8217;une itération à l&#8217;autre &#8230;<br />
Avant chaque itération, une <a href="http://coderetreat.org/facilitating/structure-of-a-coderetreat" target="_blank">nouvelle consigne est donnée par l&#8217;animateur</a> afin d&#8217;encourager une création différente à chaque fois. La première rétrospective avait montré que la plupart des binômes était partie sur un tableau pour implémenter rapidement l&#8217;univers du jeu de la vie. Dans cette deuxième itération, la consigne donnée était donc de penser plus Objet en terme d&#8217;Univers et de Cellule&#8230;<br />
Dès cette deuxième itération, j&#8217;ai pu constaté que l&#8217;écriture du code était beaucoup plus fluide, moins hésitante, plus rapide. Le code produit à l&#8217;itération précédente était naturellement repensé et optimisé pour la nouvelle itération. Le fait d&#8217;effacer le code permettrait-il alors vraiment d&#8217;écrire du code différent et plus performant d&#8217;itération en itération ?<br />
La consigne étant l&#8217;Objet, notre binôme a cependant beaucoup discuté  lors de cette itération sur la manière de prendre en compte le caractère extensible du problème (cellules à <em>n</em> facettes, univers à <em>n</em> dimensions) pour finalement convenir avec l&#8217;animateur que nous resterons par la suite seulement dans un espace à deux dimensions. Avons-nous perdu notre temps ? Je ne pense pas car nous avons pu mener une réflexion commune. Et cela fait également partie de la magie du Code Retreat de pouvoir s&#8217;adapter immédiatement à son binôme, de pouvoir partager ses points de vue, ses bonnes pratiques de code et ses astuces de programmation.<br />
A la fin de cette deuxième  rétrospective, il n&#8217;a pas fallu déroger à la règle de base du Code Retreat qui consiste à supprimer définitivement le code, et cette fois-ci c&#8217;est même avec un certain plaisir que chaque binôme a effacé son code !</p>
<p><em><strong>Troisième itération :  No For, No if &#8230;</strong></em><br />
La consigne de la troisième itération était de n&#8217;écrire  ni boucle, ni test : <strong>&#8220;No for, No if&#8221;</strong> devait désormais être notre devise. Je n&#8217;avais jamais envisagé avant d&#8217;écrire un programme Java sans for, ni if (ni while, ni switch) et je dois dire que cette consigne nous a laissés perplexes pendant un certain temps : pas vraiment évident de respecter une telle consigne &#8230;<br />
Certains binômes ont essayé de contourner la contrainte en dissimulant dans leurs instructions des tests via des opérateurs binaires et ternaire (&amp;&amp;, ||,?), d&#8217;autres ont évoqué le <a title="pattern Visiteur" href="http://fr.wikipedia.org/wiki/Visiteur_(motif_de_conception)" target="_blank">pattern Visiteur</a>.<br />
La notion de récursivité est également venue naturellement à l&#8217;esprit dès lors que les boucles n&#8217;étaient pas permises. Mais classiquement, qu&#8217;est-ce qui stoppe une récurrence ? Une condition d&#8217;arrêt que l&#8217;on écrit généralement avec un if !&#8230;Et hop, il est encore nécessaire de pousser la réflexion un peu plus loin. Ce test conditionnel peut alors être évité en faisant appel à des notions de polymorphisme. <a href="http://twitter.com/VincentFERRIES" target="_blank">Vincent</a> propose dans son retour <a href="http://blog.genigraph.fr/2012/01/03/code-retreat-de-toulouse-le-03-decembre-2011/" target="_blank">un exemple de code pour illustrer cette solution. </a><br />
Personnellement, c&#8217;est l&#8217;itération de la journée que j&#8217;ai préférée. Ecrire un code sans structure de contrôle est une contrainte qui ne me serait jamais venue à l&#8217;esprit&#8230;et pourtant au final, on constate que c&#8217;est un excellent exercice pédagogique !</p>
<p>A la fin de la troisième itération, il était déjà plus de midi : l&#8217;heure de la pause déjeuner.<br />
<em><strong>Le repas fait intégralement partie du concept du Code Retreat</strong></em> : c&#8217;est un moment convivial d&#8217;échanges entre les participants. Il est donc  important de prendre une vraie pause repas d&#8217;environ une heure et demie. Le repas est généralement offert par le sponsor de l&#8217;événement. Merci <a href="http://www.docdoku.com/" target="_blank">DocDoku</a> !</p>
<p><em><strong>Quatrième itération :  Tell don&#8217;t ask, no primitive obsession &#8230;</strong></em><br />
La consigne de la quatrième itération était de respecter le principe <a href="http://pragprog.com/articles/tell-dont-ask" target="_blank"><em><strong>Tell don&#8217;t ask</strong></em></a>. Ce <strong>principe de connaissance minimale</strong> consiste <em>à demander directement</em> à un objet ce qu&#8217;il doit faire, <em>plutôt que de l&#8217;interroger</em> sur son état interne afin de prendre des décisions qui mènent à des actions de sa part&#8230; Autrement dit, <em><strong>les getters/setters devaient cette fois-ci être bannis de notre code</strong></em>, et les méthodes judicieusement choisies et nommées en fonction de nos besoins.<br />
Le principe <strong>Tell don&#8217;t ask</strong> imposé dans cette itération devait également nous amener à repenser notre code en évitant toute <em><strong>&#8220;primitive obsession&#8221;</strong></em> c&#8217;est-à-dire que nous devions <em><strong>éviter d&#8217;utiliser des types primitifs</strong></em> comme attributs (autant que possible).<br />
Durant cette itération nous nous sommes donc plus particulièrement intéressés aux cellules, à leurs coordonnées, et à la notion de voisinage ? La Cellule doit-elle connaître ses coordonnées ?  La Cellule doit-elle connaître ses voisins ? Ne serait-il pas plus judicieux que l&#8217;Univers gère lui-même la notion de voisinage ? etc &#8230;<br />
De nombreuses questions qui  devaient nous amener à écrire un nouveau code &#8220;tout objet&#8221;, vraiment très différent de celui de la première itération.</p>
<p><em><strong>Cinquième itération :  Itération sans parole &#8230;</strong></em><br />
La cinquième itération fut une itération qui se déroula sans bruit, puisque la consigne consistait à interdire aux membres d&#8217;un même binôme de parler entre eux. Seuls les tests, écrits de manière expressive, devaient permettre de révéler les intentions de l&#8217;un et de l&#8217;autre. Sans discussion préalable possible, cette itération, bien plus que les précédentes, demandait de porter une attention particulière à <em><strong>l&#8217;expressivité du code </strong></em> pour que chacun puisse comprendre l&#8217;attente de l&#8217;autre. Il fut  indispensable de  nommer les méthodes de manière très significative, ce qui nous amena bien souvent à écrire de véritables phrases pour nommer les méthodes des classes de test .<br />
Cette itération fut une itération assez difficile à mener. En effet, arrivés à la cinquième itération de la journée, chacun a avancé dans sa vision du problème en menant au cours de la journée ses propres réflexions avec des binômes différents. Et bien que les contraintes de chaque itération soient communes, les choix de conception et d&#8217;implémentation sont parfois bien différents. Ce fut le cas pour cette itération où avec mon binôme nous avions deux approches différentes, ce qui compliqua la tâche mais nous incita doublement à écrire des tests expressifs afin d&#8217;essayer de trouver une solution commune.</p>
<p><em><strong>Sixième itération :  A La Carte &#8230;</strong></em><br />
La sixième et dernière itération était une itération &#8220;à la carte&#8221; destinée à se faire plaisir où chaque binôme pouvait choisir une consigne parmi les propositions suivantes :</p>
<ol>
<li><strong><em>Désaccord</em></strong>  ou  écrire du code pour aller dans le sens inverse du test à vérifier&#8230;</li>
<li><em><strong>Pire code</strong></em> possible</li>
<li><em><strong>Sans la Souris</strong></em> &#8230; pour les spécialistes des raccourcis claviers (1)&#8230;</li>
<li><em><strong>Des méthodes de 3 lignes maximum.</strong></em></li>
</ol>
<p>(1) Une discussion a depuis été lancée sur la <a href="https://groups.google.com/forum/#!topic/toulouse-jug/SpOWtYPxJa0" target="_blank">mailing list du Toulouse JUG</a> !</p>
<p>&nbsp;</p>
<p><strong><em>Rétrospective finale</em></strong><br />
Lors de la rétrospective finale chaque participant a dû répondre aux 3 questions suivantes :</p>
<ol>
<li>Qu&#8217;est-ce que j&#8217;ai <strong>appris</strong> aujourd&#8217;hui ?</li>
<li>Qu&#8217;est-ce qui m&#8217;a <strong>surpris</strong> aujourd&#8217;hui ?</li>
<li>Qu&#8217;est-ce que je vais mettre en application dès <strong>Lundi</strong> ?</li>
</ol>
<p>Les expériences des participants étaient diverses, mais chacun s&#8217;est accordé pour dire :</p>
<ul>
<li>que la journée avait été très riche en échanges et en partage de bonnes pratiques,</li>
<li>que les six itérations avaient chacune conduite à la production d&#8217;un code bien différent,</li>
<li>et que dès lundi les tests bien écrits allaient être (re)mis à l&#8217;honneur dans les équipes de développement !</li>
</ul>
<p>La journée s&#8217;est terminée par l&#8217;annonce de la <a href="http://antoine.vernois.net/dotclear/index.php?post/2012/01/09/Software-Craftsmanship-%C3%A0-Toulouse" target="_blank">création d&#8217;une communauté Software Craftsmanship sur Toulouse</a> qui, espérons-le, proposera très prochainement d&#8217;autres Code Retreat !</p>
<p><em><strong>Liens :</strong></em><br />
<a href="http://globalday.coderetreat.org/" target="_blank">http://globalday.coderetreat.org/</a><br />
<a href="http://jduchess.org/duchess-france/blog/resolutions-2011-coding-dojo-code-retreat/" target="_blank">http://jduchess.org/duchess-france/blog/resolutions-2011-coding-dojo-code-retreat/</a><br />
<a href="http://coderetreat.com/gol.html" target="_blank">http://coderetreat.com/gol.html</a><br />
<a href="http://c2.com/cgi/wiki?XpSimplicityRules" target="_blank">http://c2.com/cgi/wiki?XpSimplicityRules</a><br />
<a href="http://coderetreat.org/facilitating/structure-of-a-coderetreat" target="_blank">http://coderetreat.org/facilitating/structure-of-a-coderetreat</a><br />
<a href="http://coderetreat.ning.com/profiles/blogs/how-a-coderetreat-works" target="_blank">http://coderetreat.ning.com/profiles/blogs/how-a-coderetreat-works</a><br />
<a href="http://pragprog.com/articles/tell-dont-ask" target="_blank">http://pragprog.com/articles/tell-dont-ask</a><br />
<a href="https://groups.google.com/forum/#!topic/toulouse-jug/SpOWtYPxJa0" target="_blank">https://groups.google.com/forum/#!topic/toulouse-jug/SpOWtYPxJa0</a><br />
<a href="http://antoine.vernois.net/dotclear/index.php?post/2012/01/09/Software-Craftsmanship-%C3%A0-Toulouse" target="_blank">http://antoine.vernois.net/dotclear/index.php?post/2012/01/09/Software-Craftsmanship-%C3%A0-Toulouse</a></p>
<p><em><strong>Autres retours sur le Global Day of Code Retreat :</strong></em><br />
<a href="http://blog.genigraph.fr/2012/01/03/code-retreat-de-toulouse-le-03-decembre-2011/" target="_blank">http://blog.genigraph.fr/2012/01/03/code-retreat-de-toulouse-le-03-decembre-2011/</a><br />
<a href="http://blog.r0ly.fr/?p=67" target="_blank">http://blog.r0ly.fr/?p=67</a></p>
<p><em><strong>Des Photos du Code Retreat toulousain</strong></em><br />
<a href="https://plus.google.com/photos/116856815308605996307/albums/5682276859165947169" target="_blank">https://plus.google.com/photos/116856815308605996307/albums/5682276859165947169</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/code-retreat-mode-demploi-retour-sur-le-global-day-of-code-retreat-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parlons perf avec Ludovic Poitou!</title>
		<link>http://jduchess.org/duchess-france/blog/parlons-perf-avec-ludovic-poitou/</link>
		<comments>http://jduchess.org/duchess-france/blog/parlons-perf-avec-ludovic-poitou/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 09:13:47 +0000</pubDate>
		<dc:creator>Agnes Crepet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5957</guid>
		<description><![CDATA[Le Lyon JUG accueille, le 17 janvier prochain, Ludovic Poitou pour un talk intitulé Performance des serveurs en Java : l&#8217;expérience du projet OpenDJ. Ludovic Poitou est chef de produit sur OpenDJ, un serveur d&#8217;annuaire LDAP écrit en Java, et directeur de ForgeRock France. Il a travaillé en tant qu’ingénieur de développement pendant 15 ans chez [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ludopoitou.wordpress.com/" target="_blank"><img class="alignleft size-medium wp-image-2534" src="http://www.lyonjug.org/_/rsrc/1322555322816/speakers/ludo_poitou.png" alt="Blog de Ludovic Poitou" width="105" /></a> Le <a href="http://www.lyonjug.org/" target="_blank">Lyon JUG</a> accueille, le 17 janvier prochain, Ludovic Poitou pour un talk intitulé <em>Performance des serveurs en Java : l&#8217;expérience du projet <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a></em>. Ludovic Poitou est chef de produit sur <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a>, un serveur d&#8217;annuaire LDAP écrit en Java, et directeur de <a href="http://forgerock.com/" target="_blank">ForgeRock</a> France. Il a travaillé en tant qu’ingénieur de développement pendant 15 ans chez Sun Microsystems où il fut Architecte des produits d’annuaire et Community Manager du projet OpenDS, un service d’annuaire open source en Java. <a href="http://twitter.com/agnes_crepet" target="_blank">Agnès Crépet</a> et <a href="http://twitter.com/AlexisHassler" target="_blank">Alexis Hassler</a>, tous deux membres de la team du <a href="http://www.lyonjug.org/">Lyon JUG</a> ont posé quelques questions à Ludovic, pour vous mettre l&#8217;eau à la bouche avant sa session à Lyon !</p>
<p><strong>Agnès &amp; Alexis: Peux-tu te présenter? Quel est ton parcours professionnel et quelles sont tes activités aujourd’hui au sein de <a href="http://forgerock.com/" target="_blank">ForgeRock</a>?</strong></p>
<p><strong>Ludovic</strong>: Bonjour, je m’appelle Ludovic Poitou et je suis chef de produit chez <a href="http://forgerock.com/" target="_blank">ForgeRock</a>. J’ai une formation universitaire : un Magistère en Informatique et Sciences de l’Ingénieur, obtenu à l’Université de Nice Sophia Antipolis (formation qui existe encore sous l’enseigne Polytech Sophia-Antipolis après s’être appelée ESSI). J’ai commencé ma carrière dans une startup dans le domaine des serveurs de messagerie et d’annuaires, E3X, rachetée par TéléSystèmes puis Sema (maintenant Atos). En 1995, j’ai été embauché comme développeur logiciel chez Sun au centre Recherche et Développement de Grenoble, où j’ai principalement travaillé sur les serveurs d’annuaire LDAP, aussi bien au niveau produit (Sun Directory Server) que standardisation à <a href="http://www.ietf.org/" target="_blank">l’IETF</a>, ou sur l’évangélisation de projets open sources comme OpenDS.<br />
Après 15 ans, et suite au rachat par Oracle, j’ai rejoint <a href="http://forgerock.com/" target="_blank">ForgeRock</a> en tant que chef de produit pour les produits d’annuaire et le projet <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a>, et directeur du centre recherche et développement en France, basé à Grenoble.</p>
<p><strong>Agnès &amp; Alexis: Tu vas aborder la problématique des performances en Java dans ta session pour le LyonJUG. Question simple pour commencer : imaginons que je me rende compte un matin que mon application que j’ai mise en production la semaine dernière s’exécute de plus en plus lentement sur son serveur Tomcat. Quels sont les outils que tu utilises pour mesurer les performances d’une application Java en production, et quels sont les métriques sur lesquels tu vas particulièrement te concentrer ? Au niveau de la JVM, Quels sont les règlages à faire en priorité dans ma JVM ?</strong></p>
<p><strong>Ludovic</strong>: Tout d&#8217;abord, je vais parler de performances du serveur en Java, et pas des applications qui tournent dans un serveur d&#8217;application, tel que Tomcat. Mon expérience s&#8217;appuie sur le projet <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a>, qui est un serveur d&#8217;annuaire LDAP écrit en Java. Dans notre cas d&#8217;utilisation, nous avons deux critères principaux : le nombre d&#8217;opérations exécutées par secondes, et le temps de réponse. Pour mesurer cela, nous avons nos propres outils de charge LDAP qui produisent des statistiques en temps réel, mais aussi les statistiques du serveur lui-même.<br />
Et dès qu&#8217;il s&#8217;agit de commencer à regarder comment se comporte la JVM, nous utilisons les outils standards Java, en priorité le log du Garbage Collector, et JConsole.<br />
Donc, au niveau de la JVM, les premiers réglages sont définir la taille minimum et maximum de la JVM et activer le log du GC.</p>
<p><strong>Agnès &amp; Alexis: Le garbage collector G1 est apparu assez récemment. Est-il vraiment mature, début 2012 ? Est-ce qu’il doit devenir le GC par défaut, remplaçant tous les autres ? En particulier, le CMS a-t-il encore un raison d’être ?</strong></p>
<p><strong>Ludovic</strong>: Lorsque je travaillais encore chez Sun (avant Septembre 2010), nous étions en relation régulière avec l&#8217;équipe HotSpot et plus particulièrement Tony Printezis qui développait G1. Notre serveur d&#8217;annuaire avait été intégré dans une suite de tests automatiques de toutes les JVMs, et a énormément servi pour stresser G1, principalement avec des JVM de 16 à 64 GB. Nous avions d&#8217;ailleurs des versions de développement de la JVM pour nos propres tests, qui se révélaient prometteurs. Mais avec le rachat par Oracle et la réorganisation qui s&#8217;en ait suivi, j&#8217;ai l&#8217;impression que G1 a été mis de coté temporairement. Les quelques tests que nous avons fait avec les dernières mises à jour de Java 6 et avec Java 7 à sa sortie n&#8217;ont pas été probants.<br />
Par contre, nous avons vu une flopée de correctifs sur G1 apportés dans Java 7 update 2 et nous sommes encore en train de faire des tests pour voir si G1 peut être utilisé en production.<br />
Pour résumer, mature, probablement pas encore. Et donc CMS a encore des raisons d&#8217;être.</p>
<p><strong>Agnès &amp; Alexis: Que penses-tu de la suppression annoncée du Perm Space (inspirée de JRockit et de la JVM d&#8217;IBM) dans les releases à venir de la JVM V7? Pourquoi était-il utile par le passé et plus maintenant ?</strong></p>
<p><strong>Ludovic</strong>: Le PermGen Space est un espace mémoire de la JVM qui sert/servait à stocker les méta-données concernant les classes utilisateurs. Sa taille est devenu un problème récurrent avec tous les serveurs d&#8217;application qui chargent et déchargent les classes des applications. Personnellement, avec <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a>, nous ne nous en sommes jamais vraiment préoccupés.<br />
Ces méta-données sont toujours nécessaires, et donc elles ont été déplacées de la pile Java à la pile native. Cela permet de simplifier la tache du GC, mais va obliger les administrateurs à surveiller la taille du process natif pour éviter que la JVM swappe.</p>
<p><strong>Agnès &amp; Alexis: Récemment au lyonJUG nous avons proposé une session “Architecture stateful vs stateless”. En terme de performances, penses-tu qu’une architecture stateless soit réellement plus scalable qu’une architecture stateful (notamment parce qu’on s’évite le problème de synchronisation de sessions entre plusieurs serveurs)? </strong></p>
<p><strong>Ludovic</strong>: J&#8217;avoue ne pas avoir vraiment d&#8217;opinion sur le sujet, ni de réelle expérience. Le protocole LDAP est un protocole connecté et qui garde l&#8217;état d&#8217;authentification. Donc nous sommes obligatoirement amenés à travailler en stateful.</p>
<p><strong>Agnès &amp; Alexis: Le “scale-out” est-il plus efficace que le “scale-in” pour une application Java ?</strong></p>
<p><strong>Ludovic</strong>: Cela dépend vraiment de l&#8217;application et de son modèle.<br />
Si on regarde les serveurs d&#8217;annuaires, ils sont construits autour d&#8217;une base de données spécialisée (un B-Tree) et donc sont plus orientés scale-up. Mais depuis longtemps, le scale-out est disponible pour les opérations de lecture grâce a la réplication des données, souvent une fonctionnalité intrinsèque au produit.<br />
<a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> est donc dans un modèle scale-up, avec une réplication multi-maître pour la disponibilité.<br />
Sun Directory Server, le serveur sur lequel je travaillais avant OpenDS et <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a>, est déployé chez quasiment tous les opérateurs télécom avec plusieurs dizaines de millions d&#8217;utilisateurs, le plus gros ayant 120 Millions d&#8217;entrées dans leur service d&#8217;annuaire. Nous avions fait un &#8220;Proof of Concept&#8221; de scale-out pour un client qui voulait un annuaire avec 420 Millions d&#8217;entrées, en distribuant les données sur plusieurs serveurs d&#8217;annuaires et une couche de proxy LDAP pour faire le routage. Les résultats étaient impressionants en terme de performance, mais le coût hardware de la solution rédhibitoire !</p>
<p><strong>Agnès &amp; Alexis: Tu vas nous parler d’<a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> . Peux-tu présenter brièvement cette solution? Comment se démarque-t-elle d’autres solutions comme Apache Directory ou OpenLDAP. Ayant démarré comme un fork d’OpenDS, comment les deux solutions évoluent-elles en parallèle aujourd’hui?</strong></p>
<p><strong>Ludovic</strong>: <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> est un serveur d&#8217;annuaire LDAP écrit en Java, qui est très complet fonctionnellement, offre de très bonne performances, mais surtout est simple à déployer et administrer. Au départ, il a été conçu chez Sun Microsystems pour remplacer le produit Sun Directory Server, écrit en C (hérité de Netscape Directory Server), mais qui avait une conception datant de plus de 15 ans.<br />
Par rapport à Apache Directory, <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> est vraiment orienté entreprises, avec un aspect qualité et fiabilité mais surtout conçu pour de gros volumes avec des besoins de performance.<br />
Par rapport à OpenLDAP, <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> apporte de la simplicité, la portabilité grâce à Java (le serveur et ses données sont indépendants du matériel et de l&#8217;OS). Et une compatibilité ascendante, surtout au niveau réplication, ce qui permet de faire évoluer les serveurs sans interruption de service.<br />
Pour ce qui est d&#8217;OpenDS, les équipes qui travaillaient dessus chez Oracle ont été redéployées, et le projet n&#8217;évolue plus. Oracle a sa propre fork propriétaire et a annoncé un produit basé sur OpenDS : Oracle Unified Directory. Ce qui en fait le 4eme produit d&#8217;annuaire chez Oracle, et je doute de leur stratégie a ce sujet.<br />
De notre coté, le développement d&#8217;<a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> continue en open source, et une grande partie de la communauté d&#8217;OpenDS nous a rejoint. Nous avons d&#8217;ailleurs eu plus de contributions en 2011 que pendant les 4 ans de développement d&#8217;OpenDS.</p>
<p><strong>Agnès &amp; Alexis: Vous avez pris le parti de sortir fréquemment des releases <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a>. Quel est votre processus d’intégration et de livraison (outils, méthodes)?</strong></p>
<p><strong>Ludovic</strong>: Depuis le début d&#8217;OpenDS, notre usine logicielle s&#8217;appuie sur Ant. Nous utilisons <a href="http://jenkins-ci.org/" target="_blank">Jenkins CI</a> pour l&#8217;intégration continue et les tests automatiques. Nous avons près de 30000 tests unitaires, écrits avec <a href="http://testng.org/" target="_blank">TestNG</a>, qui sont lancés à chaque build et encore quelques milliers de plus la nuit. Nous avons toute une suite de tests fonctionnels (environ 2800 tests) qui sont exécutés aussi toutes les nuits dans un framework basé sur Stax.<br />
Le cycle de livraison est celui que nous utilisions chez Sun. Préparation du build et vérification par les suites de tests automatiques, puis suit une phase de tests par l&#8217;équipe de QA pour couvrir certains aspects comme le GUI, les tests de conformité LDAP, de stress&#8230;<br />
Enfin, la mise en place sur le site web est manuelle. <a href="http://opendj.forgerock.org/" title="OpenDJ, the open source LDAP directory services in Java" target="_blank">OpenDJ</a> est disponible sur forme de Zip, de package SVR4 (pour Solaris) mais aussi avec un installeur en Java Web Start. Et avec la prochaine version, nous devrions rajouter les packages RPM et Debian.<br />
Nous travaillons aussi à mettre notre processus de livraison sur Maven, afin de faciliter l&#8217;intégration avec les autres projets de ForgeRock ou d&#8217;ailleurs. Le Toolkit LDAP qui inclut une librairie LDAP cliente et des outils de tests est déjà entièrement sous Maven.</p>
<h5><strong> Merci Ludovic!</strong></h5>
<p><strong><a href="http://www.lyonjug.org/evenements/perf-serveur" target="_blank">Les inscriptions pour la session de Ludovic au Lyon JUG le 17 janvier sont ouvertes !</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/parlons-perf-avec-ludovic-poitou/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avant Jug, c’est reparti !</title>
		<link>http://jduchess.org/duchess-france/blog/avant-jug-2012-01/</link>
		<comments>http://jduchess.org/duchess-france/blog/avant-jug-2012-01/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 10:36:02 +0000</pubDate>
		<dc:creator>Blandine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[devops]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5936</guid>
		<description><![CDATA[Les inscriptions pour la soirée « Soirée Devops » du ParisJug sont ouvertes. Venez nous rejoindre pour le premier avantJug de l’année. L’avant Jug c’est quoi ? Pas de sujet imposé, c’est l’occasion pour nous de se retrouver tous les mois juste pour discuter. Ca nous permet de revoir les copines Jduchess, les anciens collègues [...]]]></description>
			<content:encoded><![CDATA[<p>Les inscriptions pour la soirée « <a title="Soirée Devops" href="http://www.parisjug.org/xwiki/bin/view/Meeting/20120110">Soirée Devops</a> » du ParisJug sont ouvertes. Venez nous rejoindre pour le premier avantJug de l’année.</p>
<p><strong>L’avant Jug c’est quoi ?</strong><br />
Pas de sujet imposé, c’est l’occasion pour nous de se retrouver tous les mois juste pour discuter. Ca nous permet de revoir les copines Jduchess, les anciens collègues et de faire connaissance avec d’autres développeurs.</p>
<p><strong>Où ? Quand ?</strong><br />
Rdv mardi 10 janvier au Café Vavin (18, Rue Vavin, 75006 Paris) entre 18h30 et 19h15. Oui, c’est tôt mais ce n’est qu’une fois par mois <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Pour nous retrouver dans le Vavin n’hésitez pas demander où sont les Jduchess aux serveurs.</p>
<p><strong>Attention !</strong><br />
Pour des questions d&#8217;organisation au Vavin, prévenez nous de votre venue par mail à duchessfr(at)gmail(dot)com au plus tard le mardi matin. Cela nous permettra de réserver des places dans la salle du JUG et ainsi de passer un bon moment en toute sérénité <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/avant-jug-2012-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://jduchess.org/duchess-france/blog/5893/</link>
		<comments>http://jduchess.org/duchess-france/blog/5893/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 12:16:51 +0000</pubDate>
		<dc:creator>Claude Falguière</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5893</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm8.staticflickr.com/7159/6606040575_acc83b10af_o.png" width="600" height="250" border="0" usemap="#map" /></p>
<map id="map" name="map">
<area shape="rect" coords="269,62,530,205" href="http://devoxx.fr/display/FR12/Accueil" target="_blank" />
</map>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/5893/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour sur le Hands On autour de Apache Mahout</title>
		<link>http://jduchess.org/duchess-france/blog/retour-sur-le-hands-on-autour-de-apache-mahout/</link>
		<comments>http://jduchess.org/duchess-france/blog/retour-sur-le-hands-on-autour-de-apache-mahout/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 12:29:50 +0000</pubDate>
		<dc:creator>dahliascherr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5869</guid>
		<description><![CDATA[Ma toute première marmite. J’avais prévenu tout le monde pour ma première, mari et collègues : ce soir, c’est soirée entre filles. On code. Je ne vous raconte pas la surprise en trouvant au 8ème étage des locaux de So@t, une salle remplie de garçons : “- Euh, les Duchess, c’est bien là ?” Oui, [...]]]></description>
			<content:encoded><![CDATA[<h3>Ma toute première marmite.</h3>
<p>J’avais prévenu tout le monde pour ma première, mari et collègues : ce soir, c’est soirée entre filles. On code.</p>
<p>Je ne vous raconte pas la surprise en trouvant au 8ème étage des locaux de So@t, une salle remplie de garçons : “- Euh, les Duchess, c’est bien là ?”</p>
<p>Oui, c’était bien là. 23 garçons et 4 filles &#8211; quand même &#8211; tous réunis pour découvrir<strong> Apache Mahout</strong> (dire <em>maoute</em>), une librairie Open Source Java. Parce que les soirées code des Duchess sont ouvertes à tout le monde et c&#8217;est tant mieux.</p>
<p>Donc je m’installe au premier rang, pour prendre une des dernières places restantes et refais avec celui qui sera mon binôme de la soirée l’inventaire des tâches préparatoires (Inquiétude soudaine, n’ai-je rien oublié ? Il faut dire que je suis un peu venue les mains dans les poches, sans même préparer le sujet !) :</p>
<ul>
<li>installer<em> Play! Framework</em></li>
<li><em>télécharger Git</em>.</li>
</ul>
<p>Ouf, c’était bon, très facile d’ailleurs.</p>
<p>La soirée commence. Le principe : une présentation avant de passer au concret avec un petit exercice de codage à réaliser.</p>
<h3>Michaël Figuière et Jean-Baptiste Lemée nous font découvrir la librairie Apache Mahout.</h3>
<p>Quelle chance ! Je suis tombée sur un sujet passionnant :<strong> le <a href="http://en.wikipedia.org/wiki/Machine_learning" target="_blank">Machine Learning</a>.</strong> Pour rappel, ce sous-domaine de l’ <a href="http://fr.wikipedia.org/wiki/Intelligence_artificielle" target="_blank"><strong>Intelligence Artificielle</strong></a>, étudie les machines capables “d’apprendre”, c’est-à-dire qui adaptent leur comportement en fonction des données reçues.</p>
<p>La librairie Apache Mahout est donc un ensemble d’implémentations d’algorithmes permettant de rajouter des fonctionnalités intelligentes aux applications à partir des données issues du comportement des utilisateurs.</p>
<p>On rencontre déjà sur le web des applications utilisant des algorithmes de Machine Learning :</p>
<ul>
<li>sur Amazon, les recommandations des articles achetés par d’autres utilisateurs “similaires” (par un algorithme de Recommandation),</li>
<li>les filtres de mails capables d’identifier les spams en entrée grâce à une classification déjà existante (algorithme de classification automatique des documents),</li>
<li>ou encore Google News regroupant les news similaires et attribution de tags (algorithme de Clustering).</li>
</ul>
<p>Le machine Learning est un bon complément aux moteurs de Recherche puisqu’il peut être utilisé pour améliorer l’affichage des résultats d’une recherche utilisateur. (Tiens ça, j&#8217;ai déjà entendu parler dans un sujet connexe, le Web Sémantique, par Nuxeo. Cette fonctionnalité de filtre de recherche est en effet intéressante pour un ECM (<em><a href="http://fr.wikipedia.org/wiki/Gestion_de_contenu" target="_blank">Enterprise Content Management</a>)</em>.)</p>
<p>Bref, Apache Mahout, propose justement de mettre en oeuvre ce type de fonctionnalités et ce de manière très aisée.</p>
<h3>Alors, c’est parti pour la pratique!</h3>
<p>Nous devons réaliser un moteur de recherche de recettes de cuisine. Plus précisément, l’application propose des recettes de cuisine proches des goûts de l’utilisateur, si, si, ça marche !</p>
<p>En quelques lignes de code (5 précisément), et un ajustement empirique du paramétrage, j’obtiens sur mon écran une suggestion de recettes (éclair au chocolat, fondant au chocolat, salade au fenouil&#8230;) rentrées dans la base par mon voisin (lui aussi aime le chocolat). Tout cela après avoir défini les recettes que j’aime&#8230;dont quelques unes à base de chocolat.</p>
<p>Alors, comment fonctionne le moteur de recommandations ?</p>
<p>1) Vous spécifiez le datamodel (l’ensemble des données à prendre en compte en entrée) :</p>
<p><code>DataModel dataModel =</code></p>
<p>2) vous définissez le type de “similarité” :</p>
<p><code>UserSimilarity userSimilarity =</code></p>
<p>3) vous calculez le “voisinage”, un ensemble d’utilisateurs proches selon la règle de similarité définie au point 2 :</p>
<p><code>UserNeighborhood userNeighborhood =</code></p>
<p>4) Votre moteur est prêt, vous pouvez l’utiliser pour récupérer des items à recommander à l’utilisateur.</p>
<p>Ici, c’est l’algorithme de Recommandation “User-based” qui a été mis en oeuvre. Au lieu du critère des utilisateurs similaires, il est possible de retrouver les items qui ont des points en commun : c’est l’algo Item-based. L’application ayant reconnu que j’avais des points communs avec mon binôme m’a proposé ses items. Tout un programme !</p>
<p>Bien sûr, agilité et bonnes pratiques obligent, nous avons réalisé la fonctionnalité après avoir fait fonctionner le test unitaire !</p>
<p>Vous voyez, c’était vraiment très simple et rapide, même en comptant les pauses pour déguster les sushis. (et boissons de toutes sortes, de quoi sustenter tous les amateurs de marmite à volonté. Bravo pour l’organisation. ) Bon, je ne vous cache pas, la méthode de choix des implémentations restait pifométrique à ce stade :  <code>LogLikelihoodSimilarity</code> et pourquoi pas <code>TanimotoCoefficientSimilarity</code> ? <code>NearestNUserNeighborhood</code> plutôt que <code>ThresholdUserNeighborhood</code>, etc&#8230; On peut encore s’améliorer.</p>
<p>Quelle soirée sympa et intéressante.</p>
<p>J&#8217;ai hâte d&#8217;être à la prochaine marmite avec les Duchess. Hé les filles, vous venez la prochaine fois ?</p>
<p><a href="http://mahout.apache.org/" target="_blank">http://mahout.apache.org/</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/retour-sur-le-hands-on-autour-de-apache-mahout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Open France 2012</title>
		<link>http://jduchess.org/duchess-france/blog/agile-open-france-2012/</link>
		<comments>http://jduchess.org/duchess-france/blog/agile-open-france-2012/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 08:33:12 +0000</pubDate>
		<dc:creator>ElleneDijoux</dc:creator>
				<category><![CDATA[agilité]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5865</guid>
		<description><![CDATA[Du 18 au 20 Janvier 2012 aura lieu en Alsace, Agile Open France 2012. Qu&#8217;est-ce-que Agile Open ? Agile Open est un cycle de conférences au format Format Ouvert. Il est organisé par des agilistes un peu partout dans le monde. Vous avez peut être vu l&#8217;article de Linda Van Der Pal à ce sujet [...]]]></description>
			<content:encoded><![CDATA[<p>Du 18 au 20 Janvier 2012 aura lieu en Alsace, <a href="http://www.agileopen.net/aof12" target="_blank">Agile Open France 2012</a>.</p>
<h2>Qu&#8217;est-ce-que Agile Open ?</h2>
<p>Agile Open est un cycle de conférences au format <a href="http://www.agileopen.net/node/119" target="_blank">Format Ouvert</a>. Il est organisé par des agilistes un peu partout dans le monde. Vous avez peut être vu l&#8217;article de Linda Van Der Pal à <a href="../../blog/review-agile-open-day-1" target="_blank">ce sujet sur le blog World Wide Duchess</a>. Le concept est tout simple : des participants auto-organisés proposent des sujets en rapport avec le développement logiciel et les méthodes agiles. Vous voulez partager des pratiques, idées, codes, expériences sur le sujet ? Cette conférence est faite pour vous !</p>
<h2>Agile Open France 2012</h2>
<p>Agile Open France est organisé toutes les années depuis 2008 en Alsace. Pour suivre l&#8217;actualité de cette conférence, vous pouvez suivre leur blog : <a href="http://blog.agileopenfrance.com/" target="_blank">http://blog.agileopenfrance.com/</a></p>
<p>Dans un cadre magnifique et avec un format participatif, cet évènement rencontre chaque année beaucoup de succès. Mais les conférences se suivent d&#8217;année en année mais ne se ressemble pas ! Car les sujets sont faits par et pour vous.</p>
<h2>Informations pratiques</h2>
<ul>
<li><strong>Où ?</strong> En Alsace à Itterswiller.</li>
<li><strong>Quand ?</strong> Le 18-19-20 Janvier 2012.</li>
<li><strong>Combien ?</strong> 360 euros pour toute inscription jusqu&#8217;au 25 décembre 2011.</li>
<li><strong>Comment ?</strong> Tout est expliqué <a href="http://www.amiando.com/aof12.html" target="_blank">ici</a> .</li>
</ul>
<p><strong>Attention les places sont limitées alors inscrivez-vous vite !</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/agile-open-france-2012/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Entretien sur DevOps avec Henri Gomez</title>
		<link>http://jduchess.org/duchess-france/blog/entretien-sur-devops-avec-henri-gomez/</link>
		<comments>http://jduchess.org/duchess-france/blog/entretien-sur-devops-avec-henri-gomez/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 04:24:55 +0000</pubDate>
		<dc:creator>Agnes Crepet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5819</guid>
		<description><![CDATA[Le Lyon JUG accueille Henri Gomez le 20 décembre prochain pour une soirée autour de DevOps. L’idée DevOps est de favoriser la collaboration et la communication entre les équipes de développement logiciel et les équipes d’exploitation. Henri Gomez partagera son retour d’expérience et démarche de mise en place chez eXo Platform, un éditeur logiciel. Henri [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-2534" src="http://www.lyonjug.org/_/rsrc/1322554395840/speakers/henri_gomez.jpeg" width="150" height="150" alt="Henri Gomez" /> Le <a href="http://www.lyonjug.org" target="_blank">Lyon JUG</a> accueille <a href="http://twitter.com/hgomez" target="_blank">Henri Gomez</a> le 20 décembre prochain pour une soirée autour de DevOps. L’idée DevOps est de favoriser la collaboration et la communication entre les équipes de développement logiciel et les équipes d’exploitation. Henri Gomez partagera son retour d’expérience et démarche de mise en place chez <a href="http://www.exoplatform.com/" target="_blank">eXo Platform</a>, un éditeur logiciel. Henri travaille dans l’industrie logicielle depuis plus de 20 ans. Il a travaillé pour différentes sociétés développant des logiciels pour la finance, les flux financiers et le trading.  Avant de rejoindre eXo, il a travaillé comme Chef de Projet puis Architecte Logiciel. Avant son talk, nous avons voulu lui poser quelques questions, nous nous y sommes mis à plusieurs avec quasi toute l&#8217;équipe du Lyon JUG, à savoir <a href="http://twitter.com/cedric_exbrayat" target="_blank">Cédric Exbrayat</a>, <a href="http://twitter.com/AlexisHassler" target="_blank">Alexis Hassler</a> et moi-même, <a href="http://twitter.com/agnes_crepet" target="_blank">Agnès Crépet</a>.</p>
<p><strong>Lyon JUG Team : Peux tu nous dire en quelques mots quel a été ton parcours avant Exo et quelle est ta mission aujourd’hui chez eux? As-tu commencé ta carrière par le coté Dev ou Ops?</strong></p>
<p><strong>Henri : </strong> J&#8217;ai commencé ma carrière comme développeur sous Mac, C et 68000, pour une société qui faisait un logiciel pour salle de marchés.<br />
Environnement donc temps réel mais aussi interface graphique sous Mac OS 5/6/7 (et oui ça date)&#8230; Puis nous sommes passés à proposer des services de fournitures de cotations temps réelles pour des compagnies de gestion de portefeuilles. Là, découverte des environnements Unix et notamment Linux dans ses toutes premières versions 0.99999. Surtout premiers contacts avec le monde OpenSource, Linux certes mais surtout Gnu. Dans cette petite société, j&#8217;avais une activité qui couvrait développement (la nuit), support client et production (le jour). Donc une approche de développement très teintée des besoins de productions (en plus des attentes clients).<br />
Après quelques rachats, me voici à m&#8217;occuper de développement en Powerbuilder (no comment) mais surtout mise en place de stations Sparc sous Redhat Linux. Deuxième contact avec l&#8217;OpenSource, Apache HTTPd serveur et découverte du système de packaging RPM. Voici une solution qui permet d&#8217;installer et supprimer des applications mais gère en plus très finement les dépendances.<br />
Nouvelle aventure professionnelle dans la patrie des Gones cette fois-ci, dans une maison traditionnellement AS400. Cela correspond au démarrage de Java (1998) et va suivre une longue période de prosélytisme et lobbying pour pousser des technologies OpenSource et Java. Tout d&#8217;abord Chef de Projet sur les projets Nouvelles Technologies (Java l&#8217;était à l&#8217;époque), avec encadrement d&#8217;une bande de jeunes loustics et quelques projets majeurs autour de Java. En parallèle, je découvre Apache JServ puis <a href="http://tomcat.apache.org/" target="_blank">Tomcat</a>, et devient commiter sur Tomcat et le <a href="http://tomcat.apache.org/connectors-doc/" target="_blank">connecteur mod_jk</a>, puis membre de <a href="http://www.apache.org/" target="_blank">l&#8217;Apache Software Fondation</a>.<br />
Mais je n&#8217;oublie pas mes premières amours sur le packaging et le déploiement et lance le projet <a href="http://www.jpackage.org/" target="_blank">JPackage </a>dont le but était d&#8217;apporter à l&#8217;écosystème Java ce qui existait en Perl via CPAN. Le bébé a bien grandi par la suite puisqu&#8217;on le retrouve maintenant dans des distributions comme CentOS, RHEL, Suse ou Amazon (AWS).<br />
Après quelques années comme Chef de Projet, je deviens Architecte, où j&#8217;assure la veille technologique autour de Java et OSS, développe des protos et assiste les chefs de projets et équipes de développements. Une fois le passage de Ant à Maven finalisé pour l&#8217;ensemble des projets, j&#8217;en ai profité pour monter une usine logicielle basée sur <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>, <a href="http://nexus.sonatype.org/" target="_blank">Nexus</a>, <a href="http://java.net/projects/hudson/" target="_blank">Hudson</a> et <a href="http://www.sonarsource.org/" target="_blank">Sonar</a>.</p>
<p><strong>Lyon JUG Team : Aujourd’hui : fais-tu plutôt du Dev ou de l’Ops (Exo/hors Exo) ? Et est-ce temporaire ou cela peut changer du jour au lendemain?</strong></p>
<p><strong>Henri : </strong>Chez eXo, j&#8217;ai commencé avec 2 casquettes, Ops et QATech et j&#8217;ai donc monté une usine de QA, permettant d&#8217;automatiser les tests de performances et fonctionnels, taches autrefois faites manuellement et en journée.<br />
Actuellement je ne fais quasiment que de l&#8217;Ops, administration des infrastructures dédiées et Cloud (Amazon). J&#8217;ai aussi une mission de conseil sur nos produits pour traduire aux équipes de développement les attentes d&#8217;équipes de production (interne ou externes).</p>
<p><strong>Lyon JUG Team : Aujourd’hui : Suite à ton expérience, quelles sont les trucs en terme d’organisation d’équipe, de répartions des tâches et des rôles qui vont faciliter le fait que les Ops bossent réellement et “main dans la main” avec les équipes de dev (Casser les équipes? Travailler en peer-mode? Préférer travailler en itératif / mode agile etc.? Assigner des tâches purement de prod à des devs? L’inverse peut-être également?) En synthèse : Comment intéresser réellement les uns aux sujets des autres?</strong></p>
<p><strong>Henri : </strong>Le premier pré-requis, c&#8217;est de sortir des guerres de clocher. Qu&#8217;on soit Ops, Devs ou QA, on travaille tous ensemble pour des clients, qui s&#8217;attendent à un résultat. S&#8217;il y a incident, que la faute soit à un Dev, un QA ou un Ops, leur importera peu. En finir donc une bonne fois pour toute avec la patate chaude.<br />
Il n&#8217;y a pas solution unique, mais casser les équipes et mélanger Ops/QA/Devs n&#8217;est pas forcément facile à réaliser en terme d&#8217;organisation interne. Ce que j&#8217;ai expérimenté et qui marche bien, est un travail en peering, Ops/Devs (voir QA) qui permet à chacun d&#8217;apprendre l&#8217;environnement de l&#8217;autre, notamment les contraintes.<br />
Au risque de sortir une évidence, le message fort dans DevOps, c&#8217;est DIALOGUE. On verra lors de la présentation comment on peut utiliser de l&#8217;outillage plutôt Devs pour des Ops et des QA, de façon à ce que l&#8217;information soit disponible à tous et de la même manière.</p>
<p><strong>Lyon JUG Team : Sur le mouvement Devops : Quand as-tu entendu parlé du mouvement pour la première fois? Qu’est ce représente ce mouvement pour toi aujourd’hui? Comment y participes-tu? DevOps faisait partie des sujets tendance à Devoxx 2010 et absent à Devoxx 2011. Est-ce déjà passé de mode ?</strong></p>
<p><strong>Henri : </strong>J&#8217;en ai entendu parlé comme beaucoup dans le courant 2010 mais j&#8217;ai commencé à m&#8217;y intéresser début 2011. Ce mouvement m&#8217;apparait un rien BuzzWord, un peu comme Agile en son temps. Tweeter sur un produit avec un tag #devops est un bon moyen d&#8217;attirer des clients potentiels, il faut aller au delà.<br />
Il y a de vraies bonnes idées dans DevOps, sur de l&#8217;outillage certes, mais aussi sur le débordement Ops/Devs. Trop souvent on cloisonne Devs ou Ops alors qu&#8217;ils peuvent parfaitement se recouvrir ou à ma préférence travailler ensemble.<br />
Ma participation à DevOps est en premier lieu sur des présentations dans les JUG afin de faire mieux comprendre ce que cache ce mot &#8220;magique&#8221;.<br />
On trouve beaucoup de présentations techniques mais peu sur les contextes humains et la réalité du terrain, c&#8217;est ce que j&#8217;essaie d&#8217;adresser dans mes talks en 2011.<br />
Pour l&#8217;absence à Devoxx 2011, je ne serais dire pourquoi, l&#8217;actualité Devs était déjà très riche notamment avec tous les nouveaux langages autour de la VM et n&#8217;a pas laissé de places disponibles. De plus, il existe maintenant des conférences spécifiques comme les <a href="http://devopsdays.org/" target="_blank">DevOps Days</a>.</p>
<p><strong>Lyon JUG Team : Quels sont les bons blogs/tweets a suivre pour découvrir/se perfectionner sur la culture Devops</strong></p>
<p><strong>Henri : </strong> <a href="http://devopsweekly.com/" target="_blank">Devops Weekly</a> en tout premier lieu. C&#8217;est un excellent résumé de ce qu&#8217;il faut voir et savoir. Tout n&#8217;est pas utilisable forcément immédiatement, on le garde dans un coin pour y revenir quand le besoin sera là. Je suis aussi les listes Paris et Lille Devops, mais il y a quand même moins d&#8217;activité. Autre source d&#8217;informations, l&#8217;ami <a href="http://twitter.com/patrickdebois" target="_blank">Patrick Debois</a>, à suivre sur Twitter!<br />
Au final, ce qu&#8217;il manque, ce sont des DOUG (DevOps User Groups) comme cela existe pour Java et les JUG.</p>
<p><strong>Lyon JUG Team :  On parle beaucoup de &#8220;Continuous Delivery&#8221; depuis quelque temps&#8230; Quelles sont ta pratique et ton retour sur le sujet?</strong></p>
<p><strong>Henri : </strong> Continuous Delivery (CD) est un sujet intéressant puisqu&#8217;il est clairement à cheval entre Devs et Ops. C&#8217;est d&#8217;ailleurs généralement un domaine qui peut se retrouver dans le giron d&#8217;un ForgeMaster (clin d&#8217;oeil à mon camarade <a href="http://blog.aheritier.net/" target="_blank">Arnaud Héritier</a>). Pour moi, il y a 2 types de Continuous Delivery :</p>
<ul>
<li>Celui pour de la pré-prod et notamment des tests unitaires ou de charges, mais sans nécessité d&#8217;assurer un service de type production</li>
<li>Et il y a le Continuous Delivery directement vers la production. Là je dois dire que ce n&#8217;est pas une mince affaire, surtout lorsqu&#8217;on a des SI complexes et des référentiels chargés.</li>
</ul>
<p>J&#8217;aurais tendance à privilégier le CD type pré-prod, qui renforce les garanties sur le CD pur prod. Et rien n&#8217;empêche d&#8217;utiliser l&#8217;outillage mis en place pour le CD pré-prod une fois qu&#8217;il est bien rodé pour du CD prod, mais gardons la surveillance des Ops et Devs.</p>
<p><strong>Lyon JUG Team :  Est-ce que les langages comme Java sont compatibles avec DevOps ? Quand on parle de DevOps, on pense plus facilement à du Ruby par exemple.</strong></p>
<p><strong>Henri : </strong> DevOps, ou la vengeance de Ruby passé du coté obscur ? <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
La grande majorité de l&#8217;outillage DevOps est développé en Ruby voir Python et très peu est fait en Java. Plusieurs raisons :</p>
<ul>
<li>Pour les Ops, la JVM donne toujours l&#8217;impression d&#8217;être gourmande en mémoire et longue à démarrer.</li>
<li>La simplicité apparente de Ruby ou Python car Java apparait encore trop pour les Ops comme un outil de développement pur, ce qui n&#8217;est pas vrai.</li>
<li>Copy/Paste effect, quand un écosystème est construit avec un outil, on va le voir grandir et s&#8217;étoffer autour du même outil.</li>
</ul>
<p>Après Java sert souvent en DevOps. Typiquement lorsqu&#8217;on utilise un repositiory de livrables Maven, comme <a href="http://nexus.sonatype.org/" target="_blank">Nexus</a> ou <a href="http://www.jfrog.com/products.php" target="_blank">Artifactory</a>, c&#8217;est bien une application Java qui est dans la boucle. Il n&#8217;est pas impossible que, dans les années à venir, on voit apparaitre de plus en plus de solutions en Java suite au basculement de certains développeurs Java vers le coté obscur <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Lyon JUG Team :  En Java, est-ce qu&#8217;il y a des architectures ou frameworks plus adaptés que d&#8217;autres au DevOps (Full JavaEE, Spring+Tomcat,&#8230;)</strong></p>
<p><strong>Henri : </strong> Pour moi, c&#8217;est moins une question de frameworks que d&#8217;architecture du produit. Si on a des systèmes bien découplés, légers et rapidement déployables, on a les pré-requis DevOps. Si votre application nécessite des opérations complexes, par exemple sur un référentiel au démarrage ou pour une migration, on s&#8217;est déjà tiré une balle dans le pied.<br />
De même, ne pas espérer faire du DevOps si les opérations de mise en place ou démarrage/arrêt des composants de l&#8217;application ne peuvent se faire qu&#8217;à la main. DevOps c&#8217;est aussi l&#8217;automatisation de taches de production.</p>
<p><strong>Lyon JUG Team :  Quelle serait la technique de ninja du Devops pour déployer des applis web Java ?</strong></p>
<p><strong>Henri : </strong> Tout dépend, mais je répondrais le Packaging Natif (dont je parlerai dans des présentations futures). Pourquoi?<br />
Parce qu&#8217;il permet non seulement de déployer une application, mais de se garantir que les pré-requis seront présents. Et que l&#8217;ensemble des composants suivront un cycle de mise à jour comme des composants OS.<br />
Une application est un ensemble de composants logiciels, qu&#8217;ils soient fournis par le système d&#8217;exploitation ou par nous. Autant utiliser le même outillage pour s&#8217;assurer du cycle de vie des composants.</p>
<p><strong>Lyon JUG Team : Est-ce que DevOps et PaaS sont des tendances distinctes, communes, convergentes,&#8230; ?</strong></p>
<p><strong>Henri : </strong>PaaS, c&#8217;est quoi ? Platform as a Service, autrement dit, un couple hardware/middleware est prêt à recevoir vos développements. Si votre fournisseur du PaaS vous permet de déployer vos applications via scripting par exemple, vous pourrez faire du DevOps avec. On mélange souvent Iaas, Paas, Saas et DevOps, les uns n&#8217;impliquent pas les autres. On peut parfaitement faire du DevOps sur une infrastructure interne traditionnelle <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Lyon JUG Team : Est-ce que DevOps et outsourcing ou infogérance sont compatibles ?</strong></p>
<p><strong>Henri : </strong>J&#8217;aurais tendance à demander si Agile et outsourcing/infogérance sont déjà compatibles <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Si la communication est bonne entre Dev et Ops, qu&#8217;elle passe par mail, skype, chat, la distance compte peu. On a tous connu des situations/compagnies où des personnes à 1 mètre les unes des autres ne communiquaient pas.<br />
De même, l&#8217;OpenSource démontre tous les jours que des personnes de nationalités différentes, ne parlant pas la même langues et n&#8217;étant pas sur les mêmes fuseaux horaires peuvent collaborer et fournir des résultats exceptionnels.<br />
Mon retour d&#8217;expérience me ferait donc dire que l&#8217;important c&#8217;est le dialogue et la volonté de travailler ensemble.</p>
<p><strong>Lyon JUG Team : Quels sont tes outils préférés, ceux qui représentent ce mouvement?</strong></p>
<p><strong>Henri : </strong>J&#8217;ai plusieurs outils dans ma musette qui me semblent indispensables :</p>
<ul>
<li><a href="http://jenkins-ci.org/" target="_blank">Jenkins</a>: Le couteau suisse avec lequel on peut pratiquement tout faire, du build/ci traditionnel mais aussi du contrôle d&#8217;instances via les agents remote (ex: ssh agent). C&#8217;est le composant principal des usines eXo (dev, qa et continuous deployment)</li>
<li><a href="https://www.virtualbox.org/" target="_blank">VirtualBox </a>: C&#8217;est LA solution permettant de monter rapidement des VM Linux ou autres pour faire des expérimentations ou simuler des déploiements.</li>
<li><a href="http://vagrantup.com" target="_blank">Vagrant</a> / <a href="https://github.com/jedi4ever/veewee" target="_blank">Veewee </a>: 2 outils pour construire des VM Linux opérables en VirtualBox via scripting. Idéal pour construire des images précises d&#8217;OS.</li>
<li><a href="http://susestudio.com/" target="_blank">SuseStudio </a>: Si on est utilisateur <a href="http://www.opensuse.org/en/" target="_blank">OpenSuse </a>ou <a href="http://www.suse.com/products/server/" target="_blank">SLES</a>, <a href="http://susestudio.com/" target="_blank">SuseStudio</a> est un superbe outil Web, gratuit, qui permet lui aussi de construire des images OpenSuse avec une grande facilité et à destination de VBox, VMWare, DVD ou même Amazon EC2. Si vous souhaitez couvrir plus d&#8217;OS, <a href="https://www.usharesoft.com/home/" target="_blank">UShareSoft Builder</a> est excellent aussi.</li>
<li>SCM : <a href="http://subversion.tigris.org/" target="_blank">Subversion</a> ou <a href="http://git-scm.com/" target="_blank">Git</a>, par qu&#8217;on ne doit jamais perdre la trace des opérations. Ops ou Devs, toute modification du SI doit pouvoir être suivie et connue.</li>
<li><a href="http://www.atlassian.com/software/jira/overview" target="_blank">JIRA</a>/<a href="http://www.atlassian.com/software/confluence/overview" target="_blank">Confluence </a>: Que ce soit pour des sprints Devs ou pour des taches Ops, je trouve le couple JIRA/Confluence parfait pour tout le suivi activités et la partie documentaire.</li>
<li>shell &amp; co : quoi qu&#8217;on en dise, on se retrouve fatalement un jour dans la console et une bonne pratique des outils shells permet d&#8217;à peu prêt tout faire.</li>
</ul>
<p>Vous me direz qu&#8217;il n&#8217;y a ni <a href="http://projects.puppetlabs.com/projects/puppet" target="_blank">Puppet</a> ni <a href="http://www.opscode.com/chef/" target="_blank">Chef</a> dans ma musette et je répondrai qu&#8217;après les avoir évalué, je les ai trouvé un poil complexes à mettre en oeuvre pour mes besoins. On finit tôt ou tard à sortir du DSL fourni (Puppet) et/ou devoir développer en Ruby (Chef), ce qui peut complexifier la tache dans un mode Devs + Ops, ajoutant un nouveau langage comme pré-requis de discussions.<br />
Par contre, si on a déjà du monde connaissant bien Puppet ou Chef en interne, ce sont de bons outils pour le DevOps.</p>
<p><em><br />
<strong>Merci Henri! Rendez-vous sur <a href="http://www.lyonjug.org/evenements/devops" target="_blank">le site du LyonJUG pour vous inscrire à sa session du 20 décembre</a>!</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/entretien-sur-devops-avec-henri-gomez/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Architecture stateful vs stateless</title>
		<link>http://jduchess.org/duchess-france/blog/architecture-stateful-vs-stateless/</link>
		<comments>http://jduchess.org/duchess-france/blog/architecture-stateful-vs-stateless/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 07:59:14 +0000</pubDate>
		<dc:creator>Agnes Crepet</dc:creator>
				<category><![CDATA[L'actualité]]></category>
		<category><![CDATA[Les Conférences]]></category>
		<category><![CDATA[cdi]]></category>
		<category><![CDATA[EJB3]]></category>
		<category><![CDATA[JAVA EE]]></category>
		<category><![CDATA[Play!]]></category>

		<guid isPermaLink="false">http://jduchess.org/duchess-france/?p=5781</guid>
		<description><![CDATA[Le 22 novembre, le Lyon JUG propose une soirée autour des architectures Stateful et Stateless. Deux équipes vont donc s&#8217;affronter sur le ring du Lyon JUG. Du côté Stateful, Antoine Sabot-Durand nous fera une présentation intitulée &#8220;Stateful is Beautiful&#8221;, revenant aux sources de Java EE (CDI, EJB 3&#8230;), le tout articulé autour d&#8217;une démo! Et [...]]]></description>
			<content:encoded><![CDATA[<p>Le 22 novembre, le <a href="http://www.lyonjug.org/">Lyon JUG</a> propose une soirée autour des architectures Stateful et Stateless. Deux équipes vont donc s&#8217;affronter sur le ring du <a href="http://www.lyonjug.org/">Lyon JUG</a>. Du côté Stateful, <a href="http://twitter.com/antoine_sd">Antoine Sabot-Durand</a> nous fera une présentation intitulée &#8220;Stateful is Beautiful&#8221;, revenant aux sources de Java EE (CDI, EJB 3&#8230;), le tout articulé autour d&#8217;une démo! Et du côté Stateless, on retrouvera <a href="http://k33g.github.com/">Philippe Charrière</a> et <a href="http://coffeebean.loicdescotte.com/">Loïc Descotte</a>, tous les deux co-auteurs de <a href="http://3monkeys.github.com/play.rules">l&#8217;ebook Play.Rules</a> qui nous parleront donc des concepts des architectures Stateless à travers une démo basée sur <a href="http://www.playframework.org/">Play Framework!</a>. Pour vous mettre l&#8217;eau à la bouche, voici un interview des speakers : les mêmes questions ont été posées à chaque équipe (à part la dernière), et elles n&#8217;ont évidemment pas eu accès aux réponses de l&#8217;équipe adverse avant la diffusion de cet interview.</p>
<p><a href="http://twitter.com/antoine_sd" target="_blank"><img class="alignleft wp-image-2534" src="http://www.lyonjug.org/_/rsrc/1320851509197/speakers/ASD%20223x165_4.JPG?width=150" alt="@antoine_sd" width="105" />Antoine Sabot-Durand </a> est consultant et architecte Java EE chez <a href="http://www.ippon.fr/">Ippon Technologies</a>. Il intervient sur toute sorte de missions : conceptions d&#8217;architecture applicative, audits d&#8217;applications existantes, formations. Il est également en charge de la capitalisation des savoir faire au sein de la société. Il a acquis une expertise sur Java EE et plus particulièrement sur EJB 3.X et CDI. Il est l&#8217;auteur de quelques articles ayant alimenté le débat sur les standards et les choix technologiques sur les développements Java comme &#8220;<a href="http://blog.ippon.fr/2010/03/30/les-rendez-vous-manques-de-spring/">Les rendez-vous manqués de Spring</a>&#8221; ou plus récemment une suite d&#8217;article sur <a href="http://blog.ippon.fr/tag/java-ee/">Java EE 6</a>. Il est également membre de l&#8217;Expert Group CDI 1.1 et technical Leader sur le <a href="http://seamframework.org/Seam3/SocialModule">module Seam Social du projet Open Source Seam 3</a>. Vous pouvez suivre Antoine sur <a href="http://twitter.com/antoine_sd">Twitter</a> ou <a href="https://plus.google.com/u/0/101456034283911479056">Google+</a>.</p>
<p><a href="http://k33g.github.com/" target="_blank"><img class="alignleft wp-image-2534" src="https://lh3.googleusercontent.com/-P19z46vNZYE/TiRZs6HjOwI/AAAAAAAAHRs/Ez72IFipSao/w614-h609-k/k33g.org.min.png" alt="@antoine_sd" width="105" />Philippe Charrière</a> s&#8217;est présenté lui-même comme suit : &#8220;Je suis &#8220;avant-vendeur&#8221; à Lyon chez <a href="http://www.steria.com/">Steria</a>. Avant d&#8217;être &#8220;ingénieur informaticien&#8221; j&#8217;ai commencé à coder sur une TI57 (beaucoup ne doivent pas savoir ce que c&#8217;est, normal j&#8217;ai 42 ans (ça c&#8217;est geek)) et depuis la passion du code ne m&#8217;a plus quitté. J&#8217;ai fait différents métiers en passant par technico-commercial, développeur cobol, responsable informatique, chef de projet, architecte .Net (désolé), directeur de projet, responsable technique, avant-vendeur&#8230; et ce n&#8217;est certainement pas fini. Mais je n&#8217;ai jamais lâché &#8220;le code&#8221;, plutôt multi-techno, ça m&#8217;aide à faire des propositions commerciales qui tiennent la route et à la livrer avec des prototypes quand je peux. @Home, c&#8217;est Javascript, Coffeescript, Play!Framework, et tout ce qui touche au mobile (grosse passion pour les jouets Apple, mais bidouille aussi Android)&#8221;. Vous pouvez consulter <a href="http://k33g.github.com/">le blog de Philippe</a> ou le suivre sur <a href="https://twitter.com/k33g_org/">Twitter</a> ou <a href="https://plus.google.com/u/0/116392997992514180254">Google+</a>.</p>
<p><a href="http://coffeebean.loicdescotte.com/" target="_blank"><img class="alignleft wp-image-2534" src="http://d2o7bfz2il9cb7.cloudfront.net/main-thumb-791479-100-Ag0qorqM9hVNbgB9GL8isJ8wY7LvOqXa.jpeg" alt="Loïc Descotte" width="105" />Loïc Descotte</a> s&#8217;est également présenté lui-même : &#8220;JUG Leader à Grenoble (<a href="http://www.alpesjug.org/">Alpes JUG</a>) et développeur chez <a href="www.kelkoo.fr">Kelkoo</a>. Ce que j&#8217;aime particulièrement dans le métier/hobby de développeur c&#8217;est l&#8217;évolution permanente des technologies qui permet de découvrir sans cesse de nouvelles choses. Dès que j&#8217;ai un peu de temps j&#8217;essaie de parler un peu des frameworks que je teste sur mon blog <a href="http://coffeebean.loicdescotte.com">CoffeeBean</a>.  J&#8217;ai découvert Play début 2010 grâce à une présentation de Guillaume Bort. J&#8217;ai tout de suite été séduit par la puissance, la simplicité de ce framework, qui contrairement a pas mal de ses concurrents côté Java (Wicket, JSF&#8230;) ne cherche pas à masquer les principes et le fonctionnement du Web.&#8221; Vous pouvez également le suivre sur <a href="http://fr.twitter.com/loic_d">Twitter</a> ou <a href="https://plus.google.com/u/0/117447657524839844765">Google+</a>.</p>
<p><em>Cet interview a été préparé conjointement par <a href="http://twitter.com/agnes_crepet">Agnès CREPET</a> et <a href="http://twitter.com/cedric_exbrayat">Cédric EXBRAYAT</a>, deux membres de la team du <a href="http://www.lyonjug.org/">Lyon JUG</a>. Merci également à <a href="http://twitter.com/clacote">Cyril Lacôte</a> de l&#8217;équipe du podcast <a href="http://www.cast-it.fr">Cast-IT</a> pour son aide sur la relecture de cet interview.</em></p>
<p><strong>Agnès &amp; Cédric : Pour introduire un peu les concepts d’une architecture avec ou sans état, comment définiriez-vous ce qu&#8217;est un état ?</strong><br />
<strong> </strong></p>
<p><strong>Loïc </strong>(Equipe Stateless): Dans une application il existe (presque) toujours un état. Lorsqu&#8217;on parle d&#8217;architecture sans état il s&#8217;agit souvent d&#8217;un raccourci pour dire qu&#8217;il n&#8217;y a pas d&#8217;état au niveau middleware (sur le serveur d&#8217;application par exemple). Dans ce contexte, l&#8217;état est un ensemble de données relatives à une session utilisateur à un instant t. Ces données peuvent comprendre les informations relatives à l&#8217;authentification et aux droits de l&#8217;utilisateur, un historique des actions effectuées durant cette session (sélection de paramètres d&#8217;affichage, sélection de produits sur un site marchand&#8230;)</p>
<p><strong>Philippe </strong><strong> </strong>(Equipe Stateless): Globalement, je dis &#8220;comme Loic&#8221;. plus spécifiquement, j&#8217;aurais tendance à &#8220;déshumaniser&#8221; le concept et à rattacher l&#8217;état à une page plutôt qu&#8217;à l&#8217;utilisateur, voire même de manière plus abstraite à une ressource (ex: client lourd à la place de la page). Et cet état existe côté client et côté serveur, pas forcément en même temps selon si l&#8217;on est en stateful ou en stateless :</p>
<ul>
<li>en stateful : la page/client a un état, dont la représentation/(persistance ?) côté serveur est une session en mémoire quasiment au même moment</li>
<li>en stateless : la page/client a un état, dont la représentaion côté serveur est finalement très furtive puisqu&#8217;elle peut n&#8217;exister qu&#8217;au moment où l&#8217;on interroge le serveur.</li>
</ul>
<p><strong>Antoine </strong><strong> </strong>(Equipe Stateful): Un état est une information temporaire gérée au sein d&#8217;une application pour un utilisateur donné ou l&#8217;application dans sa globalité. Cette information permet de conserver de manière transitoire des données concernant l&#8217;utilisation actuelle de l&#8217;application ou un statut d&#8217;avancement dans un processus donné de celle-ci.</p>
<p><strong>Agnès &amp; Cédric : Imaginez que vous atterrissiez sur une île déserte et que vous n&#8217;ayez la possibilité d&#8217;emmener avec vous qu&#8217;un seul framework Java de référence pour coder une application, lequel choisiriez-vous ?</strong><br />
<strong> </strong></p>
<p><strong>Loïc </strong><strong> </strong>(Equipe Stateless): Si on part du principe qu&#8217;il n&#8217;y a pas d&#8217;électricité sur une ile déserte, il va falloir faire le maximum de chose avec le temps de batterie qu&#8217;il nous restera sur notre laptop&#8230; Il nous faut donc un framework productif&#8230; ensuite je pense que vous vous doutez de la réponse <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Philippe </strong><strong> </strong>(Equipe Stateless): perso, je préférerais partir avec un manuel de construction navale et une canne à pêche. Sinon je partirais avec SL4A sur android + moteur beanshell parce que j&#8217;aurais plus de batterie sur mon smartphone que Loic sur son netbook. (Bon, ok, je prendrais Play! aussi parce que je peux utiliser TextMate et que ça consomme moins de ressource)</p>
<p><strong>Antoine </strong>(Equipe Stateful): Pour coder : Java EE 6, parce que c&#8217;est la solution permettant le plus de choix d&#8217;architecture : Stateful ou Stateless, webapp ou client lourd. Sinon la bibliographie Spring est plus volumineuse et avantageuse si on souhaite faire des feux de camp!</p>
<p><strong>Agnès &amp; Cédric : Selon votre approche préférée (stateful/stateless), comment “suivre” et contrôler l’activité d’un client sur mon site? En prenant le fameux exemple d’un client faisant une commande sur un site marchand: comment puis-je lier entre elles les requêtes HTTP d’un même client? Comment je persiste son panier?</strong><br />
<strong></strong></p>
<p><strong>Loïc </strong><strong></strong>(Equipe Stateless): Si on prend l&#8217;exemple de Play, pour lier les requêtes HTTP d&#8217;un même client on dispose d&#8217;un objet d&#8217;accès à la session d&#8217;un utilisateur dans les contrôleurs. Cet objet est initialisé à l&#8217;aide un cookie sur le navigateur. Ce cookie est signé et crypté pour des raisons de sécurité. Si on veut stocker le contenu d&#8217;un panier dans la session utilisateur, on a plusieurs possibilités. La solution la plus pratique et qui sera bientôt la solution la plus standard est d&#8217;utiliser les API de stockage côté navigateur fournies par HTML5.</p>
<p><strong>Philippe </strong><strong></strong>(Equipe Stateless): Facile! Comme Loïc. Bon je détaille un peu. Pour lier et persister : <em>localstorage</em> (donc il faut faire du js) est une super solution, facile à mettre en oeuvre. Beaucoup l&#8217;associe à HTML5, mais en fait la notion de <em>localstorage</em> existait avant, et il existe différents types de localstorage : <a href="http://www.sqlite.org/">SQLite</a>, local storage (key-value), DOM Storage, user-data (anciennes versions de navigateurs). Pour plus d&#8217;infos : voir cet article &#8220;<a href="http://htmlui.com/blog/2011-08-23-5-obscure-facts-about-html5-localstorage.html"><em>5 Obscure Facts About HTML5 LocalStorage</em></a>&#8220;. Pour les navigateurs plus vétustes, il y a aussi la possibilité d&#8217;utiliser les fonctionnalités de storage de flash, il est très facile de discuter en js avec actionscript (et inversement). Pour les inquiets du JS, il existe de très bonnes librairies qui encapsulent et abstraient tout ça, une des plus connues est <a href="http://westcoastlogic.com/lawnchair/">lawnchair.js</a> de <a href="https://twitter.com/brianleroux">Brian Leroux</a> (de chez <a href="http://www.nitobi.com/">Nitobi</a> / <a href="http://www.adobe.com/">Adobe</a> / <a href="http://phonegap.com/">Phonegap</a>) et qui fournit tous les adapters nécessaires en fonction des navigateurs. Un des plug-ins lawnchair fait du clé-valeur avec la base SQLite embarquée qui est plus rapide que la version clé-valeur de base (ça s&#8217;utilise par contre de manière asynchrone avec des callbacks). C&#8217;est aussi intéressant de se coder la sienne au moins pour comprendre les concepts.</p>
<p><strong>Antoine </strong>(Equipe Stateful): [Pour lier les requêtes HTTP :] en les stockant dans un contexte session ou mieux conversation. Pas de persistance explicite. Le panier reste en mémoire, il sera sérialisé en cas de besoin (charge importante). Si j&#8217;attends une durée de vie plus importante, je peux mettre un listener à la fin de la session pour le stocker explicitement.</p>
<p><strong>Agnès &amp; Cédric : Comment je contrôle la conversation web de mon client : comment gérer par exemple le bouton back du navigateur? </strong><br />
<strong></strong></p>
<p><strong>Loïc</strong> <strong></strong>(Equipe Stateless): Le problème du bouton back du navigateur se pose beaucoup moins avec un serveur stateless. Le principe d&#8217;architecture stateless est fortement lié à celui d&#8217;architecture RESTful : avec des URL bien définies, n&#8217;importe quelle étape de la navigation doit être bookmarkable. Si on revient sur une de ces étapes, le fait d&#8217;avoir un serveur stateless fera qu&#8217;on ne risque aucune incohérence d&#8217;état sur le serveur : la page s&#8217;affichera toujours correctement quel que soit le contexte. Si vous avez déjà utilisé des frameworks comme JSF vous savez que ce n&#8217;est pas toujours le cas quand vous devez tenir compte de l&#8217;état du serveur.</p>
<p><strong>Philippe </strong><strong></strong>(Equipe Stateless): Pour le bouton back, cela peut se gérer côté client : toujours avec le localstorage, une solution peut être aussi de faire une application &#8216;monopage&#8217; (webapp) et de jouer aussi avec les api de gestion de l&#8217;historique du navigateur , des hashtags (window.onhashchange), &#8230;</p>
<p><strong>Antoine </strong>(Equipe Stateful): Plusieurs stratégies en fonction du contexte :</p>
<ul>
<li>Stocker l&#8217;état des vues précédentes pour gérer le back</li>
<li>Demander à JSF de générer des URL Rest avec <a href="http://ocpsoft.com/prettyfaces/">prettyface</a></li>
<li>interdire au navigateur de cacher une page pour forcer son rafraîchissement</li>
<li>gérer correctement les erreurs d&#8217;incohérence entre l&#8217;état serveur et l&#8217;état client</li>
<li>Faire mon rendu en ajax : le bouton back me fera sortir de l&#8217;application</li>
</ul>
<p><strong>Agnès &amp; Cédric : Est-ce possible de gérer plusieurs espaces de travail pour le client, à savoir plusieurs conversations avec la même application dans différents onglets de son navigateur?</strong><br />
<strong></strong></p>
<p><strong>Loïc </strong><strong></strong>(Equipe Stateless) : Je ne suis pas du tout expert sur cette question, le cookie de session étant partagé entre les différents onglet (du moins sous Firefox et Chrome), en principe on ne peut pas avoir plusieurs sessions en même temps avec ce procédé. Après avec Play tout est possible, on peut très bien se contenter de créer une session côté client, encore une fois avec local storage, et associer une session à une instance de page à l&#8217;aide de JavaScript.</p>
<p><strong>Philippe</strong> <strong></strong>(Equipe Stateless): avec le module Secure de base de Play, ça va pas le faire (perso j&#8217;utilise différents navigateurs, ou mode incognito) pour les raisons expliquées par Loic. Quelles solutions ? -&gt; faire sa propre solution d&#8217;authentification et passer des infos dans la requête (bof) -&gt; faire avec -&gt; quand tu es connecté sous google tu ne peux l&#8217;être qu&#8217;avec un seul user -&gt; on perd en souplesse, on gagne en sécurité.</p>
<p><strong>Loic</strong> <strong></strong>(Equipe Stateless): En dernier recours il existe aussi des plugins pour les navigateurs qui permettent d&#8217;avoir des sessions distinctes dans différents onglets via une manipulation des cookies (voir <a href="http://www.logeekiel.com/2009/09/21/ouvrir-deux-session-facebook-gmail-ou-de-nimporte-quel-autre-site-sur-un-meme-navigateur">exemple</a>).</p>
<p><strong>Philippe</strong> <strong></strong>(Equipe Stateless): pour l&#8217;aspect &#8220;plusieurs espaces de travail&#8221; : le localstorage peut prendre plusieurs formes :</p>
<ul>
<li>accessible par l&#8217;ensemble des onglets du navigateur (ou par plusieurs instances du navigateurs), bon ok dans le cas de 2 navigateurs de marques différentes, faudra faire plus classique (on parle de localstorage)</li>
<li>accessible uniquement sur la page en cours et uniquement pendant la session (on parle de sessionstorage)</li>
</ul>
<p><strong>Antoine </strong>(Equipe Stateful): Yep, CDI contient un scope conversation permettant de faire ça. <a href="https://cwiki.apache.org/EXTCDI/">Apache CODI</a> l&#8217;étend en permettant de gérer des sous conversations (mise en pause d&#8217;une conversation, lancement d&#8217;une autre)</p>
<p><strong>Agnès &amp; Cédric : Puis-je définir facilement un workflow obligeant mon client à enchaîner plusieurs écrans pour une conversation donnée (le paiement par exemple)?</strong><br />
<strong></strong></p>
<p><strong>Loïc</strong> <strong></strong>(Equipe Stateless): Pour gérer un workflow de navigation, il y a tout ce qu&#8217;il faut aujourd’hui dans les librairies côté client pour faire ça. On peut enregistrer les différentes étapes et y revenir avec l&#8217;history API HTML5 par exemple.</p>
<p><strong>Antoine </strong>(Equipe Stateful): Concernant le worklfow, actuellement il existe à ma connaissance trois solutions stateful gérant ce besoin :</p>
<ul>
<li><a href="http://www.springsource.org/webflow">Spring Webflow</a> mais bon c&#8217;est spring <img src='http://jduchess.org/duchess-france/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li><a href="http://docs.jboss.org/seam/latest/reference/en-US/html/jbpm.html">Seam 2 pageflow</a> mais pas compatible CDI</li>
<li><a href="http://docs.oracle.com/cd/E12839_01/web.1111/b31974/taskflows.htm">Oracle ADF task flow</a> qui sera standardisé dans JSF 2.2 (sortie été 2012)</li>
</ul>
<p>Si tout ça ne convient pas, on peut déjà faire deux ou trois trucs avec le fichier de navigation JSF, mais ce n&#8217;est pas vraiment une machine à état.</p>
<p><strong>Agnès &amp; Cédric : Comment sont classiquement démarquées <strong> vos transactions (base de données)</strong> au sein de vos applications? Quelle est dans la majeure partie des cas la durée de vie de la transaction ?</strong><br />
<strong></strong></p>
<p><strong>Loïc </strong><strong></strong>(Equipe Stateless): La durée de vie de la transaction est liée à celle du cycle de la requête HTTP : si une erreur survient lors du traitement d&#8217;une requête, tout ce qui s&#8217;est passé entre la demande du client et l&#8217;envoi de la réponse est annulé (rollback). C&#8217;est un moyen de rendre atomique chaque traitement lié à une requête. Il n&#8217;y a pas besoin d&#8217;utiliser un pattern du type open session in view, avec ce procédé on accède à nos objets (et mêmes aux éléments à charger en &#8220;lazy&#8221;) durant tout le traitement de la requête, quelle que soit la couche dans laquelle on se trouve.</p>
<p><strong>Philippe </strong><strong></strong>(Equipe Stateless): ben je crois que Loïc a répondu à la question!</p>
<p><strong>Antoine </strong>(Equipe Stateful): Par défaut la durée de vie d&#8217;une transaction est liée à la requête HTTP. L&#8217;utilisation de l&#8217;extended persistence context permet de retarder la transaction après plusieurs écrans (un wizard).</p>
<p><strong>Agnès &amp; Cédric : Comment une architecture (avec/sans) état, répond elle aux problématiques de scalabilité, et de reprise sur activité en cas de panne ?</strong><br />
<strong></strong></p>
<p><strong>Philippe </strong><strong></strong>(Equipe Stateless): Pas d&#8217;état conversationnel : le serveur ne conserve aucune information entre 2 requêtes différentes d&#8217;un même client, du coup la 1ère requête pourrait être traitée par un serveur A, la 2ème par un serveur B, etc. &#8230; Mon &#8220;identité&#8221; existe côté client uniquement, donc on pourrait même imaginer que le serveur soit coupé entre les 2 requêtes.<br />
-&gt; côté serveur : pas de mémoire utilisée pour les sessions -&gt; pas de problème de synchronisation de sessions entre plusieurs serveurs.</p>
<p><strong>Loïc </strong><strong></strong>(Equipe Stateless): Il est plus simple d&#8217;assurer la scalabilité avec une architecture sans état : rien n&#8217;est partagé entre les serveurs. Si on veut ajouter un serveur derrière notre loadbalancer pour monter en charge on évite ainsi tout le paramétrage lié aux sessions que l&#8217;on trouve avec les architectures stateful : mise en place d&#8217;un cache de session distribué, duplication de sessions ou encore affinité des utilisateurs à un seul serveur&#8230; Pour gérer les pannes c&#8217;est également plus simple, si on coupe un serveur, l’utilisateur pourra continuer sur un autre serveur sans qu&#8217;on ait à se demander comment il va récupérer l&#8217;état qu&#8217;il avait stocké sur le premier serveur.</p>
<p><strong>Antoine </strong>(Equipe Stateful): En stateful, la scalabilité c&#8217;est le cluster, mais c&#8217;est un sujet très vaste et souvent regardé que du point de vue du serveur d&#8217;application et pas de la base de données. La tolérance de panne est également assurée par le cluster bien que l&#8217;architecture de l&#8217;application soit primordiale pour limiter la perte d&#8217;information lors du basculement. Le sujet de la résilience des applications est également vaste.</p>
<p><strong>Agnès &amp; Cédric pour l’équipe “Stateless” : commençons par une question naïve : Quelle est la bonne pratique pour gérer la sécurité de l’application ? Où est stocké l’état si nécessaire ? Purement en base de données, purement côté client ?</strong><br />
<strong></strong></p>
<p><strong>Philippe </strong><strong></strong>(Equipe Stateless): Différentes solutions, <a href="http://oauth.net/">oauth</a> (f&#8230; je ne sais pas le prononcer) <a href="http://openid.net/">openid</a>, &#8230; Play est fourni avec une &#8220;basic authentication&#8221;, il suffit de passer en mode SSL pour &#8220;renforcer&#8221; la mécanique. On peut aussi utiliser une &#8220;digest authentication&#8221; dans ce cas là, il faut se faire sa propre mécanique ou utiliser <a href="http://openid.net/">openid</a>.</p>
<p><strong>Loïc </strong><strong></strong>(Equipe Stateless): L&#8217;état doit être stocké sur le client, cette information doit être de taille minimale (loggé ou pas + rôle de l&#8217;utilisateur). C&#8217;est ce qui se passe lorsque vous êtes loggés sur GMail par exemple. Ceci n&#8217;empêche pas le mécanisme d&#8217;authentification d&#8217;être robuste (ex : oAuth, https&#8230;). Pour rappel le cookie de session est signé et crypté.</p>
<p><strong>Agnès &amp; Cédric pour l’équipe “Stateful” : Est-ce simple de tester une webapp stateful ?</strong><br />
<strong>Antoine </strong>(Equipe Stateful): Aujourd&#8217;hui oui grâce à <a href="http://www.jboss.org/arquillian">JBoss Arquillian</a>. J&#8217;en ferais une démo lors de ma prez</p>
<h3 style="margin-top: 40px;margin-bottom: 40px;text-align: center"><strong><span style="color: #339966"> <span style="color: #000000">Merci Antoine, Loïc et Philippe!</span></span></strong></h3>
<p><strong><em> </em></strong></p>
<p style="text-align: center"><strong><span style="color: #008000">Les inscriptions pour leur session au <a href="http://www.lyonjug.org">Lyon JUG</a> le 22 novembre sont ouvertes! Rendez-vous sur le site du <a href="http://www.lyonjug.org/evenements/architecture-stateful-vs-stateless">Lyon JUG</a>.</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://jduchess.org/duchess-france/blog/architecture-stateful-vs-stateless/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 11/81 queries in 1.170 seconds using disk: basic
Object Caching 1416/1593 objects using disk: basic

Served from: jduchess.org @ 2012-02-09 06:12:21 -->
