<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.insideit.fr/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>insideIT.fr : le blog des architectes IT de SFEIR</title>
  <link>http://www.insideit.fr/</link>
  <atom:link href="http://www.insideit.fr:82/feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Wed, 14 Nov 2012 21:57:37 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Jug Summer Camp 2012</title>
    <link>http://www.insideit.fr/post/2012/08/17/Jug-Summer-Camp</link>
    <guid isPermaLink="false">urn:md5:7cfb4c38405f246f5ca0e7bd45f6f4f9</guid>
    <pubDate>Fri, 17 Aug 2012 17:12:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Conférence</category>
        <category>Dartlang</category><category>Programatoo</category>    
    <description>    &lt;p&gt;C'est le 14 septembre qu'aura lieu la 3ème édition du Jug Summer Camp. Le
Jug Summer Camp, qu'est ce que c'est ? C'est la conférence autour de java
(mais pas seulement) de la rentrée. Si vous voulez profiter des derniers rayons
de soleil à La Rochelle tout en venant parfaire vos connaissances technique,
c'est le lieu idéal.&lt;/p&gt;
&lt;p&gt;Le planning vient d'être terminé et est disponible &lt;a href=&quot;https://sites.google.com/site/jugsummercamp/planning&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour cette année, je vous recommande 2 sessions qui seront présentées par
des Sférien(ne)s :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;La Dartologie, découverte du langage Dart&lt;/em&gt; (&lt;a href=&quot;https://twitter.com/nicofrancois&quot;&gt;Nicolas François&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/girouguillaume&quot;&gt;Guillaume Girou&lt;/a&gt;) : Premier aperçu
du langage Dart de Google, adapté aux applications web modernes. Présentation
des fonctionnalités principales du langage, live coding et démo.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Programatoo pour les grands : how your kid can code ?&lt;/em&gt;
(&lt;a href=&quot;https://twitter.com/Audrey_Neveu&quot;&gt;Audrey Neveu&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/LudovicBorie/&quot;&gt;Ludovic Borie&lt;/a&gt;) : Les geeks sont de
grands enfants, c’est bien connu. Il n’y a qu’à voir leur passion pour les Lego
et autres robots en tout genre pour s’en convaincre. Mais les geeks
d’aujourd’hui sont aussi des papas et des mamans ! Ces mêmes parents ont
du découvrir la programmation par eux-même, à l’école ou à la maison, au
travers d’ateliers, de clubs, de magazines, etc… Mais aujourd’hui, alors que
l’ordinateur est omniprésent dans notre environnement, et apprivoisé par le
plus grand nombre, nous nous apercevons que la programmation n’est toujours
qu’une science destinée uniquement à ceux qui ont envie d’aller plus loin dans
l’informatique... Comment faire comprendre à votre enfant votre passion pour
l’informatique et pour votre métier ? Comment lui montrer que tout ce qui
est pour lui totalement naturel (facebook, youtube, google, word, …) est en
fait le résultat du travail de personnes comme nous ? Comment lui donner
envie de prendre le contrôle de son ordinateur, cette machine qui lui est si
familière et à laquelle on ne prend pas toujours la peine de l’initier
correctement ? Cette session “pour les grands” sera pour nous l’occasion
de vous partager nos retours d’expériences, de faire un tour d’horizon des
outils existants avec démos et enfin de vous présenter les initiatives déjà
existantes. Que vous ayez simplement envie de partager votre passion avec votre
(vos) enfant(s) ou que vous souhaitiez allez plus loin et monter des ateliers,
cette session est pour vous !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il reste encore quelques places pour vous y &lt;a href=&quot;http://www.insideit.fr/post/2012/08/17/#&quot;&gt;inscrire&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si les sujets dart et programatoo vous intéresse, n'hésitez pas à cercler
nos pages Google+ :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://gplus.to/dartlangfr&quot;&gt;http://gplus.to/dartlangfr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gplus.to/programatoo&quot;&gt;http://gplus.to/programatoo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>GWT 2.5 : Premiers pas avec le «Super Dev Mode»</title>
    <link>http://www.insideit.fr/post/GWT-2.5-Super-Dev-Mode</link>
    <guid isPermaLink="false">urn:md5:486fc7a4263a4ea1569a88ebab3f41e3</guid>
    <pubDate>Thu, 12 Jul 2012 17:07:00 +0200</pubDate>
    <dc:creator>Mohamed Abdennebi</dc:creator>
        <category>GWT</category>
        <category>gwt</category><category>superdevmode</category>    
    <description>    &lt;div&gt;
&lt;p&gt;Parmi les nouveautés majeures de la version 2.5 de GWT figure le «Super Dev
Mode». Le &lt;em&gt;Super Dev Mode&lt;/em&gt; est en effet qualifié de majeur, car il a
pour but d'&lt;strong&gt;améliorer la productivité des développeurs&lt;/strong&gt; en
offrant une alternative au «Dev Mode classique» qui, avouons-le, est
contraignant (installation obligatoire de plug-in dans le navigateur), lent et
consommateur en mémoire lorsque le code de l'application atteint une taille
importante.&lt;/p&gt;
&lt;p&gt;Contrairement à ce que l'on pourrait penser, le &lt;em&gt;Super Dev Mode&lt;/em&gt;
n'est pas un &lt;em&gt;Dev Mode&lt;/em&gt; amélioré. En effet :&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;margin-bottom:5px;&quot;&gt;Dans le &lt;em&gt;Dev Mode&lt;/em&gt; l'exécution de l'IHM
est distribuée entre la JVM (qui exécute le code Java) et le navigateur (qui
exécute le code JavaScript présent dans les méthodes JSNI). La communication
entre le code Java et le code JavaScript se fait à l'aide d'un &lt;a href=&quot;http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM&quot;&gt;protocole basé
sur les messages&lt;/a&gt; utilisant une connexion TCP sur le port 9997. Cela génère
beaucoup d'aller-retour entre la JVM et le navigateur.&lt;/li&gt;
&lt;li&gt;Dans le &lt;em&gt;Super Dev Mode&lt;/em&gt; &lt;strong&gt;l'IHM ne tourne pas dans une
JVM&lt;/strong&gt;, elle est compilée en mode «Super Draft» sans aucune optimisation.
C'est du JavaScript pure. Cela veut dire qu'il n'y plus d'échange verbeux entre
la JVM et le navigateur. En revanche, il n'est plus possible de déboguer dans
votre IDE préféré, vous le ferez cette fois-ci dans votre navigateur préféré et
toujours en Java !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Pour plus de détails sur les différences, je vous invite à consulter
l'article de Google&lt;/em&gt; &lt;a style=&quot;font-style: italic;&quot; href=&quot;https://developers.google.com/web-toolkit/articles/superdevmode&quot; target=&quot;_blank&quot;&gt;Introducing Super Dev Mode&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;En résumé, le &lt;em&gt;Super Dev Mode&lt;/em&gt; vous permet de compiler et de tester
rapidement votre code. Il vous permet, comme dit plus haut, de déboguer et
d'inspecter votre code Java directement dans le navigateur si vous utilisez
Chrome (Chrome utilise une technique magique appelée &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/&quot; target=&quot;_blank&quot;&gt;Source Maps&lt;/a&gt;. Chez Mozilla on est à pied d’œuvre  pour
l'implémenter dans Firefox).&lt;/p&gt;
&lt;p&gt;Nous allons donc vous présenter le Super Dev Mode à l'aide d'un exemple
simple. Le tutoriel sera divisé en deux parties : la première concerne le
lancement et l'utilisation du Super Dev Mode. La seconde concerne quant à elle
le débogage du code Java directement dans le navigateur.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Avertissement:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ce tutoriel a été réalisé avec la version RC1, il est possible de constater
des différences avec la version finale. Il sera éventuellement mis à jour à la
sortie de la version finale.&lt;/li&gt;
&lt;li&gt;Nous n'expliquerons pas le fonctionnement interne du Super Dev Mode. Un
&lt;a href=&quot;http://tbroyer.posterous.com/how-does-gwts-super-dev-mode-work&quot;&gt;article&lt;/a&gt;
complet sur le sujet a déjà été publié par Thomas Broyer (contributeur et
membre du comité de pilotage du projet open source GWT).&lt;/li&gt;
&lt;li&gt;Étant un utilisateur d'Eclipse, j'ai réalisé ce tutoriel avec cet outil.
Les principes expliqués dans cet article devraient s'appliquer à n'importe
quelle autre IDE.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Partie 1 : Lancement du Super Dev Mode&lt;/h3&gt;
&lt;p&gt;Avant de commencer, assurez-vous de disposer d'un environnement de
développement composé de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java 6&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/downloads/&quot; target=&quot;_blank&quot;&gt;Eclipse&lt;/a&gt;
avec &lt;a href=&quot;https://developers.google.com/eclipse/docs/getting_started&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Google Plugin for Eclipse&lt;/em&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.google.com/chrome&quot;&gt;Google Chrome&lt;/a&gt; si vous voulez
expérimenter le débogage Java dans le navigateur (si vous n'avez pas la
possibilité de l'installer, la version portable est disponible &lt;a href=&quot;http://portableapps.com/apps/internet/google_chrome_portable&quot;&gt;ici&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour illustrer le &lt;em&gt;Super Dev Mode&lt;/em&gt;, nous allons nous servir de
l'application exemple fournie par GPE (Google Plugin for Eclipse). Préparons
d'abord l'environnement de développement :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 Installez le SDK 2.5 :&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Récupérez le version 2.5-rc1 du SDK à cette adresse : &lt;a href=&quot;http://google-web-toolkit.googlecode.com/files/gwt-2.5.0.rc1.zip&quot;&gt;http://google-web-toolkit.googlecode.com/files/gwt-2.5.0.rc1.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lancez Eclipse, ouvrez les préférences puis allez dans rubrique «
&lt;strong&gt;Google &amp;gt; Webtoolkit&lt;/strong&gt; » pour ajoutez le nouveau SDK.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;2 Créez une nouvelle application GWT&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Créez une nouvelle application GWT, nommez-la &lt;em&gt;Hello&lt;/em&gt; et choisissez
comme nom de package &lt;code&gt;hello&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Assurez-vous d'avoir sélectionné le SDK 2.5.0&lt;/li&gt;
&lt;li&gt;Décochez &amp;quot;Use Google App Engine&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;em style=&quot;color:rgb(224,102,102)&quot;&gt;(cliquez sur l'image pour l'agrandir)&lt;/em&gt;
&lt;div style=&quot;display:block;text-align:left&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/02.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/02.png?height=320&amp;amp;width=234&quot; border=&quot;0&quot; height=&quot;320&quot; width=&quot;234&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3 Lancez l'application avec le Dev Mode «classique»  ou avec
n'importe quel Servlet Container&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exécutez l'application avec le Dev Mode « &lt;strong&gt;Run As -&amp;gt; Web
Application&lt;/strong&gt; ».  Nous utiliserons plus tard l'URL qui est affichée
: &lt;code&gt;http://127.0.0.1:8888/Hello.html?gwt.codesvr=127.0.0.1:9997&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le Dev Mode n'est pas obligatoire nous l'employons juste pour exécuter la
partie serveur de l'application. Cela veut dire que vous pouvez utiliser votre
serveur habituel, par exemple Tomcat ou Jetty.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4 Préparez le module GWT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comme vous allez le voir plus loin, le &lt;em&gt;Super Dev Mode&lt;/em&gt; est un petit
programme serveur qui écoute les demandes de compilation et envoie le résultat
sur le port 9876. Ainsi, dans ce mode les ressources statiques sont servies par
un serveur autre que le serveur hébergeant les services RPC et la &lt;em&gt;Host
Page&lt;/em&gt;. Ce scénario est prévu par GWT, mais demande l'utilisation d'un
&lt;a href=&quot;http://sami-jaber.developpez.com/tutoriel/java/web/gwt2/compilateur/#LVI&quot; target=&quot;_blank&quot;&gt;linker&lt;/a&gt; spécial nommé &lt;code&gt;xsiframe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ceci n'est pas suffisant, il faut que le bootstrap
(&lt;code&gt;hello.nocache.js&lt;/code&gt;) appel l'autre bootstrap se trouvant sur le
serveur du Super Dev Mode c'est-à-dire
&lt;code&gt;http://localhost:9876/hello/hello.nocache.js&lt;/code&gt;. Ceci est possible en
activant la propriété &lt;code&gt;devModeRedirectEnabled&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En résumé, ajoutez au fichier de configuration du module
(&lt;code&gt;Hello.gwt.xml&lt;/code&gt;) les deux lignes suivantes :&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre style=&quot;color: #007000;&quot;&gt;
&amp;lt;add-linker name=&amp;quot;xsiframe&amp;quot;/&amp;gt;
&amp;lt;set-configuration-property name=&amp;quot;devModeRedirectEnabled&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;5 Lancez le Super Dev Mode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour l'instant GPE ne supporte pas le &lt;em&gt;Super Dev Mode&lt;/em&gt;, nous allons
donc le lancer manuellement en créant un Launcher Eclipse :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lancez «Run Configurations», sélectionnez le type «Java Application».&lt;/li&gt;
&lt;li&gt;Donnez lui le nom «Hello SuperDevMode» et renseignez les paramètres
suivants avec les valeurs correspondantes :
&lt;ul&gt;
&lt;li&gt;Projet : &lt;code&gt;Hello&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Main class : &lt;code&gt;com.google.gwt.dev.codeserver.CodeServer&lt;/code&gt; (c'est
la classe du serveur qui va écouter sur le port 9786)
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/05.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/05.png?height=244&amp;amp;width=320&quot; border=&quot;0&quot; height=&quot;244&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Nous devons spécifier à la classe &lt;code&gt;CodeServer&lt;/code&gt; le répertoire
source ainsi que le nom du module. Dans l'onglet «Arguments» ajoutez au champ
«Program Arguments» ce qui suit :  &lt;code&gt;-src src/ -workDir workdir/
hello.Hello&lt;/code&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/06.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/06.png?height=120&amp;amp;width=400&quot; style=&quot;display:block;margin-right:auto;text-align:left&quot; border=&quot;0&quot; height=&quot;120&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Dans l'onglet &lt;em&gt;Classpath&lt;/em&gt; ajouter le jar externe
&lt;code&gt;gwt-codeserver.jar&lt;/code&gt; (il se trouve à la racine du répertoire
d'installation du SDK).
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/03.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/03.png?height=151&amp;amp;width=320&quot; style=&quot;display:block;margin-right:auto;text-align:left&quot; border=&quot;0&quot; height=&quot;151&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Vous pouvez lancer maintenant le Super Dev Mode
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/Launch20CodeServer.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/Launch20CodeServer.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Voici une capture d'écran de la sortie du CodeServer. Remarquez le message
encadré :&lt;/p&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/07.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/07.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Allez à l'adresse indiquée et suivez la procédure décrite dans la page
affichée.&lt;/p&gt;
&lt;em style=&quot;color:rgb(224,102,102)&quot;&gt;(cliquez sur l'image pour
l'agrandir)&lt;/em&gt;&lt;br /&gt;
&lt;div style=&quot;display:block;text-align:left&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/08.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/08.png?height=206&amp;amp;width=320&quot; border=&quot;0&quot; height=&quot;206&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;1 . Ajouter les deux bookmarklets à votre barre de favoris (Dans la plupart
des navigateurs la barre n'est pas affichée, affichez là et glissez-déposez les
deux liens dans la barre)&lt;/p&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/10.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/10.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
2 -  Attention, le message &amp;quot;&lt;em&gt;Visit a web page that use one of these
modules : hello&lt;/em&gt;&amp;quot; est un peu trompeur, car il nous incite à cliquer sur le
nom du module (hello). Ce n'est pas ce lien qu'il faut ouvrir mais plutôt 
l'URL fournie par le DevMode classique (sans le suffixe) ou par votre servlet
container : &lt;code&gt;http://127.0.0.1:8888/Hello.html&lt;br /&gt;
&lt;br /&gt;&lt;/code&gt; Le lien sur le nom du module vous permet de voir ce qui a été
généré ainsi que les messages du compilateur.&lt;br /&gt;
&lt;br /&gt;
&lt;em style=&quot;color:rgb(224,102,102)&quot;&gt;(cliquez sur l'image pour
l'agrandir)&lt;/em&gt;&lt;br /&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/11.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/11.png?height=207&amp;amp;width=320&quot; border=&quot;0&quot; height=&quot;207&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Cliquez sur maintenant sur la bookmarklet &lt;strong&gt;Dev Mode On&lt;/strong&gt;. Une
boite de dialogue s'affiche vous invitant à compiler le module «hello». Vous
pouvez à n'importe quel moment désactiver le Super Dev Mode en cliquant sur la
bookmarklet &lt;strong&gt;Dev Mode Off&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;em style=&quot;color:rgb(224,102,102)&quot;&gt;(cliquez sur l'image pour
l'agrandir)&lt;/em&gt;&lt;br /&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/14.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/14.png?height=207&amp;amp;width=320&quot; border=&quot;0&quot; height=&quot;207&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Partie 2 : Déboguez le code source Java directement dans Chrome :&lt;/h3&gt;
&lt;p&gt;Pour cette partie vous êtes obligés d'utiliser Chrome, car il est pour
l'instant le seul à supporter le &lt;em&gt;Source Maps&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qu'est-ce le &lt;em&gt;Source Maps&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En production, le code JavaScript est souvent obfusqué et compressé. Ce code
est quasiment impossible à déboguer. Le Source Maps est une technique qui
permet de rendre cela possible en déboguant directement le code d'origine
(grâce à des mappings de source), ce code d'origine peut être du JavaScript, du
CoffeScript, du Java (notre cas) ou tout autre langage. Le Souce Maps ne
concerne pas uniquement le débogage, il conccerne aussi les messages d'erreurs
CSS et JavaScript, les logs, la StackTrace, etc.&lt;/p&gt;
&lt;p&gt;1 - Ouvrez Chrome et activez le source maps : Affichez les «Outils de
développement» en utilisant le combinaison de touches
&lt;strong&gt;Ctrl+Shift+I&lt;/strong&gt;. Affichez ensuite les paramètres en cliquant sur
l’icône située en bas à droite de la fenêtre :&lt;/p&gt;
&lt;p&gt;&lt;em style=&quot;color:rgb(224,102,102)&quot;&gt;(cliquez sur l'image pour
l'agrandir)&lt;/em&gt;&lt;/p&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/16.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/16.png?height=253&amp;amp;width=320&quot; border=&quot;0&quot; height=&quot;253&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Allez maintenant dans l'onglet &lt;strong&gt;Scripts&lt;/strong&gt;, dans l'explorateur de
scripts (à gauche) vous devriez voir tous les sources utilisées par votre IHM
(y compris ceux générées). Vous pouvez maintenant poser des points d'arrêt,
inspecter la valeur de variables, voir la stack d'exécution, etc.&lt;br /&gt;
&lt;p&gt;Happy Debugging !&lt;/p&gt;
&lt;div style=&quot;display:block;text-align:left;margin:5px&quot;&gt;&lt;a href=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/19.png?attredirects=0&quot;&gt;
&lt;img src=&quot;https://sites.google.com/a/abdennebi.com/www/publications/gwt-2-5-premiers-pas-avec-le-super-dev-mode/19.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;Liens et références utilisées dans cet article&lt;/h2&gt;
&lt;p&gt;GWT 2.5 RC1 : &lt;a href=&quot;https://developers.google.com/web-toolkit/doc/latest/ReleaseNotes&quot; target=&quot;_blank&quot;&gt;Release notes&lt;/a&gt;, &lt;a href=&quot;https://developers.google.com/web-toolkit/release-notes#Release_Notes_Current&quot; target=&quot;_blank&quot;&gt;release notes détaillée&lt;/a&gt; et &lt;a href=&quot;http://code.google.com/p/google-web-toolkit/issues/list?can=1&amp;amp;q=Milestone%3A2_5+status%3AFixed&quot; target=&quot;_blank&quot;&gt;liste de bugs fixes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tbroyer.posterous.com/how-does-gwts-super-dev-mode-work&quot; target=&quot;_blank&quot;&gt;How does GWT's Super Dev Mode work ?&lt;/a&gt; par &lt;a href=&quot;https://twitter.com/tbroyer/&quot; target=&quot;_blank&quot;&gt;Thomas Broyer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/web-toolkit/articles/superdevmode&quot; target=&quot;_blank&quot;&gt;Introducing Super Dev Mode&lt;/a&gt; par Google&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.html5rocks.com/en/tutorials/developertools/sourcemaps&quot; target=&quot;_blank&quot;&gt;Introduction to JavaScript Source Maps&lt;/a&gt; par &lt;strong style=&quot;font-weight:normal&quot;&gt;&lt;a href=&quot;http://www.html5rocks.com/profiles/#ryanseddon&quot;&gt;Ryan Seddon.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sami-jaber.developpez.com/tutoriel/java/web/gwt2/compilateur/&quot; target=&quot;_blank&quot;&gt;Programmation GWT 2 : Sous le capot de GWT&lt;/a&gt; par &lt;a href=&quot;http://www.dng-consulting.com/blogs/&quot; target=&quot;_blank&quot;&gt;Sami Jaber&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Conception du DevMode : &lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM&quot;&gt;Out of Process
Hosted Mode&lt;/a&gt; par Google&lt;/p&gt;
&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Duchess France fête ses deux ans le 30 mai !</title>
    <link>http://www.insideit.fr/post/2012/05/21/Duchess-France-f%C3%AAte-ses-deux-ans-le-30-mai-%21</link>
    <guid isPermaLink="false">urn:md5:4fa57677465ccf3f2172a1d3606b9d02</guid>
    <pubDate>Mon, 21 May 2012 12:18:00 +0200</pubDate>
    <dc:creator>Audrey</dc:creator>
        <category>Conférence</category>
        <category>anniversaire</category><category>duchess</category><category>java</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/AnniversaireDuchesses/duchessfr_logo_carre_anniversaire_2.png&quot; alt=&quot;duchessfr_logo_carre_anniversaire_2.png&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; title=&quot;duchessfr_logo_carre_anniversaire_2.png, mai 2012&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.duchess-france.org/&quot;&gt;Duchess France&lt;/a&gt; fêtera son
deuxième anniversaire le 30 mai prochain à l’&lt;a href=&quot;http://www.ece.fr/&quot;&gt;ECE&lt;/a&gt;, à partir de 19h30 : l’occasion pour vous si
vous ne connaissez pas encore le groupe de venir rencontrer l’équipe et surtout
de vous amuser autour d’une nouvelle édition du Trivial Java !&lt;/p&gt;
&lt;h5&gt;Le Trivial Java, qu’est ce c’est que ça ??&lt;/h5&gt;
&lt;p&gt;Le Trivial Java c’est un jeu machiavélique inventé et réalisé par les
Duchess durant lequel des équipes de courageux gladiateurs-développeurs
s’affrontent entre eux autour de questions sur Java, son écosystème, les
Duchess et tous les sujets qui peuvent préoccuper le geek actuel. La bataille
est rude mais la victoire vous assure gloire et respect à vie.&lt;/p&gt;
&lt;h5&gt;Une soirée pour filles ?&lt;/h5&gt;
&lt;p&gt;C’est une soirée Duchess donc bien sûr … que non ! Comme pour toutes
les soirées Duchess, il n’y a qu’un seul critère d’entrée : être
développeur et fier de l’être ! Néanmoins si vous avez dans votre
entourage des collègues féminines qui ne connaissent pas encore Duchess, c’est
une excellente occasion de leur montrer que nous ne sommes pas un groupe
féministe qui organisons d’obscures soirées militantes pour la domination du
monde par les femmes, mais bel et bien un groupe de geekettes uniquement
préoccupées par la qualité de notre code et la domination du monde par les
développeurs en général, pas que les développeuses :D&lt;/p&gt;
&lt;h5&gt;Que dois je faire pour venir ?&lt;/h5&gt;
&lt;p&gt;Une seule chose, vous inscrire &lt;a href=&quot;http://duchessfr-2ans.eventbrite.com/&quot;&gt;ici&lt;/a&gt; et apporter votre bonne humeur
le 30. Facile non ?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;java #duchess #france #soirée #anniversaire&lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Programatoo, de retour de Devoxx France</title>
    <link>http://www.insideit.fr/post/2012/05/03/Programatoo%2C-de-retour-de-Devoxx-France</link>
    <guid isPermaLink="false">urn:md5:438a9392079e87bb933488c138bd9896</guid>
    <pubDate>Thu, 03 May 2012 13:21:00 +0200</pubDate>
    <dc:creator>Audrey</dc:creator>
            
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/programatoo/.programatooLogo_s.jpg&quot; alt=&quot;ProgramatooLogo&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; title=&quot;ProgramatooLogo, avr. 2012&quot; /&gt;
Après une première session début mars dans ses locaux Sfeiriens, l’équipe
Programatoo s’était lancé un véritable défi : proposer une session pour
les enfants à Devoxx France. L’idée avait séduit... Il restait alors à être à
la hauteur des espérances !&lt;/p&gt;
&lt;p&gt;L’idée était simple : regrouper des parents et des enfants pour
découvrir la programmation ensemble le temps d’un atelier type “Lab” de trois
heures. L’objectif : découvrir, jouer, et pour les organisateurs,
transmettre la passion de la programmation et l’envie d’apprendre.&lt;/p&gt;
&lt;p&gt;En arrivant à Devoxx le mercredi matin, au milieu des parents déjà en plein
“networking” au petit déjeûner, on pouvait donc croiser des petits êtres
impressionnés et prêts à apprendre comme papa ou maman. La petite salle se
remplit doucement, on s’installe, et plusieurs parents dont les enfants n’ont
pas pu venir ont déjà quelques regrets en voyant les yeux émerveillés des
petits geeks. Il y avait de quoi subsister dans la salle : des gâteaux,
des bonbons, des jus de fruits... Ah oui, parce que d’accord on travaille, mais
on est là pour en profiter !&lt;/p&gt;
&lt;p&gt;On commence par une petite présentation de tout le monde, puis on fait le
tour des outils que l’on va utiliser (Scratch et Smallbasic pour cette fois).
En bons successeurs des participants à Devoxx, quelques uns ont déjà manipulé
un peu ; ce sera l’occasion d’aller plus loin cette fois, il y en a pour
tous les goûts et tous les niveaux. La matinée sera entrecoupée de démos, afin
que chacun puisse montrer aux autres ce qu’il a fait et appris.&lt;/p&gt;
&lt;p&gt;Les adultes qui participent aux autres sessions passent tout au long de la
matinée pour voir les créations des enfants, récupèrent la liste des outils
utilisés et planifient d’essayer en rentrant à la maison, avec leur fils ou
fille.&lt;/p&gt;
&lt;p&gt;Programatoo se termine avec une rétrospective, ou chacun, parent et enfant,
peut dire ce qu’il en a pensé. Des mots retenus : Super, trop bien,
parfois un peu difficile, mais vivement une prochaine fois !&lt;/p&gt;
&lt;p&gt;En tout cas les objectifs sont atteints : des enfants ont poussé la
porte de Devoxx et on pu voir ce que c’était, des parents vont commencer ou
continuer à découvrir avec leurs enfants, l’envie d’apprendre à programmer va
se diffuser un peu plus ; alors l’équipe Programatoo part l’esprit léger,
avec plein de nouveaux défis à relever en tête. Affaire à suivre...&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sfeir Programatoo à Devoxx France !</title>
    <link>http://www.insideit.fr/post/2012/04/11/Sfeir-Programatoo-%C3%A0-Devoxx-France-%21</link>
    <guid isPermaLink="false">urn:md5:4b9861c3f96b609601c892e4adaa3c7e</guid>
    <pubDate>Wed, 11 Apr 2012 12:04:00 +0200</pubDate>
    <dc:creator>Audrey</dc:creator>
            
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/programatoo/.programatooLogo_s.jpg&quot; alt=&quot;ProgramatooLogo&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; title=&quot;ProgramatooLogo, avr. 2012&quot; /&gt;&lt;a href=&quot;http://www.devoxx.com/display/FR12/Accueil&quot;&gt;Devoxx France&lt;/a&gt; approche et avec
lui la première session Programatoo ouverte au public ! Pour rappel la
session aura lieu le mercredi 18 avril de 9h30 à 12h30.&lt;/p&gt;
&lt;h3&gt;Programatoo qu’est ce que c’est ?&lt;/h3&gt;
&lt;p&gt;C’est un atelier pour les papas et mamans geeks qui souhaitent faire
découvrir leur métier à leurs enfants, tout en s’amusant ! On code, on
partage, on goûte et on découvre qu’un ordinateur ne se limite pas à youtube et
angry birds, on peut le contrôler, on peut lui faire faire des choses, et on
peut même être créatif !&lt;/p&gt;
&lt;h3&gt;Et concrétement, comment ça se passe ?&lt;/h3&gt;
&lt;p&gt;D’abord nous sommes là pour nous amuser, donc chaque enfant est libre de
travailler sur ce qui lui plait et de changer en cours de route si une autre
idée lui passe par la tête. Seul, avec le parent qui l’accompagne, à deux,
trois, quatre … peu importe ! L’essentiel est de se faire plaisir,
d’apprendre des choses mais en passant un bon moment.&lt;/p&gt;
&lt;p&gt;Ensuite nous sommes là pour partager, c’est pourquoi par deux fois, nous
ferons une petite pause, pour partager tous ensemble nos créations. On pose les
souris, on lache les claviers, on branche le rétro projecteur et chaque enfant
peut faire découvrir aux autres son projet, ce qu’il avait envie de faire, de
raconter … C’est un moment essentiel car très valorisateur pour l’enfant et
très motivant pour l’ensemble des participants.&lt;/p&gt;
&lt;p&gt;Mais comme finalement nous sommes surtout là pour nous amuser, il y a aussi
un goûter :) Bonbons, gâteaux et jus de fruits seront là toute la matinée pour
donner à nos développeurs en herbe l’énergie nécessaire pour coder !!!&lt;/p&gt;
&lt;h3&gt;De quoi va t'on se servir ?&lt;/h3&gt;
&lt;p&gt;L’apprentissage de la programmation aux enfants est un sujet qui passionne
beaucoup de gens, ce qui nous permet d’avoir des outils très variés à notre
disposition.&lt;/p&gt;
&lt;p&gt;Le plus populaire d’entre eux est certainement &lt;a href=&quot;http://scratch.mit.edu/&quot;&gt;Scratch&lt;/a&gt; qui permet de faire rapidement de petites
animations en intervenant sur les évènements (clic, interactions entre objets,
etc …) mais aussi d’intégrer des élèments personnalisés par les enfants, ce qui
leur permet de s’approprier totalement l’outil : ils peuvent inclure des
images de personnage qu’ils aiment, des dessins qu’ils ont fait, des sons
qu’ils enregistrent ou téléchargent etc …&lt;/p&gt;
&lt;p&gt;D’autres outils tels que &lt;a href=&quot;http://smallbasic.com/&quot;&gt;Microsoft Small
Basic&lt;/a&gt; (un Turbo Basic simplifié), &lt;a href=&quot;http://robozzle.com/&quot;&gt;Robozzle&lt;/a&gt; (un jeu conçu pour s’initier aux
enchaînements d’instructions), &lt;a href=&quot;http://tortuescript.appspot.com/&quot;&gt;TortueScript&lt;/a&gt; (un Logo en HTML5 développé
par &lt;a href=&quot;https://twitter.com/#!/salvadordiaz&quot;&gt;Salvador Diaz&lt;/a&gt;) seront à
disposition, afin de proposer à chacun de choisir dans quelle direction aller,
ludique ou plus proche de l’écriture de code, selon ses envies.&lt;/p&gt;
&lt;h3&gt;Quelles sont les conditions pour participer ?&lt;/h3&gt;
&lt;p&gt;Pour participer, votre enfant doit être agé de 6 à 14 ans. Votre conjoint(e)
et vous êtes les heureux parents de triplés ? Pas de soucis, vous pouvez
tous les amener, dans la limite des places disponibles bien sûr :)&lt;/p&gt;
&lt;p&gt;Les seules choses dont vous aurez besoin sont un ordinateur et un pass
Devoxx : aucune connaissance des outils proposés n’est nécessaire car nous
serons là en appui pendant toute la session pour vous aider dans la
réalisation.&lt;/p&gt;
&lt;p&gt;Si vous souhaitez participer, il ne vous reste qu'à nous envoyer un mail à
&lt;strong&gt;programatoo@sfeir.com&lt;/strong&gt; avec le nom et l'âge de votre enfant.
Vous pouvez également nous contacter à cette même adresse si vous souhaitez
avoir plus d'information.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Noël dans les nuages !</title>
    <link>http://www.insideit.fr/post/2012/01/30/No%C3%ABl-dans-les-nuages-%21</link>
    <guid isPermaLink="false">urn:md5:5bd6d22d2f29425a063eefd66b8c2e40</guid>
    <pubDate>Mon, 30 Jan 2012 15:57:00 +0100</pubDate>
    <dc:creator>Patrice</dc:creator>
        <category>Cloud</category>
        <category>app engine</category><category>eglise catholique</category><category>gae</category><category>gwt</category>    
    <description>    &lt;p&gt;&lt;em&gt;Ou comment Google App Engine, permet de mettre en place un service
supportant une très grosse charge dans un temps très court.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Le projet&lt;/h2&gt;
&lt;p&gt;L'Église Catholique propose depuis plus de 10 ans un site internet pour
chercher les horaires de messes dans toute la France, qui souffrait
historiquement d'un problème majeur : le trafic quotidien est raisonnable
(environ 1 000 visites par jours, et des pointes à 5 000 visites le WE) mais le
site doit faire face à d’importants pics de trafic à Noël et durant la semaine
de Pâques.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/cef/.Tpl_EgliseInfo_v1_m.jpg&quot; alt=&quot;Interface d'EgliseInfo&quot; title=&quot;Interface d'EgliseInfo, janv. 2012&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Or les années précédentes, l'ancien site (&lt;a href=&quot;http://messesinfo.catholique.fr&quot; hreflang=&quot;fr&quot;&gt;messesinfo.catholique.fr&lt;/a&gt;),
développé en PHP/MySQL, ne tenait pas la charge lors de ces pics, s'écroulant
sous les demandes des visiteurs. La technologie utilisée était tout à fait
suffisante pour les besoins courants du site, cependant pour répondre à la
forte charge sans changer de projet, il aurait fallu, soit disposer d’un
serveur plus puissant, soit mettre en place du load balancing entre plusieurs
serveurs. Dans les deux cas, ce n'aurait pas été très flexible, obligeant à
s’équiper d’un serveur sur-dimensionné, pour seulement 6 jours dans
l'année !&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Nouveau projet&lt;/h2&gt;
&lt;p&gt;Nous avons donc fait le choix de migrer vers une technologie permettant de
gérer cette surcharge ponctuelle, en ne payant que ce qui est réellement
consommé. La refonte du site, permet également d’outrepasser les limitations
imposées par l'ancien système (messes en semaine, autres types de célébrations)
et d'ajouter de nouvelles fonctionnalités (événements, apis, widget, …).&lt;/p&gt;
&lt;p&gt;Notre choix c'est porté sur Google App Engine, par la simplicité de
développement que celui-ci apporte, le dimensionnement automatique des
serveurs, les quotas gratuits et le paiement à la consommation.&lt;/p&gt;
&lt;p&gt;Le projet a démarré en octobre 2010, avec la création d'une simple interface
de recherche développé en GWT sur Google App Engine, mais laquelle se
connectait ensuite à l'ancien site pour récupérer les résultats de la
recherche. Cette première version à été mise en ligne pour Noël 2010, mais les
deux sites n'ont pas tenu le coup car la base de donnée n'a pas accepté le
nombre très élevé de requêtes simultanées ! Nous ne pouvions pas mettre
les données de la base de donnée MySQL directement sur Google App Engine, car
déjà l'interface d'administration n'est pas encore refaite, et la base de
donnée chez App Engine, ne fonctionne pas exactement de la même manière.&lt;/p&gt;
&lt;p&gt;Pour la période de Pâques 2011, Google venait de sortir en test la base de
donnée Google Cloud SQL qui permet d'avoir des bases de données MySQL
directement sur Google App Engine. Nous avons ainsi développé un service qui
recopie la base de l'ancien site, sur le nouveau. Le système a fonctionné, mais
du fait de la nouveauté du service et du manque d'optimisation de notre part,
les bases de données SQL ont régulièrement planté.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Noël 2011&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideit.fr/public/cef/Noel2012-Visiteurs.png&quot;&gt;&lt;img src=&quot;http://www.insideit.fr/public/cef/.Noel2012-Visiteurs_m.jpg&quot; alt=&quot;Visiteurs le jour de Noël 2011&quot; title=&quot;Visiteurs le jour de Noël 2011, janv. 2012&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;EgliseInfo a relativement bien fonctionné pour Noël 2011, faisant face à une
pointe de 1104 visiteurs simultané, et plus de 800 visiteurs en permanence
durant toute l'après-midi, soit 100 000 visites en 3 jours.&lt;/p&gt;
&lt;p&gt;Nous avons toutefois rencontré trois problèmes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vendredi soir vers 21h, nous avons dépassé le quota que nous avions fixé
(25$), donc tous le site s’est retrouvé bloqué, le temps de changer et de
mettre à 100$&lt;/li&gt;
&lt;li&gt;Samedi matin, nous avons été limité par Google Cloud SQL a 100 requêtes
simultanées. J'ai corrigé en faisait un balancing sur 2 bases SQL, et j'ai
écrit un mail à Google : réponse dans la fin de l'après midi, ils ne
peuvent pas modifier cette limite, et proposaient de passer à un serveur de
plus grande capacité sans être vraiment sûr que cela résoudrait le
problème : base de donnée plus grande, mais pas plus de connexion
simultanées (cela changera plus tard), avec par ailleurs une interruption le
temps de redémarrer le serveur. La double base de données a permis de réduire
le nombre d'erreurs et de fournir une meilleure réactivité. Les responsables de
Google SQL sont en train de tester avec notre jeu de données sur les requêtes
les plus lentes.&lt;/li&gt;
&lt;li&gt;Samedi 18h : EgliseInfo marchait toujours, mais les pubs ne
s'affichait plus (un script PHP sur un serveur de la CEF) car le trop grand
nombre de personnes sur tous les sites (le site de pub, messesinfo, les sites
de paroisses et diocèses) à surchargé le firewall du datacenter où sont
hébergés tout ces sites !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/cef/.Analyse-EgliseInfo_m.jpg&quot; alt=&quot;Analyse EgliseInfo&quot; title=&quot;Analyse EgliseInfo, janv. 2012&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideit.fr/public/cef/graphique_reccord_1104.png&quot;&gt;&lt;img src=&quot;http://www.insideit.fr/public/cef/.graphique_reccord_1104_s.jpg&quot; alt=&quot;Record de visite : 1104&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; title=&quot;Record de visite : 1104, janv. 2012&quot; /&gt;&lt;/a&gt;MessesInfo (Ancienne version
du site fait en PHP, qui est encore référencé) redirigeait presque tous le
trafic vers EgliseInfo, redirection javascript depuis la page de résultat
MessesInfo (pouvait venir d'une recherche Google) vers la recherche
correspondante sur EgliseInfo. Donc pas de plantage du côté de MessesInfo, et
une forte charge sur EgliseInfo qui a bien fonctionné avec des temps de réponse
acceptables (forcément plus lent qu'habituellement).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideit.fr/public/cef/instances.png&quot;&gt;&lt;img src=&quot;http://www.insideit.fr/public/cef/.instances_s.jpg&quot; alt=&quot;Evolution des instances App Engine&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; title=&quot;Evolution des instances App Engine, janv. 2012&quot; /&gt;&lt;/a&gt;Google nous a mis en
place automatiquement jusqu'à 400 serveurs disponibles (instances de
l'application, qui sont virtualisées sur plusieurs serveurs réels).&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;En conclusion, Google App Engine a vraiment permis de gérer la très forte
charge du site pour un coût tout à fait raisonnable. Pour les prochaines fois,
il nous faudra mettre en place une répartition sur plusieurs bases de données,
et dégrader les fonctionnalités pour accélérer les recherches.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sfeir à Devoxx</title>
    <link>http://www.insideit.fr/post/2011/11/30/Sfeir-%C3%A0-Devoxx</link>
    <guid isPermaLink="false">urn:md5:c706aaeb9319e2ea1d09a0bc97caf41b</guid>
    <pubDate>Wed, 30 Nov 2011 21:58:00 +0100</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Conférence</category>
        <category>Devoxx</category><category>sfeir</category>    
    <description>    10 ans … Voilà 10 ans que vers cette période de l’année, plus de 3000
passionnés se réunissent à Anvers pour la plus grosse conférence autour de la
plateforme java. Elle se découpe en 2 parties : université et conférence.&lt;br /&gt;
Pour moi, c’était ma 3ème participation. Par contre, cette fois ci, j'y suis
allé pour la semaine complète avec mes collègues Vincent Bostoen et Benito
d’Almeida. Les autres Sfeiriens, eux, nous ont rejoint le mercredi. Au total,
15 Sfeirens étaient présent. Même si nous sommes partis 2 jours avant les
autres, nous avions tout de même le même point de rendez-vous avant le départ.
Malgré une petite mésaventure dans les transports en commun Anversois, nous
sommes arrivés à bon port au cinéma multiplexe où a lieu la conférence.&lt;br /&gt;
Cette année, gros changement dans l’organisation : au lieu d’un simple badge
avec de petits tickets à échanger contre les repas, nous avons reçu un bracelet
marqué de notre nom et d’un code barre. Heureusement, ce bracelet était
waterproof car nous devions le garder au bras pendant la semaine entière.&lt;br /&gt;
C’est donc le mercredi qu’à la station de tramway nous avons rencontré nos
autres collègues pour la 2ème partie de l’aventure : la conférence. Celle ci a
commencé par l’habituelle keynote de Stephan Jansen, l’organisateur. Pour finir
son discours, il nous a montré une vidéo. On y reconnaît quelques têtes connues
: les organisateurs du Paris JUG... puis s’affiche “Devoxx France” … Et oui, au
mois d’avril, nous aurons une conférence affiliée à Devoxx, ici à Paris, avec
75% des sessions en français. Sfeir est d’ailleurs sponsor de
l’évènement.&lt;br /&gt;
Le retour s’est fait le vendredi après midi, après une semaine plutôt
fatigante.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mes impressions globales :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;On sent vraiment que Google est partenaire : nous avons eu beaucoup de
sessions autour d’Android et Html5.&lt;/li&gt;
&lt;li&gt;Même chose en avec le duo Spring Source/Cloud Foundry&lt;/li&gt;
&lt;li&gt;Les langages jvm ont du succès : Scala a eu droit à beaucoup de sessions et
remplaçait même java pour des exemples de codes. Ceux un peu moins populaires :
Fantom et Clojure ; et les petits nouveaux : Kotlin et Ceylon venaient se
présenter.&lt;/li&gt;
&lt;li&gt;Moins de sessions cloud que les années précédentes.&lt;/li&gt;
&lt;li&gt;Plus d'animations aux stands : course de petites voitures sur circuit
électrique, roulette de casino virtuelle, ...&lt;/li&gt;
&lt;li&gt;Pas de grosses annonces (mis à part Devoxx France)&lt;/li&gt;
&lt;li&gt;Comme toujours, beaucoup de monde.&lt;/li&gt;
&lt;li&gt;De plus en plus de français.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Parmi les sessions qui m'ont le plus intéressé :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;JAX-RS 2 qui disposera d'une (meilleure) intégration avec d'autres apis
comme Bean Validation (JSR-303), et surtout d’une partie cliente.&lt;/li&gt;
&lt;li&gt;MongoBD. Je l'avais récemment découvert pour un POC où je voulais stocker
des données en ligne, la session m'a permis de mieux voir les possibilités
qu'il offre.&lt;/li&gt;
&lt;li&gt;Performance et usabilité Android : beaucoup de conseils divers de
développement à ne pas oublier si l’on veut une application qui soit
ergonomique et performante.&lt;/li&gt;
&lt;li&gt;Android sur Google TV, même si on est loin d'avoir ces télévisions aussi
répandues que des smartphones, il est tout de même intéressant de voir les
enjeux et l'ergonomie.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Pour ceux qui n’ont pas pu venir et qui seraient intéressés pour revoir les
sessions, ou pour ceux qui souhaitent voir certaines sessions qu’ils n'auraient
pas pu voir : il y a Parleys. Ce site offre en effet la possibilité de revoir
les sessions de Devoxx, mais aussi de certains jugs locaux. Les sessions Devoxx
seront disponibles gratuitement pour ceux qui y ont participé, via abonnement
pour les autres. Il faudra quand même patienter jusqu’à la fin de l'année pour
qu'elles soient disponibles....&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-4aR-TVA6524/TsXKUbS67UI/AAAAAAAAEA8/wpTHjj8SI3I/s800/IMG_8053.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;302&quot; src=&quot;http://2.bp.blogspot.com/-4aR-TVA6524/TsXKUbS67UI/AAAAAAAAEA8/wpTHjj8SI3I/s320/IMG_8053.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Photo par &lt;a href=&quot;https://plus.google.com/118041907032714528693/posts&quot;&gt;Pierre-Antoine
Grégoire&lt;/a&gt;.</description>
    
    
    
      </item>
    
  <item>
    <title>Code Retreat #1</title>
    <link>http://www.insideit.fr/post/2011/06/28/Code-Retreat-1</link>
    <guid isPermaLink="false">urn:md5:78a7bc62b760de57d7c3c0ac13f54430</guid>
    <pubDate>Tue, 28 Jun 2011 14:30:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Java</category>
        <category>Code Retreat</category>    
    <description>    Ce 24 juin, j'ai assisté à un code retreat, organisé par &lt;a href=&quot;https://twitter.com/#!/morlhon&quot;&gt;Jean-Laurent de Morlhon&lt;/a&gt; et Simon Caplette,
chez Xebia.&lt;br /&gt;
Avant de m'inscrire, je n'en connaissais pas le principe. Je me réfère donc à
la définition donnée par les organisateurs :&lt;br /&gt;
&amp;quot;Le principe est le suivant: sur la journée coder en binôme sur plusieurs
sessions de 30-45 minutes chacune afin de résoudre un problème. A l’issue de
chaque session on change de binôme et tout le code produit est effacé.
Drastique mais efficace pour rester créatif. C’est aussi le lieu privilégié
pour tester de nouvelles techniques et algorithmes.&amp;quot;&lt;br /&gt;
C'est un concept de coding dojo que je n'avais essayé, d'où mon envie de
tester.&lt;br /&gt;
&lt;br /&gt;
Le temps que tout le monde soit là et installé, un traditionnel petit déjeuner
nous attendait.&lt;br /&gt;
Avant de commencer, l'organisation de la journée nous est présenté :&lt;br /&gt;
- Le but n'est pas de finir, mais de faire ce que l'on peut&lt;br /&gt;
- Par recommmencement on finit par s'améliorer, on cherche à améliorer la façon
de faire.&lt;br /&gt;
- Une session est composé de 40 min de développement en pair programming et 20
min de débriefing général.&lt;br /&gt;
- Ici c'est différent du boulot, on a le temps, inutile de rusher. Nous sommes
ici pour apprendre, tester d'autres façons de faire, essayer un autre langage
ou un autre ide, découvrir des plugins d'ide, ...&lt;br /&gt;
- Procéder par TDD et suivi les principes de &lt;a href=&quot;http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it&quot;&gt;YAGNI&lt;/a&gt;. Si ce sont
des pratiques que l'on ne fait pas au quotidien dans notre travail, c'est
justement l'occasion de s'y exercer&lt;br /&gt;
- Une session est composé d'une partie de développement de 40 min en pair
programming, suivi de 10-15 min de retrospective globale.&lt;br /&gt;
- Une retrospective globale en fin de journée&lt;br /&gt;
&lt;br /&gt;
Souvent le jeu de la vie est utilisé en code retreat, ici pour changer ce sera
TicTacToe dont les spécification nous sont fournis en 6 règles :&lt;br /&gt;
1/ Une partie est finie lorsque tous les champs sont pris.&lt;br /&gt;
2/ Une partie est finie lorsque une colonne est prise par un joueur.&lt;br /&gt;
3/ Une partie est finie lorsque une ligne est prise par un joueur.&lt;br /&gt;
4/ Une partie est finie lorsque une diagonale est prise par un joueur.&lt;br /&gt;
5/ Un joueur peut jouer lorsque un champ n'est pas pris.&lt;br /&gt;
6/ Les joueurs jouent à tour de role jusqu'à ce que la partie soit finie.&lt;br /&gt;
&lt;br /&gt;
Au total, sur la journée 5 sessions auront lieu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Session 1&lt;/h1&gt;
&lt;br /&gt;
Au bilan de cette première session, certains remonte l'usage de plugins Eclipse
:&lt;br /&gt;
- &lt;a href=&quot;http://www.happyprog.com/pairhero/&quot;&gt;Pair Hero&lt;/a&gt; : duels en pair
programming où chacun code à tour de role jusqu'à ce qu'un test échoue. Des
points sont gagnés en fonction de refacto ou rapidité à faire passer le
clavier.&lt;br /&gt;
- &lt;a href=&quot;http://infinitest.github.com/&quot;&gt;Infinitest&lt;/a&gt; : lance les tests
unitaire à chaque enregistrement du code, économise ainsi des switch
test/code.&lt;br /&gt;
Beaucoup prennent les régles dans l'ordre, mais est ce bien utile ?&lt;br /&gt;
Quant à l'implémentation, le plateau est codé sous diverse forme : tableau à 2
dimensions, chaine simple, ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Session 2&lt;/h1&gt;
&lt;br /&gt;
Les noms de classes eux aussi sont variés : TicTacToe, Party, Board, ... tout
comme les méthodes de fin : checOver, isOver(), ....&lt;br /&gt;
Des questions sur le moment où refactorer se posent. Le mieux est quand on
veux, quand celà nous semble un moment logique, une étape. Et il ne faut pas
oublier que la refacto concerne aussi bien, le code métier que les tests.&lt;br /&gt;
Quelques personnes pense qu'ils ont introduit la notion de joueur trop tôt, ils
auraient pu refactorer lorsqu'ils en auraients eu besoine.&lt;br /&gt;
Profitant de l'occasion de pouvoir refactorer, certains ont changé leur design,
parfois avec regret. Mais y trouve tous l'avantage du recommencement, qu'ils ne
peuvent pas faire au boulot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Session 3&lt;/h1&gt;
&lt;br /&gt;
Quelqu'uns trouvent un avantage dans l'implémentation de recherche interne,
pour une raison de facilité de recherche interne.&lt;br /&gt;
Pour la part, après 2 sessions orientée sur la détection de fin de partie, mon
code était plutôt orienté vers la le tour par tour des joueurs.&lt;br /&gt;
Une problématique courante remonte : placer le jeu dans un état précis pour
tester par exemple des configuration de plateau. Une solution possible serait
d'avoir une méthode d'initialisation.&lt;br /&gt;
Les animateurs remontent qu'ils entendent parler d'architecture, mais qu'il
s'agit là d'une notion bien poussée, car la seule voulue, c'est un simple
jeu.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Pause repas&lt;/h1&gt;
&lt;br /&gt;
Après toutes ces aventures de la matinée, nous avons le droit à un repas geek :
pizza/coca !&lt;br /&gt;
Pour l'apres midi, pour ceux qui souhaitent, on monte le niveau avec des
objectifs :&lt;br /&gt;
- No Mouse : souris interdite, uniquement clavier.&lt;br /&gt;
- 5 min par personne : on alterne le clavier toutes les 5 minutes.&lt;br /&gt;
- &lt;a href=&quot;http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/&quot;&gt;
Tdd as if you meant it&lt;/a&gt; : Tdd encore plus poussé avec des régles comme coder
son code métier dans la classe de test.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Session 4&lt;/h1&gt;
&lt;br /&gt;
Pour cette session, 2 groupes ont testé un autre langage :&lt;br /&gt;
- JavaScript (&lt;a href=&quot;http://twitter.com/#!/MathildeLemee&quot;&gt;Mathilde Lemée&lt;/a&gt;
et &lt;a href=&quot;http://twitter.com/#!/ericlemerdy&quot;&gt;Eric Le Merdy&lt;/a&gt;) : Utilisation
de JQuery, structure de données portée par la page. QUnit ne semble pas super
pour tester du js.&lt;br /&gt;
- &lt;a href=&quot;http://ioke.org/&quot;&gt;Ioke&lt;/a&gt; (&lt;a href=&quot;http://twitter.com/#!/dgageot&quot;&gt;David Gageot&lt;/a&gt; et moi même) : Je ne
connaissais absolument pas ce langage, j'ai donc était volontaire pour le
découvrir. C'est un langage entre lisp, ruby et smalltalk qui tourne aussi bien
sur une VM java que .Net. Nos tests sont assez très lisible, au contraire du
code. En effet, de refacto en refacto et par jeu, nous avons réduit de façon
très importante le code en utilisant toute la puissance du langage. Si bien que
notre code pour les régles lignes et colonnes tient en 3 lignes.&lt;br /&gt;
Ceux qui avaient l'objectif, Tdd as if you meant it sont satisfaits, par le
fait d'avoir pu repousser le moment de décider où placer son code.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Session 5&lt;/h1&gt;
&lt;br /&gt;
Le groupe JS a poursuivi ce qu'il avait commencé et nous montre leur
réalisation. Le js a permit de connecter facilement à une ihm html, la
structure de données est directement dans le dom plutôt que dans des objets
js.&lt;br /&gt;
David a continué en Ioke avec un autre volontaire pour découvrir le langage. De
nouvelles refacto ont eu lieu, et le code pour tester les 4 ères régles
tiennent sur environ 6 lignes.&lt;br /&gt;
Nos animateurs nous montrent un exemple de Tdd as if you meant qu'ils avaient
réalisé. Le retardement du choix du placement du code a fait qu'ils ont eu une
approche fonctionnelle, où le modèle est sans état.&lt;br /&gt;
Et pour finir, ils énumèrent quelques possibilité de challenge possible en code
retreat : No loop, No If, ...&lt;br /&gt;
Invonlontairement, ces 2 challenges ont été vaincus par David et son code en
Ioke.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Debriefing de la journée&lt;/h1&gt;
&lt;br /&gt;
Nous finissons la journée sur une rétrospective finale sur ce que nous avons
appris et ce qui sera pratiqué au retour au travail. Dans le désordre :&lt;br /&gt;
- Découverte du tdd et voir quelle limite dans l'approche du code nécessaire à
faire passer le test.&lt;br /&gt;
- Le tdd permet de penser plus au fonctionnel.&lt;br /&gt;
- Necessité de plus pousser le principe de code minimal afin d'affiner ses
tests.&lt;br /&gt;
- Réticence à Infinitest vaincu. Pour des tests volumineux, il est
paramétrable.&lt;br /&gt;
- Un autre langage qui faire penser différement.&lt;br /&gt;
- Pair Hero assez plaisant&lt;br /&gt;
- Parfois on pense avoir résolu de manière optimale un problème mais après
avoir recommencé avec une autre personne, on se rend compte que non.&lt;br /&gt;
- Progression dans les tests car parfois quasiment pas de tests dans les
projets au boulot.&lt;br /&gt;
- Nouvelle vision à chaque fois.&lt;br /&gt;
- Du test fait mais pas tdd, ce qui fait une nouvel outil à utiliser.&lt;br /&gt;
- Il peut être utile d'avoir une phase de réflexion avant de se lancer dans les
tests.&lt;br /&gt;
- Des discussions intéressantes.&lt;br /&gt;
- Passer plus de temps sur la refacto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un autre &lt;a href=&quot;http://fr.eventbrite.com/event/1832714699&quot;&gt;Code Retreat&lt;/a&gt;
aura lieu le 2 juillet, avec &lt;a href=&quot;http://twitter.com/#!/ojuncu&quot;&gt;Oana
Juncu&lt;/a&gt; de Sfeir comme animatrice.&lt;br /&gt;
A l'heure actuelle, il reste quelques places dépéchez si vous être intéressés.</description>
    
    
    
      </item>
    
  <item>
    <title>La marmite des Duchess</title>
    <link>http://www.insideit.fr/post/2011/06/23/La-marmite-des-Duchess</link>
    <guid isPermaLink="false">urn:md5:45afba07fa2a711c1c3ec871755c92ac</guid>
    <pubDate>Thu, 23 Jun 2011 00:49:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Java</category>
        <category>Duchesse</category><category>Mockito</category><category>TDD</category>    
    <description>    La 1ère édition de la Marmite des Duchess a eu le 7 juin dernier. Nom de code
&amp;quot;Crumble&amp;quot;.&lt;br /&gt;
Ce nouvel évènement, proposait 2 sessions en parallèle, le choix se faisait à
l'inscription :&lt;br /&gt;
- Atelier Mockito, animé par Mathilde Lemée et David Gageot. (limité à 20
places)&lt;br /&gt;
- Open Space Technologique. (limité à 40 places)&lt;br /&gt;
Doit on y voir l'anologie du crumble dans ce découpage ? Je ne saurais répondre
à cette question.&lt;br /&gt;
&lt;br /&gt;
Au total, une trentaine de personnes (dont 6 Sfeirien(ne)s) étaient présentes
pour une durée d'un peu plus de 2 heures.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Atelier Mockito&lt;/h1&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2315/5811390860_88c392d717.jpg&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
C'est la partie à laquelle j'ai assisté.&lt;br /&gt;
Cet atelier était basé sur le code de &lt;a href=&quot;https://github.com/jdubois/Tudu-Lists&quot;&gt;tudu-list&lt;/a&gt;. Le but était de, en peer
programming, compléter des tests et de les faire passer au vert. Pour palier
aux différentes connaissances et niveaux des participants, les tests étaient
répartis en 3 niveaux de difficulté.&lt;br /&gt;
Pour ma part, connaissant un peu Mockito, j'ai affronté le niveau 2. Nos
animateurs étaient bien sûr présent pour nos différentes questions sur la façon
de développer/organiser nos tests aussi bien sur Mockito mais aussi sur
FestAssert.&lt;br /&gt;
Ces exercices permettent d'avoir quelques bases sur Mockito en découvrant sa
syntaxe et ses particularités mais aussi si nous sommes rigoureux de se
familiariser avec le formalisme BDD,  conseillé pour bien se concentrer
sur une seule chose à tester par méthode de test.&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez tenter le défi, le code à compléter est &lt;a href=&quot;https://github.com/DuchessFrance/Tudu-Lists&quot;&gt;ici&lt;/a&gt; et la solution &lt;a href=&quot;https://github.com/MathildeLemee/Tudu-Lists&quot;&gt;là&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Open Space Technologie&lt;/h1&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2660/5810826773_0f9f63d050.jpg&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
D'après ce que j'en ai compris, un open space technologie est assez semblable à
un bar camp, mis à part qu'il n'y a pas de sessions parallèles.&lt;br /&gt;
&lt;div&gt;N'ayant pas de don d'ubiquité, je n'étais pas présent à cette partie. Mais
heureusement, mon collègue &lt;a href=&quot;https://twitter.com/#!/CGriffoin&quot;&gt;Clément
Griffoin&lt;/a&gt; avait pris des notes.
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Différents sujets ont étés abordés dont :&lt;br /&gt;
- Women in java&lt;br /&gt;
- ForPlay où &lt;a href=&quot;https://twitter.com/#!/Piwai&quot;&gt;Pierre-Yves Ricau&lt;/a&gt; fera
une démonstration de sa &lt;a href=&quot;http://forplay-2h4u.appspot.com&quot;&gt;réalisation&lt;/a&gt;&lt;br /&gt;
- Déploiement continu&lt;br /&gt;
- Stubs vs Mock&lt;br /&gt;
- TDD/DDD/BDD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous pourrez retrouver plus d'informations ce qui s'est dit dans cette partie
sur &lt;a href=&quot;http://jduchess.org/duchess-france/&quot;&gt;le blog des
Duchess&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Et pour finir, c'est un autour d'un repas que les derniers motivés se sont
retrouvés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Merci et félicitations pour cette première édition ! Et vivement la suite à la
rentrée.&lt;br /&gt;
&lt;br /&gt;
Des photos de cet article ainsi que toutes les photos la soirées sont
disponible sur l'&lt;a href=&quot;http://www.flickr.com//photos/jduchess/sets/72157626913389876&quot;&gt;espace Flickr
de Duchess France&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Du Protobuf dans mon Jersey</title>
    <link>http://www.insideit.fr/post/2011/06/23/Du-Protobuf-dans-mon-Jersey</link>
    <guid isPermaLink="false">urn:md5:8265a6889396b10688b29e7a4bcb941c</guid>
    <pubDate>Thu, 23 Jun 2011 00:38:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Java</category>
        <category>GAE</category><category>Guice</category><category>Jersey</category><category>Protobuf</category><category>Rest</category>    
    <description>    &lt;p&gt;J'avais déjà parlé, dans de précédents articles, de la génération de xml et
de json avec Jersey. Et si maintenant, on s'amusait à générer du
protobuf ?&lt;br /&gt;
On parle de protobuf pour Protocol Buffers, une techno Google pour encoder des
structures de données. Ce format de données compact est utilisé en interne chez
Google des échanges de données. Etant basé sur la déclaration d'une structure
de données dans un idl, protobuf possède plusieurs implémentation et est ainsi
utilisable dans plusieurs langage. En java, la génération du code cible se fait
avec ant. Mais bien sur reste utilisable avec maven par le plugin ant.&lt;br /&gt;
Nous allons reprendre notre Hello qui avait d'exemple. Voici sa structure
protobuf :&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
package nfrancois.poc;

option java_package = &amp;quot;nfrancois.poc.protobuf.model&amp;quot;;
option java_outer_classname = &amp;quot;HelloProto&amp;quot;;

message Hello {
  required string name = 1;
  required string message = 2;
}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
La structure se comprend assez facilement. Attention par contre, au trompeur
package de 1ère ligne, qui n'est pas lié à la notion de package que nous avons
en java. Il sert comme espace de nommage et éviter des collisions de nom si
plusieurs objets protobuf portent le même nom. Puisque depuis cette idl, je
pourrai aussi bien générer en C++ ou un autre langage, le vrai nom de package
java est indiqué par l'option &amp;quot;java_package&amp;quot;, de la même façon pour le nom de
classe qui va tout encapsuler qui sera &amp;quot;java_outer_classname&amp;quot;&lt;br /&gt;
Pour plus d'information sur &lt;a href=&quot;http://code.google.com/p/protobuf&quot;&gt;protobuf&lt;/a&gt;, je vous invite à consulter sa
page google code.&lt;br /&gt;
Le générateur protobuf générera un fichier HelloProto.java, qui permettra de
manipuler les Hello : création via pattern builder, encodage/désencodage,
... Le &amp;quot;vrai&amp;quot; Hello sera encapuslé au sein de ce dernier. Comme je disais, je
génère le java par le ant plugin de maven :&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
&amp;lt;plugin&amp;gt;
 &amp;lt;groupid&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactid&amp;gt;maven-antrun-plugin&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;1.6&amp;lt;/version&amp;gt;
 &amp;lt;executions&amp;gt;
  &amp;lt;execution&amp;gt;
   &amp;lt;id&amp;gt;generate-sources&amp;lt;/id&amp;gt;
   &amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;
   &amp;lt;configuration&amp;gt;
    &amp;lt;target&amp;gt;
     &amp;lt;exec executable='protoc'&amp;gt;
             &amp;lt;arg value='--java_out=src/main/java' /&amp;gt;
             &amp;lt;arg value='src/main/resources/Hello.proto' /&amp;gt;
             &amp;lt;/exec&amp;gt;
    &amp;lt;/target&amp;gt;
   &amp;lt;/configuration&amp;gt;
   &amp;lt;goals&amp;gt;
    &amp;lt;goal&amp;gt;run&amp;lt;/goal&amp;gt;
   &amp;lt;/goals&amp;gt;
  &amp;lt;/execution&amp;gt;     
 &amp;lt;/executions&amp;gt;
&amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
et bien sûr des dépendances protobuf&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupid&amp;gt;com.google.protobuf&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactid&amp;gt;protobuf-java&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.4.0a&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Le contrat de test sera assez proche de se que nous avions dans les tests
précédents :&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
@Test
public void shoulReplyHello(){
 // Given
 String message = &amp;quot;Hello&amp;quot;;
 String name =&amp;quot;Nicolas&amp;quot;;
 Hello hello = HelloProto.Hello.newBuilder().setName(name).setMessage(message).build();
 when(helloServiceMock.saysHelloToSomeone(&amp;quot;Nicolas&amp;quot;)).thenReturn(hello);
 // When
 ClientResponse response = resource().path(&amp;quot;hello&amp;quot;).path(name).get(ClientResponse.class);
 // Then
 verify(helloServiceMock).saysHelloToSomeone(name);
 assertThat(response.getClientResponseStatus()).isEqualTo(Status.OK);
 assertThat(response.getType().toString()).isEqualTo(&amp;quot;application/x-protobuf&amp;quot;);
 Hello entity = response.getEntity(Hello.class);
 assertThat(entity).isNotNull().isEqualTo(hello);
}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
La resource REST, elle aussi va peut évoluer :&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
@Path(&amp;quot;hello&amp;quot;)
@Singleton
@Produces(&amp;quot;application/x-protobuf&amp;quot;)
public class HelloResource {
 
 @Inject
 private HelloService helloService;
 
 @GET
 @Path(&amp;quot;/{name}&amp;quot;)
 public Hello reply(@PathParam(&amp;quot;name&amp;quot;) String name){
  return helloService.saysHelloToSomeone(name);
 }
 
 public void setHelloService(HelloService helloService) {
  this.helloService = helloService;
 }
 
}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
La difficulté à laquelle il faut se confronter, c'est que Jersey ne permet pas
de gérer de base le protobuf… Pas grave, on va s'occuper de faire le lien entre
l'encodage/désencodage de protobuf et Jersey.&lt;br /&gt;
&lt;br /&gt;
Commençons par le reader qui s'occupe de désencoder le protobuff. Pour celà,
nous devons implémenter l'interface MessageBodyReader où nous aurons du code
technique protobuf.&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
@Provider
@Consumes(&amp;quot;application/x-protobuf&amp;quot;)
@Singleton
public class ProtobufMessageBodyReader implements MessageBodyReader&amp;lt;Message&amp;gt; {

 public boolean isReadable(Class&amp;lt;?&amp;gt; type, Type genericType, Annotation[] annotations,
                                                            MediaType mediaType) {
  return Message.class.isAssignableFrom(type);
 }

 public Message readFrom(Class&amp;lt;Message&amp;gt; type, Type genericType, Annotation[] annotations, 
    MediaType mediaType, MultivaluedMap&amp;lt;String, String&amp;gt; httpHeaders, InputStream entityStream)
    throws IOException, WebApplicationException {
  try {
   Method newBuilder = type.getMethod(&amp;quot;newBuilder&amp;quot;);
   GeneratedMessage.Builder builder = (GeneratedMessage.Builder) newBuilder.invoke(type);
   return builder.mergeFrom(entityStream).build();
  } catch (Exception e) {
   throw new WebApplicationException(e);
  }
 }

}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
C'est par le content type &amp;quot;application/x-protobuf&amp;quot; que JAX-RS fera matcher le
type le reader/writer à l'entrée/sortie de la resource. Pour l'encodage, c'est
l'interface MessageBodyWriter qu'il faut implémenter.&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
@Provider
@Produces(&amp;quot;application/x-protobuf&amp;quot;)
@Singleton
public class ProtobufMessageBodyWriter implements MessageBodyWriter&amp;lt;Message&amp;gt; {
 public boolean isWriteable(Class&amp;lt;?&amp;gt; type, Type genericType, Annotation[] annotations,
                                                              MediaType mediaType) {
  return Message.class.isAssignableFrom(type);
 }

 private Map&amp;lt;Object, byte[]&amp;gt; buffer = new WeakHashMap&amp;lt;Object, byte[]&amp;gt;();

 public long getSize(Message m, Class&amp;lt;?&amp;gt; type, Type genericType, Annotation[] annotations, 
                                                                 MediaType mediaType) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  try {
   m.writeTo(baos);
  } catch (IOException e) {
   return -1;
  }
  byte[] bytes = baos.toByteArray();
  buffer.put(m, bytes);
  return bytes.length;
 }

 public void writeTo(Message m, Class type, Type genericType, Annotation[] annotations, 
                MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream)
                throws IOException, WebApplicationException {
  entityStream.write(buffer.remove(m));
 }
}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
La configuration de test, quant à elle sera un peu plus complexe, car il faut
que la partie cliente puisse désencoder toute seule le
protobuf :&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
protected AppDescriptor configure() {
 ClientConfig clientConfig = new DefaultClientConfig();
 clientConfig.getClasses().add(ProtobufMessageBodyReader.class);
 clientConfig.getClasses().add(ProtobufMessageBodyWriter.class);
 injector = Guice.createInjector(new ServletModule() {
 @Override
 protected void configureServlets() {
  bind(ProtobufMessageBodyReader.class);
  bind(ProtobufMessageBodyWriter.class);
  bind(HelloResource.class);
  serve(&amp;quot;/*&amp;quot;).with(GuiceContainer.class);
  }
 }); 
 return new WebAppDescriptor.Builder()
          .contextListenerClass(GuiceTestConfig.class)
          .filterClass(GuiceFilter.class)
          .clientConfig(clientConfig)
          .servletPath(&amp;quot;/&amp;quot;)
          .build();
}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Le code complet est &lt;a href=&quot;https://github.com/nfrancois/PocJerseyProtobufGuiceAppEngine&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Bilan Cloud Camp 1 chez Sfeir</title>
    <link>http://www.insideit.fr/post/2011/06/22/Bilan-Cloud-Camp-1-chez-Sfeir2</link>
    <guid isPermaLink="false">urn:md5:29c52279cb931dac010e4b26f35d170c</guid>
    <pubDate>Wed, 22 Jun 2011 22:11:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Conférence</category>
            
    <description>    C'est le 30 mai dernier qu'a été organisé le 1er Cloud Camp. Plus de 50
personnes étaient présentes au rendez vous. A l'arrivée, un accueil convivial
avec des cacahuètes et boisson attendaient les invités. La soirée commence avec
une présentation de Kohsuke Kawaguchi, sur le build en parallèle avec Jenkins.
&lt;div&gt;&lt;br /&gt;
 
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-_8ddy-9nTdE/TgJBAPq2zGI/AAAAAAAAAIE/Ia0AFM3se54/s1600/IMG_20110530_191233.jpg&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; width=&quot;400&quot; src=&quot;http://3.bp.blogspot.com/-_8ddy-9nTdE/TgJBAPq2zGI/AAAAAAAAAIE/Ia0AFM3se54/s400/IMG_20110530_191233.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la foulée, Steven Noels lui aussi vient aussi nous parler de son
bébé : Lily&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-V_dCwQqZfaw/TgJBp53HYSI/AAAAAAAAAIM/MjU9VhwSdhw/s1600/IMG_20110530_194949.jpg&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; width=&quot;400&quot; src=&quot;http://3.bp.blogspot.com/-V_dCwQqZfaw/TgJBp53HYSI/AAAAAAAAAIM/MjU9VhwSdhw/s400/IMG_20110530_194949.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;C'est autour de pizza que nous nous remettons de nos émotions, ce qui est
aussi l'occasion de discuter entre différentes personnes présentes. C'est
après, s'être bien rempli l'estomac que la soirée, s'est poursuivies etlLes
sessions camp organisées furent :
&lt;ul&gt;
&lt;li&gt;Forplay : le framework de Google pour réaliser des jeux pour des
cibles Gwt/Android/Flex/Swing&lt;/li&gt;
&lt;li&gt;Retour d'expérience sur Appengine&lt;/li&gt;
&lt;li&gt;Mvp4g&lt;/li&gt;
&lt;li&gt;Démo de Lilly&lt;/li&gt;
&lt;li&gt;CloudBees&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Le Bilan que je fais de cloud camp est très positif et a plus au participant.
Nous avons vu défiler les tweets lors des présentation de nos guest start. Et
quelques sujets de blog de participants d'Exilys sur &lt;a href=&quot;http://labs.excilys.com/2011/05/31/lily-un-cms-nosql&quot;&gt;Lily&lt;/a&gt; et &lt;a href=&quot;http://labs.excilys.com/2011/05/31/forplay-le-write-once-run-everywhere-des-jeux-videos/&quot;&gt;
ForPlay&lt;/a&gt;. D'autres sessions, seront probablement organisée. Nous espérons
vous y voir.&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Agile France 2011</title>
    <link>http://www.insideit.fr/post/2011/06/08/Agile-France-2011</link>
    <guid isPermaLink="false">urn:md5:c57aac1036bef7d3a42427fa8b08d28d</guid>
    <pubDate>Wed, 08 Jun 2011 13:18:00 +0200</pubDate>
    <dc:creator>Francois Wauquier</dc:creator>
            
    <description>    &lt;div style=&quot;background-color: transparent; margin-top: 0; margin-left: 0; margin-bottom: 0; margin-right: 0;&quot;&gt;
&lt;h4 id=&quot;internal-source-marker_0.1955672891344875&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 15px; white-space: pre-wrap; font-weight: normal;&quot;&gt;
LA conférance annuelle de la communauté agile en france.&lt;/span&gt;&lt;/h4&gt;
&lt;a href=&quot;http://conf.agile-france.org/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;a href=&quot;http://agilemanifesto.org/iso/fr/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://agilemanifesto.org/iso/fr/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h4 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Jeudi 26 Mai&lt;/span&gt;&lt;/h4&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Jean Claude Grosjean - Dans la peau du manager agile&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d7758894ff6f7381500008e&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d7758894ff6f7381500008e&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Présentation montrant l’évolution de ce poste dans une structure agile: il
conserve une partie de ses attributions, mais change de posture vis à vis de
l’équipe de réalisation. Au lieu de plannifier, d’attribuer les tâche et de
suivre, il donne la vision, priorise, et challenge.&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.slideshare.net/jcgrosjean/grosjean-management-agileagile-france2011&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://www.slideshare.net/jcgrosjean/grosjean-management-agileagile-france2011&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Jean-Phillipe Caruana - Buildr : un outil de build moderne, puissant et
efficace&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d8ccbac4ff6f77395000d18&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d8ccbac4ff6f77395000d18&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Je n’ai vu que le début de cette session, car je me préparais pour ma session.
Mais cet outil est à suivre de près, car les promesses sont grandes: plus
performant et plus flexible que maven.&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.barreverte.fr/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://www.barreverte.fr/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://buildr.apache.org/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://buildr.apache.org/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Francois Wauquier (votre serviteur) - Les frontières de l’équipe&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d94b7cb4ff6f7089b000094&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d94b7cb4ff6f7089b000094&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Je me suis amusé à comparer une équipe de réalisation avec un village
gaulois.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Une fois que l’on a vu la frontière, il ne reste plus qu’à la
supprimer...&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.slideshare.net/wokier/agile-france-2011-les-frontieres-de-lequipe&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://www.slideshare.net/wokier/agile-france-2011-les-frontieres-de-lequipe&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Gery Derbier - Top Chef : le carpacio de code&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d9392344ff6f73c470000ae&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d9392344ff6f73c470000ae&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Une expérimentation de développement en petite équipe avec des stories
volontairement floues, afin de mettre en avant le fait que le développement
logiciel est avant tout un mécanisme de création de savoir. Une bonne
simulation que j’ai eu le plaisir de réaliser avec Etienne Charignon dans un
groupe de 3. Petit rappel sur la théorie des jeux coopératifs chère à&lt;/span&gt;
&lt;a href=&quot;http://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751/ref=pd_sim_b_9&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Alistair Cockburn&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:
Pour bien jouer, il faut réussir le coup et préparer le coup
prochain.&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://twitter.com/#!/Gery7/status/73866830187466753&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://twitter.com/#!/Gery7/status/73866830187466753&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Eric Lefevre - Le Marsmallow Challenge&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d70b0974ff6f719b10005e4&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d70b0974ff6f719b10005e4&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Un petit jeu divertissant et instructif: fournir à un groupe un chamallow, des
spaghettis (non cuits), du scotch et de la ficelle, et leur demander de placer
le chamallow le plus haut possible.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
J’ai retenu 3 leçons :&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
- Ne pas sous-estimer le poids du chammallow (ce que vous aller construire
devra porter...)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
- Avancer par petits pas afin d’avoir toujours quelque chose à présenter sans
casser du spaghetti (ah oui, itératif et incrémental...)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
- Les enfants s’organisent mieux que certains professionnels.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Le groupe dans lequel j’ etais a gagné alors c’est encore plus
drôle.&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://marshmallowchallenge.com/Instructions.html&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://marshmallowchallenge.com/Instructions.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/#!/wokier/status/74000767761137664&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
https://twitter.com/#!/wokier/status/74000767761137664&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ted.com/talks/tom_wujec_build_a_tower.html&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://www.ted.com/talks/tom_wujec_build_a_tower.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Etienne Charignon - Lire du code&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d8fa5704ff6f752660009f7&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d8fa5704ff6f752660009f7&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Des bonnes pratiques présentées avec un prezi, et des exercices pratique de
lecture du code. J’ai retrouvé plusieurs points de vue lus dans&lt;/span&gt; &lt;a href=&quot;http://www.amazon.fr/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Clean Code&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.
Il distingue plusieurs “causes” d’écriture d’une ligne:&lt;/span&gt;
&lt;ul style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Limitation de la machine&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Limitation du langage&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Limitations du programmeur&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Raisons Historiques&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Besoin/Spécifications (enfin)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Je
retiens la comparaison avec la partition de musique: Quel musicien écrirait do
ré mi en commentaire de sa partition?&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://etienne.charignon.free.fr/spip/spip.php?article106&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://etienne.charignon.free.fr/spip/spip.php?article106&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Damien Thouvenin - Centre de service Agile&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4da6001b4ff6f75e0000004e&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4da6001b4ff6f75e0000004e&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Retour d’ expérience d’un centre de service qui se rapproche plus de la TMA que
du forfait. Je ne pense pas que ce genre de structure soit le coeur de cible
des méthodes agiles, mais je retiens 2 bons principes: l’équipe unique et On ne
commence pas la story suivante tant que la précédente n’est pas
validée.&lt;/span&gt;&lt;br /&gt;
&lt;h4 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Vendredi 27 Mai&lt;/span&gt;&lt;/h4&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Mack Adams - Une carte agile de gestion de produits&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4da8bc6d4ff6f73fde000273&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4da8bc6d4ff6f73fde000273&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Mack distingue les rôles de&lt;/span&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Product_owner#Core_Scrum_roles&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Product Owner&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
et&lt;/span&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Product_manager&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Product Manager&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.
Le premier terme vient de Scrum, le second du marketing. Pour un produit de
petite taille, ces deux rôles peuvent être tenus par la même personne, mais
pour un produit plus complexe, avec beaucoup d’interlocuteurs et/ou une
dimension marketing forte, seul superman peut tenir ce rôle. Dans son
organisation d’éditeur de logiciel multi-continent, il y a même de nombreux
rôles intermédiaires. Son outil préféré pour construire la vision et le backlog
initial est le&lt;/span&gt; &lt;a href=&quot;http://www.agileproductdesign.com/blog/the_new_backlog.html&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
story Mapping&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;,
qu’il réalise sur des sessions de quelques jours.&lt;/span&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Jonathan Scher &amp;amp; Guillaume Duquesnay - Comment réussir un projet agile très
court&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d984fd94ff6f74ad10001ad&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d984fd94ff6f74ad10001ad&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Une session courte, comme les projets de quelques mois que Jonathan et
Guillaume ont réalisé récemment. C’est un délai si court que l’équipe ne peut
pas se stabiliser. Cela nécessite d’être encore plus discipliné. Ils
recommandent de s’engager sur un enjeu, de faire sauter le sprint
0.&lt;/span&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Pascal Van Cauwenberghe - Les bases des méthodes agiles Lean&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d961f234ff6f701570005e1&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d961f234ff6f701570005e1&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Une grande présentation avec des thèmes chers à Pascal, du rythme, de l’humour,
des anecdotes.&lt;/span&gt;
&lt;ul style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Théorie des contraintes&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Real Options&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Pilotage par la valeur metier&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Auto Organisation&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Excellence Technique&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Amélioration continue&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;http://blog.nayima.be/2011/06/07/conf-agile-france-2011-les-bases-des-methodes-agiles-et-lean/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://blog.nayima.be/2011/06/07/conf-agile-france-2011-les-bases-des-methodes-agiles-et-lean/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Christophe Addinquy - Quand mon produit est un système
d’information&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d96ec514ff6f7417600015d&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d96ec514ff6f7417600015d&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Retour d’ experience du Système d’ Iinformation Back de Vidal. J’ai retrouvé
beaucoup de similitudes avec les propos de Mack Adams. Ils se posent tous les
deux la question de prioriser des ensembles plus gros que la story ou l’epic,
que christophe appelle chantier, pour des produits de grande taille et
complexes. Et ils utilisent la même image de superman pour la personne qui
arriverait à définir la vision et suive dans le détail ce genre de
produit.&lt;/span&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Alexandre boutin - Lorsque Scrum ne marche pas&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4d837c064ff6f70c2d000054&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4d837c064ff6f70c2d000054&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Plusieurs sujets possibles, mais un temps limité? Alexandre propose de choisir
en utilisant la technique&lt;/span&gt; &lt;a href=&quot;http://innovationgames.com/buy-a-feature/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Buy a Feature&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
. Le sujet est donc choisit en négociant, en criant et en courant. Le point
commun des sujets, c’est une difficulté rencontrée lors de la mise en place de
Scrum.&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.agilex.fr/&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
http://www.agilex.fr/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3 style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Lucian Précup - La revue de code&lt;/span&gt;&lt;/h3&gt;
&lt;a href=&quot;http://conf.agile-france.org/sessions/4da87ce64ff6f721eb000823&quot; style=&quot;font-family: 'Times New Roman'; font-size: medium;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://conf.agile-france.org/sessions/4da87ce64ff6f721eb000823&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
Cette pratique utilisée par Google, Apache, Mozilla peut être outillée afin de
définir des flux de validation, revue, correction. Tout commit est considéré
comme un patch. Personnellement, je reste fan du binômage.&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Soirée JDuchess le 7 juin</title>
    <link>http://www.insideit.fr/post/2011/06/01/Soir%C3%A9e-JDuchess-le-7-juin</link>
    <guid isPermaLink="false">urn:md5:5853e242cf209f2be1678c87dd071643</guid>
    <pubDate>Wed, 01 Jun 2011 11:12:00 +0200</pubDate>
    <dc:creator>Audrey</dc:creator>
        <category>Conférence</category>
            
    <description>    &lt;p&gt;Ca y est ! &lt;a href=&quot;http://jduchess.org/duchess-france/blog/marmite-soiree-crumble-pour-la-premiere-edition/&quot;&gt;
La marmite&lt;/a&gt;, le rendez-vous régulier des JDuchess, est lancée. Le premier
opus aura lieu mardi 7 juin dans les locaux de SupInfo (23 rue du Château
Landon, 75010 Paris – à côté de gare du nord). Au programme, deux tracks en
parallèle : un atelier sur le framework de tests unitaires Mockito animé
par Mathilde et un open-space.&lt;/p&gt;
&lt;p&gt;Qu’est-ce qu’un open space ? C’est un peu comme un barCamp à part que
les sujets sont présentés au début et que l’on ne traite que les sujets les
plus populaires pendant un temps limité. Le but essentiel est de partager et de
débattre. Tous les sujets autour de Java et de l’IT sont les bienvenus. Pour
vous donner des idées, voici quelques pistes possibles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une problématique technique que vous avez rencontrée&lt;/li&gt;
&lt;li&gt;un super outil qui a changé votre vie de développeur&lt;/li&gt;
&lt;li&gt;votre sujet de veille préféré&lt;/li&gt;
&lt;li&gt;ou une problématique relationnelle (ex: comment travailler avec une
personne au caractère difficile ?).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;N'oubliez pas de vous &lt;a href=&quot;http://la-marmite-soiree-crumble.eventbrite.com/&quot;&gt;inscrire&lt;/a&gt;, les places
sont limitées !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Le Scroll horizontal facile en Android</title>
    <link>http://www.insideit.fr/post/2011/05/26/Le-Scroll-horizontal-facile-en-Android</link>
    <guid isPermaLink="false">urn:md5:6eb01155f623e11aa84805dc4bd11518</guid>
    <pubDate>Thu, 26 May 2011 09:47:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Android</category>
        <category>Android</category>    
    <description>    &lt;p&gt;Dans un souci d'ergonomie, le scroll horizontal est bien appréciable, par
exemple pour passer à l'écran suivant. Même si la fonctionnalité est utilisé,
pour se déplacer entre les écrans du home, il n'existe pas de composants qui
gère cela. Comme bien, souvent, c'est dans l'open source que l'on trouve une
solution.&lt;br /&gt;
C'est sur github que j'ai trouvé &lt;a href=&quot;https://github.com/pakerfeldt/android-viewflow&quot;&gt;View Flow for Android&lt;/a&gt; qui
offre une solution simple à intégrer. En fin de compte, ce comportement de
scroll horizontal, c'est une sorte de ListView à défilement horizontal où une
cellule = un écran. C'est sur ce principe que se base cette api. Elle offre un
composant ViewFlow qui nécessite un BaseAdapter pour réaliser l'affichage de
chacun de ses écrans.&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
viewFlow = (ViewFlow) findViewById(R.id.viewflow);
viewFlow.setAdapter(new MonAdapter());
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
 &amp;lt;org.taptwo.android.widget.ViewFlow
                   android:id=&amp;quot;@+id/viewflow&amp;quot; 
                   android:layout_width=&amp;quot;fill_parent&amp;quot;
                   android:layout_height=&amp;quot;fill_parent&amp;quot; 
                   app:sidebuffer=&amp;quot;3&amp;quot;/&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Qu'est ce que ce sidebuffer ?&lt;br /&gt;
Il s'agit tout simplement du buffer des écrans chargés; ce qui permet de
fluidifier le scroll. Avec la valeur 3, j'aurai jusqu'à 3 écrans à droite, 3
écrans à gauche ainsi que mon écran actuel, soit 7 écrans, qui sont chargés et
en mémoire. Cette valeur, est à 3 par défaut.&lt;br /&gt;
&lt;br /&gt;
Et si j'ai besoin d'écouter le changement d'écran ?&lt;br /&gt;
Ca tombe bien, il existe un ViewSwitchListener&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
viewFlow.setOnViewSwitchListener(new ViewSwitchListener() {
    public void onSwitched(View v, int position) {
        // Your code here
    }
});
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Certains Home Android, affiche un indicateur de position afin de connaitre
celui sur lequel nous nous trouvons. View Flow for Android offre aussi cette
possibilité. A l'heure actuelle, il en existe 2&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cercle&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
CircleFlowIndicator indic = (CircleFlowIndicator) findViewById(R.id.viewflowindic);
viewFlow.setFlowIndicator(indic);
&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;http://1.bp.blogspot.com/-ufnDnKfkTgk/Td0QLOZBHDI/AAAAAAAAAG0/t7hhckjOww8/s320/flowCircle.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Texte&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
TitleFlowIndicator indicator = (TitleFlowIndicator) findViewById(R.id.viewflowindic);
indicator.setTitleProvider(myTitleProvider);
viewFlow.setFlowIndicator(indicator);
&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;http://3.bp.blogspot.com/-vzA2vRQGlf4/Td0Qh8c4kRI/AAAAAAAAAG8/44Xe5m5789c/s320/flowTitle.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Je trouve cette api sympathique à utiliser, et espère y voir de nouvelles
fonctionnalités.&lt;br /&gt;
Comme beaucoup pour beaucoup de projet sur github, les contributions sont les
bienvenues, si vous avez des idées, n'hésitez pas.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CloudCamp chez Sfeir</title>
    <link>http://www.insideit.fr/post/2011/05/09/CloudCamp-chez-Sfeir</link>
    <guid isPermaLink="false">urn:md5:9d930f2bffdf35ee61c15ad8b4227dfa</guid>
    <pubDate>Mon, 09 May 2011 19:17:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Conférence</category>
        <category>BarCamp</category><category>cloud</category><category>cloudbees</category><category>jenkins</category>    
    <description>    &lt;p&gt;Hey, lecteur !&lt;br /&gt;
Qu'as tu de prévu à ton agenda ce 30 mai 2011 à partir de 18h30 ?&lt;br /&gt;
Si tu n'as rien, Sfeir te convie à un BarCamp spécial Cloud dans ses locaux à
Suresnes. Si tu n'es pas coutumier des barcamps, sache que c'est une &amp;quot;non
conférence ouverte&amp;quot;. C'est à dire qu'un ensemble personne toutes intéressées
par un même sujet s'isole dans un coin pour en discuter toutes ensemble.&lt;br /&gt;
Pour ce CloudCamp, nous aurons l'honneur d'avoir un invité de marque :
Kohsuke Kawaguchi. Et oui, lui le papa de Hudon/Jenkins qui travaille
actuellement chez Cloudbees sera là... Donc, une très bonne occasion,
d'échanger sur le cloud.&lt;br /&gt;
Comme à tout bon évènement geek, il y aura bien sûr des pizzas et des
boissons.&lt;br /&gt;
J'espère t'y voir.&lt;br /&gt;
Allez viens, les inscriptions, c'est par &lt;a href=&quot;http://barcamp.org/SFEIR-BarCamp&quot;&gt;ici&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Manipulation de la Remote Api GAE avec Guice/Objectify</title>
    <link>http://www.insideit.fr/post/2011/04/26/Manipulation-de-la-Remote-Api-GAE-avec-Guice/Objectify</link>
    <guid isPermaLink="false">urn:md5:f2bbc062a957c9b9d838aa5de0343ede</guid>
    <pubDate>Tue, 26 Apr 2011 10:09:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Cloud</category>
        <category>GAE</category><category>Guice</category><category>Objectify</category>    
    <description>    Avec la version 1.4.3 de app engine, arrive une api qui jusque là était
disponible seulement en python : la &lt;a href=&quot;http://code.google.com/intl/fr-FR/appengine/docs/java/tools/remoteapi.html&quot;&gt;remote
api&lt;/a&gt;. Celle çi permet de se connecter de façon sécurisée au datastore afin
d’y insérer des données par exemple.&lt;br /&gt;
La documentation, bien que courte, donne de bonnes explications sur la façon de
mettre en place. Mais, c’est le cas simple... Si au sein de mon application app
engine, j’ai mis en place Guice et &lt;a href=&quot;http://code.google.com/p/objectify-appengine/&quot;&gt;Objectify&lt;/a&gt;, je me retrouve
confronté à 2 problèmes :&lt;br /&gt;
1/ Pour fonctionner ma servlet doit être déclarée dans la configuration
Guice.&lt;br /&gt;
2/ Je manipule des objets métier géré par Objectify et non pas des
Entity.&lt;br /&gt;
&lt;br /&gt;
Imaginons je possède l'objet &amp;quot;métier&amp;quot; suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;java&quot;&gt;
public class Hello {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String message;
private String name;
public Hello(){
}
public Hello(String message, String name) {
super();
this.message = message;
this.name = name;
}
// Getter &amp;amp; Setter/hascode/equals methods ...
}
&lt;/pre&gt;
&lt;br /&gt;
Je vais devoir modifier mon GuiceServletConfig pour la mapper avec la servlet.
Aussi une servlet déclarée doit Guice doit être un singleton.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;java&quot;&gt;
public class GuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
bind(RemoteApiServlet.class).in(Singleton.class);
serve(&amp;quot;/remote_api&amp;quot;).with(RemoteApiServlet.class);
// D'autres bindings ou serve ...
}
});
}
}
&lt;/pre&gt;
&lt;br /&gt;
Le 1er problème est ainsi résolu.&lt;br /&gt;
Il ne me reste plus qu'à transformer mes Hello en Entity. Une petite ballade
dans le code source permet de trouver la solution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;java&quot;&gt;
public static Entity helloToEntity(Hello hello) {
Objectify ofy = ObjectifyService.begin();
EntityMetadata&amp;lt;Hello&amp;gt; metadata = factory.getMetadataForEntity(hello);
return metadata.toEntity(hello, ofy);
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu'à écrire un petit batch d'alimentation :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;java&quot;&gt;
public static void main(String[] args) throws IOException {
RemoteApiOptions options = new RemoteApiOptions()
.server(&amp;quot;maSuperApplication.appspot.com&amp;quot;, 443)
.credentials(&amp;quot;monEmailAMoi@gmail.com&amp;quot;, &amp;quot;monMotDePasse&amp;quot;);
RemoteApiInstaller installer = new RemoteApiInstaller();
installer.install(options);
List&amp;lt;Entity&amp;gt; hellos = Lists.newArrayList(helloToEntity(new Hello(&amp;quot;Hello&amp;quot;, &amp;quot;Nicolas&amp;quot;)),
helloToEntity(new Hello(&amp;quot;Bonjour&amp;quot;, &amp;quot;Vincent&amp;quot;)),
helloToEntity(new Hello(&amp;quot;Salut&amp;quot;, &amp;quot;Guillaume&amp;quot;)),
helloToEntity(new Hello(&amp;quot;Enchanté&amp;quot;, &amp;quot;M. Gendal&amp;quot;)));
try {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
for (Entity hello : hellos) {
Key key = ds.put(hello);
System.out.println(&amp;quot;Hello key=&amp;quot; + key);
}
} finally {
installer.uninstall();
}
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
En console, nous obtiendrons :&lt;br /&gt;
&lt;pre&gt;
Hello key=Hello(3001)
Hello key=Hello(4001)
Hello key=Hello(1002)
Hello key=Hello(5001)
&lt;/pre&gt;
&lt;br /&gt;
Et dans l'interface web du datastore, nous voyons bien nos 4 Hellos :&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://img23.imageshack.us/img23/7948/hellosao.png&quot; /&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Des rubis plein les nuages</title>
    <link>http://www.insideit.fr/post/2011/04/21/Des-rubis-plein-les-nuages</link>
    <guid isPermaLink="false">urn:md5:c92cb8134dbad0ea89a9c9dd17c0dd81</guid>
    <pubDate>Thu, 21 Apr 2011 10:09:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Cloud</category>
        <category>cloud</category><category>ruby</category><category>WMware</category>    
    <description>    Comme vous le savez certainement, WMware au travers de Cloud Foundry propose
son offre de cloud, mais pour le moment en bêta. Après une longue semaine
d'attente, j'ai enfin reçu mes crédentials.&lt;br /&gt;
C'est tourjours par un HelloWorld que commence bon nombre de tutoriaux, celui
que j'ai essayé n'échappe pas à cette règle.&lt;br /&gt;
Je vais vous faire part de ce petit essai que je trouve intéressant.&lt;br /&gt;
&lt;br /&gt;
En fait, il s'agit de la version Ruby que j'ai essayé. Je n'y connais rien en
Ruby, mais qu'à celà ne tienne, Hello c'est pas très compliqué.&lt;br /&gt;
Il faut tout d'abord s'assurer de ses version de Ruby et de gem :&lt;br /&gt;
&lt;pre&gt;
bash$ ruby -v
&lt;/pre&gt;
&lt;pre&gt;
bash$ gem -v
&lt;/pre&gt;
Ils doivent être respectivement en version 1.8.7 et 1.7.2. Il est possible que
gem ne soit pas à jour, dans ce cas, la commande suivante est à passer :&lt;br /&gt;
&lt;pre&gt;
bash$ sudo gem update --system
&lt;/pre&gt;
Vous pourrez ainsi installer la gem vmc :&lt;br /&gt;
&lt;pre&gt;
bash$ sudo gem install vmc
&lt;/pre&gt;
Ce qui permettra dans un premier temps de se connecter à son compte :&lt;br /&gt;
&lt;pre&gt;
bash$ vmc target api.cloudfoundry.com
Succesfully targeted to [http://api.cloudfoundry.com]
bash$ vmc login
Email: moiMail@mo.i
Password: ***********
Successfully logged into [http://api.cloudfoundry.com]
&lt;/pre&gt;
On a passé le coté configuration et prêt à déchainer la fureur du code.&lt;br /&gt;
&lt;pre&gt;
bash$ mkdir hello
bash$ cd hello/
bash$ nano hello.rb
&lt;/pre&gt;
&lt;br /&gt;
Chose promise, chose dûe, un hello tout simple :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;ruby&quot;&gt;
require &amp;quot;sinatra&amp;quot;
get '/' do
&amp;quot;Coucou les gens&amp;quot;
end
&lt;/pre&gt;
&lt;br /&gt;
Et voilà, on a fini la v1, il ne reste plus qu'à déployer, en répondant à
quelques questions :&lt;br /&gt;
&lt;pre&gt;
bash$ vmc push
Would you like to deploy from the current directory? [Yn]: Y
Application Name: nfrancois
Application Deployed URL: 'nfrancois.cloudfoundry.com'? y
Detected a Sinatra Application, is this correct? [Yn]: y
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G)
Creating Application: OK
Would you like to bind any services to 'nfrancois'? [yN]:
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK
&lt;/pre&gt;
&lt;br /&gt;
Aussitôt, dégainage du navigateur à l'url, et c'est déjà accessible :&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img src=&quot;http://img706.imageshack.us/img706/2580/hello1o.png&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
Mince j'ai oublié des gens importants :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;ruby&quot;&gt;
require &amp;quot;sinatra&amp;quot;
get '/' do
&amp;quot;Coucou les gens, surtout toi lecteur&amp;quot;
end
&lt;/pre&gt;
&lt;br /&gt;
Prêt à déployer ce correctif :&lt;br /&gt;
&lt;pre&gt;
bash$ vmc update nfrancois
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Stopping Application: OK
Staging Application: OK
Starting Application: OK
&lt;/pre&gt;
&lt;br /&gt;
Un F5 suffit à vérifier :&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img src=&quot;http://img851.imageshack.us/img851/5669/hello2r.png&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
C'est ainsi que s'est déroulé mon premier essai de déploiement Cloud Foundry et
j'ai apprécié sa simplicité. C'est donc un bon point qui donne envie de
continuer à s'y intéresser car bien sûr pour s'en faire une bonne idée, il
reste de nombreuses choses à tester.&lt;br /&gt;
Dans le monde du Ruby dans le cloud, il existe aussi Heroku, assez apprécié me
semble t-il dans le monde ruby. Mais mes connaissances rubyste s'arrête là, je
ne saurais faire un comparatif des 2 offres.</description>
    
    
    
      </item>
    
  <item>
    <title>Ma journée à Mix It</title>
    <link>http://www.insideit.fr/post/2011/04/17/Ma-journ%C3%A9e-%C3%A0-Mix-It</link>
    <guid isPermaLink="false">urn:md5:dc95f923105088cac0370ae28bfd97f7</guid>
    <pubDate>Sun, 17 Apr 2011 03:05:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Conférence</category>
        <category>Mix-it</category>    
    <description>    Ce 5 avril 2011, s'est tenu le mix-it, conférence autour de java et de ses
pratiques, organisée par le Lyon JUG et Kara. Celle çi était articulée de 5
thèmes : Techy, Agility, Tendy, Mixy, Gamy.&lt;br /&gt;
Soit 25 sessions au total. J'étais parmis les 250 personnes qui s'y sont rendu.
Je vais vous faire une petite rétrospective de quelques sessions auxquelles
j'ai assisté au cours de cette belle journée.&lt;br /&gt;
&lt;br /&gt;
Nous étions quelques Parisiens, habitués du Paris JG, à s'être déplacé, dont
certains en temps que Speaker.&lt;br /&gt;
Et c'est justement par Nicolas Martignole que commence la traditionnelle
keynote, après une courte présentation de Objet Direct, principal sponsor de
d'évènement.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Keynote&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Nicolas commence par une question, « Qui est fier ce qu'il a
réalisé ? ». Peu de monde, dans l'assistance lève la main. Cette question
a pour but d'amener au constant suivant : le plus important, ce n'est pas le
résultat mais le processus.&lt;br /&gt;
Il y a quelques années, on ne parlait pas de TDD, agilité, ni aucun terme
tendance auquel nous sommes aujourd'hui habitués. A la place, on parlait
d'architecture, d'UML, …&lt;br /&gt;
Nous n'avons plus la même façon de construire une application qu'autrefois (si
j'ose dire) : nous livrons régulièrement par exemple. Nicolas aime assez
la vision du craftmanship et nous expose 12 points du métier de développeur
aujourd'hui.&lt;br /&gt;
1/ Pattern de l'iceberg : le client ne voit que ¼ de ce qui se passe, il
est donc normal qu'il ne comprenne pas qu'une tache ait pris plus de temps que
ce qu'il n'imaiginait.&lt;br /&gt;
2/ Comprendre ce qui va changer à la fin : Imaginons que vous naviger dans
un bateau, vous préférez un point de rendez vous que vous recalculer chaque
jour en fonction des contraintes ou un point de rendez vous cap 180° et on se
revoit dans 10 jours ?&lt;br /&gt;
3/ Simplicité. Nous autre développeurs java, sommes de passionnés de technique
et inventons régulièrement de nouveaux frameworks. Mais tant de complexité et
elle nécessaire ?&lt;br /&gt;
4/ Itérer et avancer. Tout comme un musicien qui s'entraine, nous devons savoir
jeter du code, le mouvement est important.&lt;br /&gt;
5/ Vision du jardinier, savoir pensez long terme.&lt;br /&gt;
6/ Mouvement permanent. Il ne faut pas attendre mais savoir bouger, en faisant
de la veille par exemple.&lt;br /&gt;
7/ On ne dit pas de « Je fais de l'architecture » mais du « je
fais du code propre ». C'est implicite dans la réalisation
logicielle.&lt;br /&gt;
8/ Avoir le temps de se planter. C'est un avantage de l'agilité. Si au bout de
15 jours vous vous rendez compte ça passe. Mais si un cycle en V fait que vous
vous en rendez compte, les conséquence auprès du client de sont pas les
mêmes.&lt;br /&gt;
9/ Soyez sans pitié. Le code pourri ou en commentaire, il file tout droit à la
poubelle.&lt;br /&gt;
10/ Le client est roi (mais on est pas non plus sa mère). Avec lui, on ne parle
de qu'il connait : le métier, mais pas de techno. A l'inverse, ce n'est
pas à lui, d'imaginer la solution technique. Lorsque vous prenez l'avion,
donnez vous de conseils au pilote ?&lt;br /&gt;
11/ Gérer son manager. C'est en quelque sorte le ministre des affaires
étrangère, c'est lui gère les relations entre l'équipe et le monde extérieur.
S'il passe trop de temps à gérer l'équipe en elle même, c'est qu'il y a un
soucis.&lt;br /&gt;
12/ Nous sommes des développeurs. Nous ne voulons pas être chef, amusez
vous.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Spock, les tests du
futur&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mathilde Lemée, habituée du Paris JUG mais aussi une des fondatrices des
Duchess France, vient nous parler de Spock. Ce dernier, n'est pas qu'un
personnage de la série Star Trek, c'est aussi framework de test venu de la
galaxie Groovy.&lt;br /&gt;
Lorsque l'on écrit des tests, on a tendance à oublier leur partie
critique : la maintenance.&lt;br /&gt;
Spock se veut de rendre les tests lisibles, ce qui facilite grandement de
travail lorsque l'on refactore.&lt;br /&gt;
L'approche setup/expect/where ou given/when/then, facilitée par les labels,
permet de tester une seule chose à la fois. La première syntaxe est adaptée à
des cas de test simple type action/vérification du résultat. La seconde, elle
est plus adaptée à des cas complexe où par exemple, je vais devoir faire appel
à des éléments externes.&lt;br /&gt;
Il est important de différencier les mocks des stubs, ils n'ont pas les même
rôles. Le stub est un bouchon stupide. Il sert simplement à tester l'état, mais
n'a pas vocation à faire échouer le test. Au contraire, le mock peut faire
échouer le test, car on teste son comportement.&lt;br /&gt;
En terme de code, la différence est assez simple : sois je vérifie si mon
appel est bien effectué, soit je ne le fais pas.&lt;br /&gt;
Le problème posé par la sur utilisation des mocks, c'est que les tests casse au
moindre refactor et consomme du temps pour les réparer.&lt;br /&gt;
Martin Fowler apporte plus de précisions dans son &lt;a href=&quot;http://martinfowler.com/articles/mocksArentStubs.html&quot;&gt;article sur le
sujet&lt;/a&gt;.&lt;br /&gt;
Ce qu'apporte principal Spock aux tests, c'est une syntaxe plus souple.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
def &amp;quot;account activation mail sent to user&amp;quot;(){
setup:
UserService userService = new UserService()
def emailService = Mock(EmailService)
emailService.sendMail(_,_,_,_) &amp;gt;&amp;gt; true
userService.emailService = emailService
User user = new User(email : &amp;quot;testUser@gmail&amp;quot;)
when:
boolean success = userService.sendActivationMail(user)
then:
1*.emailService.sendMail(&amp;quot;testUser@gmail&amp;quot;,&amp;quot;admin@admin.com&amp;quot;,&lt;br /&gt;       &amp;quot;Your account is activated&amp;quot;, &amp;quot;Congratulation now you can login&amp;quot;)
success == true
}
&lt;/pre&gt;
&lt;br /&gt;
Ce que l'on note :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Nom de méthode expressif et lisible&lt;/li&gt;
&lt;li&gt;Configuration simple du résultat de la méthode du mock grace à
&amp;gt;&amp;gt;&lt;/li&gt;
&lt;li&gt;Configuration simple de la vérification de l'appel du mock 1* …&lt;/li&gt;
&lt;li&gt;Pas d'assert sur le résultat, il est implicite&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
De façon globale, la syntaxe est assouplie grace aux bloc given/when/then qui
permettent d'éviter l'utilisation de mots clés, ce qui au final donne une
lecture plus naturelle des instructions.&lt;br /&gt;
&lt;br /&gt;
Cette lisibilité est accru dans le cadre de tests avec jeu de
données :&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
def &amp;quot;String param should correspond to numeric spockInfoDay&amp;quot;() {
setup:
def spockResource = new SpockResource(new CalendarDaoStatic())
expect:
spockResource.findCalendarByDay(day).day == dayNumeric
where:
day | dayNumeric
&amp;quot;1&amp;quot; | 1
&amp;quot;2&amp;quot; | 2
&amp;quot;3&amp;quot; | 3
}
&lt;/pre&gt;
&lt;br /&gt;
N'est ce pas plus plaisant à lire ?&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Intelligence
collective avec Apache Mahout&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Je suis allé sur ce sujet que je ne connais absolu pas, par curiosité. C'est
Michael Figuière qui nous a présenté à ce framework.&lt;br /&gt;
L'intelligence collective est supérieure à l'intelligence du plus intelligent.
Wikipedia est un exemple, il contient beaucoup plus de connaissance que
quiconque.&lt;br /&gt;
Aujourd'hui, internet permet d'agréger tout un tas de données. Page Rank agrège
par exemple l'intelligence collective des sites web. Ainsi, par de nombreux
liens, le site officiel de mix-it est la première réponse à la recherche
« mit it ».&lt;br /&gt;
Le machine learning est un concept clé de Apache Mahout. Il s'agit d'un sous
ensemble de l'intelligence artificielle. Les applications en sont par
exemple :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Recommandation à d'un livre à un client en fonction de ce qu'il a déjà
acheté ou de ce que les autres ont achetés en même temps.&lt;/li&gt;
&lt;li&gt;Classification automatique de mails en fonction de qui a déjà été
classé.&lt;/li&gt;
&lt;li&gt;Conseil de fonctionnalité : si un utilisateur ne s'en sert pas, peut
être qu'il ne la connait pas.&lt;/li&gt;
&lt;li&gt;Adapter filtrage en fonctionnalité du profil : quand je cherche un
livre sur java, faut il favoriser l'informatique ou les livres sur
l'ile ?&lt;/li&gt;
&lt;li&gt;Filtrage du spam&lt;/li&gt;
&lt;li&gt;Agreger un flux actualité en fonction des tendances.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Pour nous, dans le domaine de l'informatique de gestion, ces concepts ne nous
sont pas familliés. C'est justement là qu'intervient Apache Mahout en
fournissant un implémentation java des algorithmes dernières ces concepts,
facilitant ainsi leur intégration dans nos applications. Un bonne partie de
cette implémentation est faite en Map/Reduce. Le framework est encore jeune
mais connait une croissance rapide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Pimp my
app&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir en épanadiplose, je finis ma journée par la présentation de Nicolas
Martignole sur Play.&lt;br /&gt;
Quelques éléments pour moderniser une dans un navigateur web tout en
s'amusant :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Html5/css3/jquery&lt;/li&gt;
&lt;li&gt;Play&lt;/li&gt;
&lt;li&gt;Huile de coude&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Play! est développé à la base par Guillaume Bord, une personne du monde du web
et de Ruby, et donc qui pas connu les joies des EJB 2. Devant la complexité du
développement web en java, il a voulu réconcilier les 2 mondes en récréant ce
qu'il connaissait avec Rails.&lt;br /&gt;
Tout d'abord, Play! n'utilise pas l'api servlet, est sans état sur le serveur.
Choses banale dans d'autres technos utilisés pour faire du web. C'est justement
sur Rails, Django et Grails que vient sont inspiration.&lt;br /&gt;
Avec Play! devient facile de développer rapidement une idée, ainsi moins de
scrupules à jeter du code si l'on est pas satisfait. Un des aspect qui permette
sa simplicité, c'est son absence de session coté serveur et qui va en
adéquation avec les principes de REST.&lt;br /&gt;
C'est un framework fullstack, je fais tous avec lui : écriture de code,
compilation, test et déploiement. Tous ça au sein de son environnement. Pour
éviter d'être prisonnier de son serveur, on peut même packager en war et
déployer sur un serveur d'application, bien que l'esprit de soit un peu perdu
dans ce cas.&lt;br /&gt;
Nicolas nous explique que la question de se poser l'utilisation chez le client
et la même que celle qui se posait il a 5 ans, à savoir si on peut utiliser
Play.&lt;br /&gt;
Et bientôt, avec la version 1.2 on pourra piocher des dépendances avec modules
Ivy.&lt;br /&gt;
Pour le moment, un ses points faibles c'est l'industrialisation des
développements.&lt;br /&gt;
&lt;br /&gt;
Un projet Play à la même structure qu'un projet Ruby :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;src : les sources aussi bien java que html&lt;/li&gt;
&lt;li&gt;test&lt;/li&gt;
&lt;li&gt;conf : la configuration telle que le routage ou les propriétés&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Nous avons le droit à une live démo :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;La classe de base qui est un point d'entrée du controller.&lt;/li&gt;
&lt;li&gt;La page htlml, est du script groovy&lt;/li&gt;
&lt;li&gt;Oh mais on pas recompilé et ça marche.&lt;/li&gt;
&lt;li&gt;En mode dev, Play surveille les fichiers et recompile quand il faut, on
laisse ainsi tourner le serveur tout en codant&lt;/li&gt;
&lt;li&gt;La trace d'erreur est lisible, ça fait gagner beaucoup de temps.&lt;/li&gt;
&lt;li&gt;Utilisation d'un cookie pour gérer l'état conversationnel avec des
cookies.&lt;/li&gt;
&lt;li&gt;Pas de session sur le serveur&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Les 2 derniers points nous pousse à avoir une architecture différente.&lt;br /&gt;
&lt;br /&gt;
Niveau graphique, un inconvéniant, c'est qu'il n'y a rien, il faut retourner
aux bases : grande utilisation du css et js.&lt;br /&gt;
Cela dit, sur ces 2 domaines en cas de problèmes ont peut toujours trouver de
l'aide, venant même d'autre communautés comme php et rails.&lt;br /&gt;
Pas un peu de code css3, Nicolas nous montre comment embellir sa partie web en
ayant par exemple un bouton full-css, de l'ombrage, ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette conférence a été une belle réussite. Aussi, j'ai ouïe dire qu'elle avait
été organisées en très peu de temps. Je profite donc de ce billet pour
féliciter donc les responsables de celle ci et espère une prochaine édition
l'année prochaine. Il est plaisant de voir que les communautés dans toutes la
France se bougent pour nous monter de beaux événements à bas coût. Le prochain
rendez vous sera le Breizh camp.</description>
    
    
    
      </item>
    
  <item>
    <title>Du Jersey, du Guice et de l'App Engine 3/3</title>
    <link>http://www.insideit.fr/post/2011/04/16/Du-Jersey%2C-du-Guice-et-de-l-App-Engine-3/3</link>
    <guid isPermaLink="false">urn:md5:15807fcf734b9bcdee201ff6b9875315</guid>
    <pubDate>Sat, 16 Apr 2011 14:50:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Java</category>
        <category>GAE</category><category>Guice</category><category>Jersey</category><category>REST</category>    
    <description>    &lt;p&gt;Et pour finir cette série d'article, nous allons nous intéresser à la
génération de JSon avec Jersey et bien sûr à sa testabilité.&lt;/p&gt;
&lt;p&gt;Le xml, c'est bien gentil, mais dans des échanges REST ça peut être un peu
lourd, surtout si le consommateur est un appareil mobile. La génération JSon
avec Jersey peut s'appuyer sur JAX-B. Et oui, c'est justement pour cela que
l'on s'en est occupé dans le précédant article. Le mapping, lui, ne change
pas.&lt;/p&gt;
&lt;p&gt;La resource ne nécessite qu'un petit changement :&lt;/p&gt;
&lt;pre&gt;
 @GET
 @Path(&amp;quot;{name}&amp;quot;)
 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
 public Hello reply(@PathParam(&amp;quot;name&amp;quot;) String name){
  return helloService.saysHelloToSomeone(name);
 }
&lt;/pre&gt;
&lt;p&gt;Comme on est sympa, on permet de renvoyer soit du Json, soit du Xml, c'est
le consommateur qui décide. Par défaut, c'est le 1er format qui est choisit,
soit le JSon.&lt;/p&gt;
&lt;p&gt;La génération JSon va nécessiter un peu de configuration, principalement à
cause du &lt;a href=&quot;http://jersey.java.net/nonav/documentation/latest/json.html#d4e948&quot;&gt;type de
JSon généré&lt;/a&gt;. C'est le &lt;em&gt;ContextResolver&lt;/em&gt; qui va s'occuper de
ça :&lt;/p&gt;
&lt;pre&gt;
@Provider
@Singleton
public class JAXBContextResolver implements ContextResolver&amp;lt;JAXBContext&amp;gt; {

 /** Package that contains object that can be mapped */
 private static final String JAXB_OBJECT_PACKAGE = Hello.class.getPackage().getName();

 private final JAXBContext context;

 public JAXBContextResolver() throws Exception {
  this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), 
                                     JAXB_OBJECT_PACKAGE);
 }

 @Override
 public JAXBContext getContext(Class&amp;lt;?&amp;gt; objectType) {
  if(objectType.getPackage().getName().equals(JAXB_OBJECT_PACKAGE)){
   return context;
         }
  return null;
 }
}
&lt;/pre&gt;
&lt;p&gt;Ici le type de JSon souhaité est le &lt;em&gt;natural&lt;/em&gt;. Cet objet doit être
passés dans le même package que les resources, il profitera ainsi lui aussi de
la découverte automatique au démarrage de Guice. Ce resolver n'est pas
obligatoire, sans lui, le JSon généré est par défaut en mode mapped.&lt;/p&gt;
&lt;p&gt;La configuration des tests, va devoir évoluer un peu pour prendre en compte
notre génération en ode natural. La méthode &lt;em&gt;configure()&lt;/em&gt;
devient :&lt;/p&gt;
&lt;pre&gt;
@Override
 protected AppDescriptor configure() {
  ClientConfig clientConfig = new DefaultClientConfig();
  clientConfig.getClasses().add(JAXBContextResolver.class);
  injector = Guice.createInjector(new ServletModule() {
   @Override
   protected void configureServlets() {
    bind(getTestingResourceClass());
    bind(JAXBContextResolver.class);
    serve(&amp;quot;/*&amp;quot;).with(GuiceContainer.class);
   }
  }); 
  return new WebAppDescriptor.Builder()
           .contextListenerClass(GuiceTestConfig.class)
           .filterClass(GuiceFilter.class)
           .clientConfig(clientConfig)
           .servletPath(&amp;quot;/&amp;quot;)
           .build();
 }
&lt;/pre&gt;
&lt;p&gt;Ainsi du coté serveur comme du coté client, les échanges seront dans le même
format. Nos tests deviendront :&lt;/p&gt;
&lt;pre&gt;
@Test
 public void shoulReplyHelloInXml(){
  doShoulReplyHello(MediaType.APPLICATION_XML_TYPE);
 }
 
 @Test
 public void shoulReplyHelloInJson(){
  doShoulReplyHello(MediaType.APPLICATION_JSON_TYPE);
 } 
 
 private void doShoulReplyHello(MediaType type){
  String message = &amp;quot;Hello&amp;quot;;
  String name =&amp;quot;Nicolas&amp;quot;;
  Hello hello = new Hello(message, name);
  when(helloServiceMock.saysHelloToSomeone(&amp;quot;Nicolas&amp;quot;)).thenReturn(hello);
  
  ClientResponse response = resource().path(&amp;quot;hello&amp;quot;).path(name)
                                      .accept(type).get(ClientResponse.class);
  
  verify(helloServiceMock).saysHelloToSomeone(name);
  assertThat(response.getClientResponseStatus()).isEqualTo(Status.OK);
  assertThat(response.getType()).isEqualTo(type);
  Hello entity = response.getEntity(Hello.class);
  assertThat(entity).isNotNull().isEqualTo(hello);  
  
 } 
&lt;/pre&gt;
&lt;p&gt;Une des différenciation entre les types de JSon générés se fait sur la façon
dont sont écrites les listes. En mode natural, nous avons par exemple :
&lt;a href=&quot;http://www.insideit.fr/post/2011/04/16/Du-Jersey%2C-du-Guice-et-de-l-App-Engine-3/objet1,%20objet2,%20...&quot; title=&quot;objet1, objet2, ...&quot;&gt;objet1, objet2,
...&lt;/a&gt; avec des objet {&amp;quot;attributA&amp;quot;:&amp;quot;valeurA&amp;quot;, ....}&lt;/p&gt;
&lt;p&gt;Imaginons que nous avons une autre ressource qui par grande politesse
retourne 2 Hellos :&lt;/p&gt;
&lt;pre&gt;
@Path(&amp;quot;doublehello&amp;quot;)
@Singleton
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public class DoubleHelloResource {
 
 @Inject
 private HelloService helloService;
 
 @GET
 @Path(&amp;quot;/{name}&amp;quot;)
 public List&amp;lt;Hello&amp;gt; reply(@PathParam(&amp;quot;name&amp;quot;) String name){
  List&amp;lt;Hello&amp;gt; hellos = new ArrayList&amp;lt;Hello&amp;gt;();
  hellos.add(helloService.saysHelloToSomeone(name));
  hellos.add(helloService.saysHelloToSomeone(name));
  return hellos;
 }
 
}
&lt;/pre&gt;
&lt;p&gt;Pour vérifier sa bonne génération, nous aurions le test suivant :&lt;/p&gt;
&lt;pre&gt;
@Test
 public void shoudHaveTwoHello(){
  String message = &amp;quot;Hello&amp;quot;;
  String name =&amp;quot;Nicolas&amp;quot;;
  when(helloServiceMock.saysHelloToSomeone(&amp;quot;Nicolas&amp;quot;))
                        .thenReturn(new Hello(message, name)); 
  ClientResponse response = resource().path(&amp;quot;doublehello&amp;quot;).path(name)
                                      .get(ClientResponse.class);
  assertThat(response.getStatus()).isEqualTo(Status.OK.getStatusCode());
  assertThat(response.getType()).isEqualTo(MediaType.APPLICATION_JSON_TYPE);
  List&amp;lt;hello&amp;gt; hellos = response.getEntity(new GenericType&amp;lt;List&amp;lt;Hello&amp;gt;&amp;gt;(){});
  assertThat(hellos).isNotNull().hasSize(2);
 }
 
 @Test
 public void shoudBeInNaturalJson(){
  String message = &amp;quot;Hello&amp;quot;;
  String name =&amp;quot;Nicolas&amp;quot;;
  when(helloServiceMock.saysHelloToSomeone(&amp;quot;Nicolas&amp;quot;))
                                .thenReturn(new Hello(message, name)); 
  ClientResponse response = resource().path(&amp;quot;doublehello&amp;quot;).path(name)
                                      .get(ClientResponse.class);
  assertThat(response.getStatus()).isEqualTo(Status.OK.getStatusCode());
  assertThat(response.getType()).isEqualTo(MediaType.APPLICATION_JSON_TYPE);
  String hellos = response.getEntity(String.class);
  assertThat(hellos).isEqualTo(naturalHelloJSon(message, name));
 }
 
 public String naturalHelloJSon(String message, String name){
  StringBuilder sb = new StringBuilder();
  sb.append(&amp;quot;[{\&amp;quot;message\&amp;quot;:\&amp;quot;&amp;quot;).append(message)
    .append(&amp;quot;\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;&amp;quot;).append(name).append(&amp;quot;\&amp;quot;},&amp;quot;);
  sb.append(&amp;quot;{\&amp;quot;message\&amp;quot;:\&amp;quot;&amp;quot;).append(message)
    .append(&amp;quot;\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;&amp;quot;).append(name).append(&amp;quot;\&amp;quot;}]&amp;quot;);
  return sb.toString();
 }
&lt;/pre&gt;
&lt;p&gt;Même s'il est un format intéressant, le JSon souffre d'un problème lié au
javascript : celui du cross-domain qui fait que l'on ne peut pas
interroger un autre domain que celui de la page web. &amp;lt;a
href=&amp;quot;http://en.wikipedia.org/wiki/JSONP&amp;quot;&amp;gt;JSonP&amp;lt;/a&amp;gt; permet d'évincer
cette contrainte.&lt;/p&gt;
&lt;p&gt;Jersey permet aussi de générer ce type de réponse mais un peu moins
facilement. Nous allons créer une nouvelle méthode pour ce type de
réponse :&lt;/p&gt;
&lt;pre&gt;
 @GET
 @Path(&amp;quot;{name}.jsonp&amp;quot;)
 @Produces(&amp;quot;application/x-javascript&amp;quot;)
 public JSONWithPadding replyWithJsonP(@PathParam(&amp;quot;name&amp;quot;) String name,
           @QueryParam(&amp;quot;callback&amp;quot;) @DefaultValue(CALLBACK_DEFAULT_NAME) String callback){
  Hello hello = helloService.saysHelloToSomeone(name);
  return new JSONWithPadding(hello, callback);
 } 
&lt;/pre&gt;
&lt;p&gt;Son test reste dans l'optique des précédents :&lt;/p&gt;
&lt;pre&gt;
@Test
 public void shoudBeJsonpWithCallbackNameParam(){
  String message = &amp;quot;Hello&amp;quot;;
  String name =&amp;quot;Nicolas&amp;quot;;
  when(helloServiceMock.saysHelloToSomeone(&amp;quot;Nicolas&amp;quot;)).thenReturn(new Hello(message, name));
  String callbackName = &amp;quot;monCallback&amp;quot;;
  
  ClientResponse response = resource().path(&amp;quot;hello&amp;quot;).path(name+&amp;quot;.jsonp&amp;quot;)
                                      .queryParam(&amp;quot;callback&amp;quot;, callbackName)
                                        .get(ClientResponse.class);
  assertThat(response.getStatus()).isEqualTo(Status.OK.getStatusCode());
  assertThat(response.getType().toString()).isEqualTo(&amp;quot;application/x-javascript&amp;quot;);
  assertThat(response.getEntity(String.class)).isNotNull().startsWith(callbackName);
 }
&lt;/pre&gt;
&lt;p&gt;Je n'ai pas malheureusement pas trouvé comment unmarshmaller ce message.&lt;/p&gt;
&lt;p&gt;Et voilà, ce tour d'horizon est fini, amusez vous bien avec ces quelques
technos. Comme à chaque fois, le code source est &lt;a href=&quot;https://github.com/nfrancois/PocJerseyJaxBJsonGuiceAppEngine&quot;&gt;disponible&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>1er anniversaire des Duchess France</title>
    <link>http://www.insideit.fr/post/2011/04/15/1er-anniversaire-des-Duchesses-France</link>
    <guid isPermaLink="false">urn:md5:20e6328b8d59e123862eafc283071445</guid>
    <pubDate>Fri, 15 Apr 2011 02:05:00 +0200</pubDate>
    <dc:creator>Nicolas FRANCOIS</dc:creator>
        <category>Duchesse</category><category>Java</category>    
    <description>    &lt;p&gt;C'est ce 14 avril que s'est tenu le 1er anniversaire des Duchess
France.&lt;br /&gt;
Pour ceux qui n'ont pas suivi, non la noblesse n'a pas été rétablie en France.
Il s'agit d'un groupe principalement composé de filles et qui oeuvre pour
donner plus de visibilité aux femmes dans le milieu informatique; et bien sûr
pas en gestion de projet, mais dans la technique.&lt;br /&gt;
&lt;br /&gt;
A l'arrivée, nous recevons notre badge ainsi qu'un classique petit
questionnaire : comment avez vous connu les Duchesses ? Quelle thèmes
souhaiteriez voir traité .... A remettre dans une urne, car il pourra faire
gagner l'un des lots offerts par les Sponsors. Tout les badges sont marqués
d'une petite forme colorée. Quelle est sa signification ? C'est en
rentrant dans l'amphithéâtre que la question trouve sa réponse : Nous
sommes placés d'après la couleur de gommette. Et c'est ainsi que sont faites
les équipes du Trivial Java, ainsi pas de jaloux dans la formation de ces
dernières.&lt;br /&gt;
La soirée commence par une traditionnelle présentation, ce sont elles/qui elles
ne sont pas, quel est le but ?, .... On connaissait déjà les avant-JUG, les
groupes de préparation à la certification et bientôt s'annonce un nouvel
événement : la marmite ! Mais qu'est ce donc ? Il s'agira d'une
rencontre type coding dojo &amp;quot;main dans le code&amp;quot; (ou plutôt dans la
marmite).&lt;br /&gt;
Après quelques remaniement de certaines couleurs en sous effectif, le jeu peu
vraiment commencer. Les règles sont assez simples, chaque équipe envoi un
représentant répondre à une série de question sur un thème comme le code java,
la veille techno, les frameworks et même l'histoire geeko-javaïste. Des
questions bien tordue, notamment sur le code java.&lt;br /&gt;
C'est après quelques séries de questions qu'a lieu la pause buffet bien méritée
après ces efforts. Celle-çi est l'occasion de discuter avec les diverses
connaissances présentes.&lt;br /&gt;
Au retour ce celui ci a lieu le tant attendu tirage au sort permettant de
gagner les cadeaux offerts par les sponsors (dont Sfeir fait bien sûr parti).
Parmi ces lots : un ipad2 (d'ailleurs remporté par une Sferienne :
&lt;a href=&quot;http://twitter.com/yasaite&quot;&gt;Yasmine Aite&lt;/a&gt;), des formations, des
pass parleys, .... ainsi qu'un &amp;quot;cadeau surprise&amp;quot; qui se révélât être la fameuse
Barbie informaticienne qui avait fait le buzz l'année dernière, remportée par
&lt;a href=&quot;http://twitter.com/bargenson&quot;&gt;Brice Argenson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/AnniversaireDuchesses/.BriceEtBarbie_m.jpg&quot; alt=&quot;BriceEtBarbie.jpg&quot; title=&quot;BriceEtBarbie.jpg, avr. 2011&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La seconde parti reprend sur la lancée de la 1ère partie. Pour ce terminer,
sur une égalité entre les verts foncés et les ciels. Pour les départager, c'est
un duel entre &lt;a href=&quot;http://twitter.com/JulienDubois&quot;&gt;Julien Dubois&lt;/a&gt; et
&lt;a href=&quot;http://twitter.com/cbe317&quot;&gt;Cédric Beurtheret&lt;/a&gt; sur une question de
rapidité qui tranchera. C'est Spock (le framework de test) qui emmènera les
verts foncés à la victoire par la réponse de Cédric. Leur équipe s'est vue
remettre un mug aux couleurs des Duchess.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideit.fr/public/AnniversaireDuchesses/.vainqueur_m.jpg&quot; alt=&quot;vainqueur.jpg&quot; title=&quot;vainqueur.jpg, avr. 2011&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pour les plus chevronnés, la soirée se termine par une traditionnelle 3ème
mi-temps autour d'une pizza.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Félicitations aux duchesses pour cette belle soirée avec une très bonne
animation. En attendant le prochain anniversaire, nous espérons de bonnes
marmites pleines de bonnes technos auxquelles nous voulons tous gouter.&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>