<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4024540416729506999</id><updated>2011-10-11T00:40:15.173-07:00</updated><title type='text'>Coaching, équipe et humanité</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default?start-index=101&amp;max-results=100'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>152</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1563564902066035064</id><published>2010-06-14T16:08:00.000-07:00</published><updated>2010-06-14T16:55:57.589-07:00</updated><title type='text'>La fête des soirées de NLPNL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_I6qpNMiW2Ys/TBa-joxNnhI/AAAAAAAABVM/yGcBqvpm-7k/s1600/Image+1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 212px; height: 258px;" src="http://4.bp.blogspot.com/_I6qpNMiW2Ys/TBa-joxNnhI/AAAAAAAABVM/yGcBqvpm-7k/s320/Image+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5482779115818688018" /&gt;&lt;/a&gt;
&lt;p&gt;J'ai vécu la &lt;a href="http://www.nlpnl.eu/soirees.php?idRegion=5"&gt;soirée des soirées NLPNL&lt;/a&gt; qui a eu lieu ce lundi 14 juin 2010 comme un moment particulier, un moment de "Passage" et/ou de “pas sage", sur le thème du choix et du non choix. Entre le clean language qui invite à créer soi-même ses métaphores, les contes métaphoriques qui nous emmènent dans notre propre univers, la systémique collaborative où nous sommes en total responsabilité de notre vécu du système et de notre (ré)action, le questionnement sans réponse où le client prend choix de sa question, le déclencheur photogénique qui invite au passage expressif identitaire, les mots ramenés à leur sens et en polarité comme des aiguilles réactivant les points vitaux existentiels, quel est le lien ?&lt;/p&gt;
&lt;p&gt;Qu'est ce qui crée ce passage ? D'où vient-il ? Où va t-il ? Personne ne le sait et pourtant il est bien présent en chacun de nous... Un beau mystère de la vie, de l'existence.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Merci à &lt;a href="http://www.viadeo.com/profile/0021jgkym8w60wf9?readOnly=false&amp;distance=5&amp;queryString=%2BZERAH"&gt;Andrée Zerah&lt;/a&gt; pour cette clôture ouverture des soirées NLPNL&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1563564902066035064?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1563564902066035064/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1563564902066035064' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1563564902066035064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1563564902066035064'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2010/06/la-fete-des-soires-de-nlpnl.html' title='La fête des soirées de NLPNL'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_I6qpNMiW2Ys/TBa-joxNnhI/AAAAAAAABVM/yGcBqvpm-7k/s72-c/Image+1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5254529832031968513</id><published>2010-04-19T11:16:00.000-07:00</published><updated>2010-04-19T12:20:10.347-07:00</updated><title type='text'>Quels enjeux pour le coaching ?</title><content type='html'>&lt;p&gt;Nous avons coutume de séparer monde professionnel et monde personnel/familial. La tendance actuelle est un rapprochement de ces deux mondes. Les liens entre les deux ont toujours existé, nous reproduisons les même comportements dans les deux contextes, sauf que je crois qu'il y a une accélération de ce rapprochement voire une fusion. Avec l'effervescence des nouvelles technologies et des réseaux sociaux, tout est en train de se connecter. Tout cela est accentué par nos habitudes sociales, nous avons plus de congés, donc plus de temps à occuper pour des projets de vie.&lt;/p&gt;
&lt;p&gt;Quelles sont les tendances ?&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;Une augmentation accrue de la complexité en entreprise, l'information est plus riche et est répartie entre les unités business de l'entreprise&lt;/li&gt;
&lt;li&gt;Le pouvoir de décision ne peut plus être détenu par les dirigeants seulement&lt;/li&gt;
&lt;li&gt;Les "middle managers" moitié opérationnel / moitié décideur sont encore plus sollicités, ils doivent savoir mobiliser leurs équipes tout en transmettant un savoir-faire issu de leur expérience&lt;/li&gt;
&lt;li&gt;Les attentes des employés envers l'entreprise sont plus importantes, l'entreprise doit aussi m'apporter quelque chose personnellement sinon je m'investis dans autre chose et j'ai le choix dans ma vie personnelle qui est bien plus remplie qu'il y a 10 ans&lt;/li&gt;
&lt;li&gt;La pression sociale et la mondialisation accrue ne me laissent pas le choix, soit je vis dans le rythme effréné économique soit je vis à côté.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quelles sont les conséquences ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L'énergie de l'entreprise se déplace pour aller dans les équipes projet alors qu'avant elle était essentiellement concentrée du côté des dirigeants et des comités de direction&lt;/li&gt;
&lt;li&gt;Les dirigeants doivent déléguer en partie leur pouvoir de décisions à ces managers pour s'atteler à construire les partenariats et assurer l'accroissement de leur réseau commercial&lt;/li&gt;
&lt;li&gt;Les managers doivent apprendre à mobiliser leurs équipes et encore plus maintenant car chaque employé peut choisir plus facilement de s'investir dans d'autres activités: associations, communautés, travaux dans la maison, activités extra scolaires des enfants...&lt;/li&gt;
&lt;li&gt;L'entreprise doit être un lieu d'épanouissement de la personnalité de l'individu sinon elle disparaitra...&lt;/li&gt;
&lt;li&gt;Les entreprises feront de plus en plus appels à des indépendants&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quelles sont les enjeux du coaching ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le coaching doit se déplacer. Réservé aux dirigeants et particulièrement du coaching individuel, cela sera de plus en plus du coaching d'équipe projets et d'organisation&lt;/li&gt;
&lt;li&gt;Le coaching doit aussi permettre un développement de la personnalité des personnes dans leur entreprise et en même temps dans leur vie. Le coaching professionnel sera agrémenté de coaching de vie du fait du rapprochement des deux mondes et pour permettre aux employés de trouver un intérêt dans leur travail en entreprise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout cela va faire du coaching, un métier encore plus singulier, vécu en situation dans des réunions opérationnelles où le "Je" doit concourir au "Nous" mais aussi où le "Nous" doit permettre le développement du "Je"&lt;/p&gt;
&lt;p&gt;J'y vois un coaching d'équipe très focalisé sur les réunions de travail opérationnelles agrémenté d'ateliers de découverte de soi via la rencontre avec l'autre. Un doux mélange pour relier les deux mondes personnel et professionnel et permettre à la fois à chacun de nous de vivre pleinement un monde extrêmement riche et complexe.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5254529832031968513?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5254529832031968513/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5254529832031968513' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5254529832031968513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5254529832031968513'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2010/04/quels-enjeux-pour-le-coaching.html' title='Quels enjeux pour le coaching ?'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-9148698327420376858</id><published>2010-03-01T10:04:00.000-08:00</published><updated>2010-03-01T10:32:01.650-08:00</updated><title type='text'>Mieux vivre</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/41X6MPCNGAL._SL500_AA240_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/41X6MPCNGAL._SL500_AA240_.jpg" border="0" alt="" /&gt;&lt;/a&gt;J'ai l'habitude d'avoir plusieurs livres d'avance, une bonne trentaine ;) en fait. J'aime regarder ma bibliothèque et me dire... "Hum, il a l'air pas mal celui là. Hops je le lis !" et puis la magie intervient, comme un phénomène de pur synchronicité, le choix du livre est en lien profond avec ce qui arrive dans ma vie. Ici, c'est bien de vie dont on parle, d'&lt;b&gt;expérience optimale&lt;/b&gt; de la vie. Ce livre est un joli bijou de développement personnel pour qui cela fait sens. Qu'est ce que ce livre fait écho en moi ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vivre le "flow" (expérience optimale) est ce qui donne sens à la vie, tout sa profondeur et son intensité&lt;/li&gt;
&lt;li&gt;Le flow est bien un doux mélange d'extrème vigilance et de plaisir&lt;/li&gt;
&lt;li&gt;Le flow a plus de chances d'arriver en interaction avec les autres et surtout avec ses amis, le E (extraverti) de MBTI, quand on peut parler des sujets qui nous tiennent à coeur et que nous sommes attentifs à ce que dit l'autre.&lt;/li&gt;
&lt;li&gt;Le flow peut aussi être vécu dans des activités solitaires, le I (introverti) de MBTI, mais c'est là que c'est le plus difficile. Par exemple, pour moi, je me rends compte que la lecture d'un livre qui demande réflexion, l'écoute d'une chanson dynamisante accompagnée d'une danse pour le peu acrobatique ;), le montage d'un film de mes vacances, l'écriture d'un article de blog, la relaxation (sophrologie), la cuisine sont autant d'activités solitaires où j'atteinds le flow. En fait, j'ai l'impression que le flow est atteint dans des activités créatrices quand on n'est pas en interactions avec les autres&lt;/li&gt;
&lt;li&gt;Par contre, travailler le soir chez soi ne me fait pas atteindre un état de flow :(&lt;/li&gt;
&lt;li&gt;Dans mon travail, j'ai observé les moments où j'avais le plus de plaisir par la méthode de l'échantillonnage de l'expérience vécue, c'est très utile, voir salutaire. Je me suis rendu compte que les meilleurs moments de ma journée sont en collectif dans des réunions opérationnelles dans la recherche de solutions ou de développement interpersonnel. Le reste, c'est ... du travail ;)&lt;/li&gt;
&lt;li&gt;A noter, que les personnes qui sont "les plus heureuses" sont celles qui sont capables de confronter la vie avec enthousiasme, Ciskszentmihalyi parle de personnalités autotélique. On les retrouve chez les prix nobel, mais pas seulement.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si ce sujet vous intéresse, je vous conseille donc la lecture de ce livre, en espérant qu'il vous apporte autant qu'à moi !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-9148698327420376858?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/9148698327420376858/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=9148698327420376858' title='5 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/9148698327420376858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/9148698327420376858'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2010/03/mieux-vivre.html' title='Mieux vivre'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7439356550385432480</id><published>2010-02-23T14:13:00.000-08:00</published><updated>2010-02-23T14:16:22.294-08:00</updated><title type='text'>La création dans le lâcher de certitudes</title><content type='html'>&lt;p&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jImEE6S6U4E&amp;hl=fr_FR&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jImEE6S6U4E&amp;hl=fr_FR&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Quand je me suis imaginé en train de lâcher toutes mes certitudes, j'ai eu peur, qu'est ce qui fait que je vais exister ? La réponse est pourtant là.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7439356550385432480?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7439356550385432480/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7439356550385432480' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7439356550385432480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7439356550385432480'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2010/02/la-creation-dans-le-lacher-de.html' title='La création dans le lâcher de certitudes'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1683750286416684917</id><published>2010-02-23T13:47:00.000-08:00</published><updated>2010-02-23T14:24:49.445-08:00</updated><title type='text'>Corps et guérison</title><content type='html'>&lt;p&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xOwk4ca8JN0&amp;hl=fr_FR&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/xOwk4ca8JN0&amp;hl=fr_FR&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Certains pourraient penser que le discours que tient &lt;a href="http://fr.wikipedia.org/wiki/Fran%C3%A7ois_Roustang"&gt;François Roustang&lt;/a&gt; dans cette vidéo est naïf et bien pas moi ! J'adore le "non, c'est pas la peine de parler...", je me le dis tellement souvent ! La phrase clé est &lt;b&gt;trouver sa "position en accord avec son propre espace existentiel"&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Qu'est ce qui se passe quand quelqu'un complexe sur sa timidité ? Quand il parle à un public, son énergie est bloquée au niveau du plexus. Vous lui demandez de se tenir plus droit et là vous gagnez des décibels, il se lâche, il commence à s'affirmer, il vous ferai presque peur ;) Et que dire d'une personne qui ne se sent pas empathique, normale elle est crispée comme un cailloux (première image qui me vient). Vous l'invitez à lâcher, créer du mou dans son corps et là, oh miracle la voix est douce et agréable ! A réfléchir ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1683750286416684917?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1683750286416684917/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1683750286416684917' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1683750286416684917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1683750286416684917'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2010/02/corps-et-guerison.html' title='Corps et guérison'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3431613034521788152</id><published>2010-02-16T00:45:00.000-08:00</published><updated>2010-02-16T06:01:27.774-08:00</updated><title type='text'>Changement d'âme</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/S3pdIZILK7I/AAAAAAAABJs/28pAjNJDh7A/s1600-h/desert"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/S3pdIZILK7I/AAAAAAAABJs/28pAjNJDh7A/s320/desert" border="0" alt=""id="BLOGGER_PHOTO_ID_5438761898768804786" /&gt;&lt;/a&gt;&lt;i&gt;"Entrer dans le désert, c'est changer d'âme"&lt;/i&gt;, Ben Gassem (nomade bédouin). Faire un treck dans le désert, c'est revenir à des besoins primaires, parcourir de grands espaces, goûter au silence. C'est un environnement propice au changement qui invite à l'exploration et à l'introspection. Ce qui m'intéresse aujourd'hui, c'est de savoir qu'est ce qui dans cet environnement singulier favorise ce changement:&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;La vision d'un grand espace permet une ouverture d'esprit, dans une approche plus globale&lt;/li&gt;
&lt;li&gt;La marche quotidienne et rythmée favorise la prise de conscience de son corps&lt;/li&gt;
&lt;li&gt;Le vide extérieur donne envie de faire un bilan de sa vie dans sa recherche de sens&lt;/li&gt;
&lt;li&gt;Le silence ouvre à l'introspection&lt;/li&gt;
&lt;li&gt;L'absence de but laisse la place au superflu&lt;/li&gt;
&lt;li&gt;Le partage de cette expérience avec d'autres personnes crée un lien particulier au sein du groupe, plus dans l'intimité&lt;/li&gt;
&lt;li&gt;Le temps n'existe plus, passé et futur disparaissent pour l'ici et maintenant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout dans le désert invite à utiliser l'hémisphère droit de son cerveau, dans son approche irrationnelle et holistique&lt;/p&gt;
&lt;p&gt;Je me demande à postériori si notre monde tel qu'il est actuellement n'est pas un frein à notre développement, voire nous éloigne de notre identité d'être humain. En quoi l'être humain d'il y a des millénaires devrait être si différent de celui d'aujourd'hui ?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3431613034521788152?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3431613034521788152/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3431613034521788152' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3431613034521788152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3431613034521788152'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2010/02/changement-dame.html' title='Changement d&apos;âme'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_I6qpNMiW2Ys/S3pdIZILK7I/AAAAAAAABJs/28pAjNJDh7A/s72-c/desert' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5780026728567822240</id><published>2009-12-17T02:01:00.000-08:00</published><updated>2010-01-12T15:27:09.372-08:00</updated><title type='text'>Soirée NLPNL - L'orientation Solution</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.art-de-changer.com/share/Image/Logo_NLPNL.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://blog.art-de-changer.com/share/Image/Logo_NLPNL.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388002885477399202" /&gt;&lt;/a&gt;&lt;p&gt;J'ai pu assister le 16 décembre à la soirée NLPNL de &lt;a href="http://www.nlpnl.eu/soirees.php?idRegion=5"&gt;Jean-Claude BEN EZRA sur l'Orientation Solution&lt;/a&gt;. Voici les principales choses que j'ai retenu.&lt;/p&gt;
&lt;p&gt;Même si l'approche orientée solution n'est pas nouvelle, elle n'en reste pas moins un outil puissant dans l'accompagnement au changement. A l'origine, cette approche était plutôt utilisée en thérapie familiale et étonnamment cette approche est peu développée en France dans les entreprises contrairement à nos pays voisins. En particulier, Jean-Claude nous indique qu'il est le seul Français à assister au réseau international de manière assidue sur le sujet.&lt;/p&gt;
&lt;p&gt;L'approche orientée solution utilise la &lt;a href="http://fr.wikipedia.org/wiki/Syst%C3%A9mique"&gt;systémique&lt;/a&gt; et le &lt;a href="http://fr.wikipedia.org/wiki/Constructivisme_%28psychologie%29"&gt;constructivisme&lt;/a&gt;: nous construisons la réalité quand nous la décrivons.&lt;/p&gt;
&lt;p&gt;Dans la soirée, nous avons pratiqué quelques exercices.&lt;/p&gt;
&lt;p&gt;Premier exercice entre deux acteurs A et B:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qu'apprécies-tu particulièrement dans ton travail ?&lt;/li&gt;
&lt;li&gt;Quels sont les avantages/bénéfices que tu souhaites retirer de cette conférence ? Quels changements se produiront dans vos relations ?&lt;/li&gt;
&lt;li&gt;Que souhaiteriez vous développer à partir de cette présentation ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partir du contenu des réponses, nous voyons que cet exercice nous fait nous projeter dans le futur et nous fait nous sentir bien, tout parait simple. A l'inverse, quand nous parlons des problèmes, les réflexes sont de chercher un bouc émissaire et ceci crée un sentiment de frustration. Cette approche n'évite pas le problème, il est là et nous allons le résoudre.&lt;/p&gt;&lt;p&gt;Par rapport au problème, qu'est ce qui a tout de même bien fonctionné ? Qu'est ce qui a fonctionné un peu mieux que d'habitude ? (compétences, acquis, relations, ...)&lt;/p&gt;&lt;p&gt;Une question magique en approche orientée solution est "Quoi d'autre ?", posée plusieurs fois.&lt;/p&gt;&lt;p&gt;Pour permettre au client de savoir comment il va s'assurer que la solution aura marché, une autre forme de question est: "Comment saurez vous demain soir que ces deux journées vous seront utiles ?","Que vous diront vos collègues ?", "Comment vous sentirez vous ?", "Qu'est ce qui aura changé ?"
&lt;/p&gt;&lt;p&gt;D'autres questions typiques orientées solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qu'est ce qui vous amène ici ?&lt;/li&gt;
&lt;li&gt;Que voulez vous ?&lt;/li&gt;
&lt;li&gt;Quel est le premier pas que vous voulez faire ?&lt;/li&gt;
&lt;li&gt;Qu'est ce qui fonctionne bien ?&lt;/li&gt;
&lt;li&gt;Si dans un coaching d'équipe, une équipe n'a pas respecté les consignes, une question possible est "Par rapport à la consigne, qu'est ce qui a bien fonctionné ?"&lt;/li&gt;
&lt;li&gt;A la place du problème qu'est ce qu'il y aurait ?&lt;/li&gt;
&lt;li&gt;Qu'est ce que je souhaite à la place du problème ?&lt;/li&gt;
&lt;li&gt;Qu'est ce que je veux à la place ?&lt;/li&gt;
&lt;li&gt;A la place, il faudrait quoi ?&lt;/li&gt;
&lt;li&gt;Nous connaissons le problème, malgré tout qu'est ce qui fonctionne bien ?&lt;/li&gt;&lt;/ul&gt;Quelques outils:

&lt;ul&gt;&lt;li&gt;Travailler sur les exceptions. Est ce toujours comme cela ? Y'a t-il eu un moment où ça allait mieux ?&lt;/li&gt;&lt;li&gt;L'échelle, une note de 1 à 10. Qu'est ce qui t'amène à 4 ? Je suis impressionné que vous ayez mis 4 avec tout ce que vous m'avez raconté. Quel est le premier petit pas pour passer à 5 ?&lt;/li&gt;&lt;li&gt;Boucle de cristal. Pendant la nuit, après avoir diné, le miracle s'est produit, votre problème est quasiment résolu. A quoi saurez vous que le problème est résolu ?&lt;/li&gt;&lt;li&gt;Dans le passé, il n'y a pas eu un moment où un miracle s'est produit ?&lt;/li&gt;&lt;li&gt;Le Compliment. Je suis impressionné que vous ayez fait cela, se lever, aller serrer la main. Comment avez vous fait ? Comment as tu fait pour réussir cela ? Quoi d'autre ?  Pour pouvoir faire cela, quelle qualité vous avez développé ?&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5780026728567822240?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5780026728567822240/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5780026728567822240' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5780026728567822240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5780026728567822240'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/12/jai-pu-assister-le-16-decembre-la.html' title='Soirée NLPNL - L&apos;orientation Solution'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1345046345863161679</id><published>2009-12-08T09:48:00.000-08:00</published><updated>2009-12-08T11:12:57.438-08:00</updated><title type='text'>Ses envies en vie</title><content type='html'>&lt;p&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YK-lsxsJwZA&amp;hl=fr_FR&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/YK-lsxsJwZA&amp;hl=fr_FR&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Partir de ses envies est la plus belle chose au monde, c'est se sentir &lt;b&gt;en vie&lt;/b&gt;. &lt;i&gt;"L'important n'est pas d'être mais de savoir être"&lt;/i&gt; nous dit &lt;a href="http://fr.wikipedia.org/wiki/Albert_Jacquard"&gt;Albert Jacquard&lt;/a&gt;. &lt;i&gt;"Pour faire un homme il faut des hommes"&lt;/i&gt;. &lt;i&gt;"Vivre c'est rencontrer l'autre"&lt;/i&gt;. &lt;i&gt;"Il n'y a que des différences, il n'y a pas de hiérarchie"&lt;/i&gt;. &lt;i&gt;"L'humanité nous transforme en personne responsable"&lt;/i&gt;. &lt;i&gt;"Sauver la vision des hommes qu'ils ont les uns des autres"&lt;/i&gt;. Il nous dit qu'il faut développer sa capacité à s'enrichir des autres. &lt;i&gt;"Il ne s'agit plus de l'emporter, il s'agit d'être"&lt;/i&gt;. &lt;i&gt;"Nous sommes dans la contrainte de construire l'humanité"&lt;/i&gt;. &lt;i&gt;"J'ai le devoir de ne pas être soumis"&lt;/i&gt;. &lt;i&gt;"Je me donne des leçons à moi-même en liaison avec les autres"&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Albert Jacquard nous indique une direction, cette direction du lien, de la rencontre et de la création. Il travaille dans le monde éducatif et au près des plus démunis. &lt;b&gt;Qu'en est-il du monde de l'entreprise ?&lt;/b&gt; Que se passera t'il si nous ne faisons rien dans ce monde ? Que peux t'il arriver ? Les personnes vont migrer et quitter ce monde alors que ce lieu est un endroit de rassemblement. Que se passera t'il si plus personne ne vit (ou n'a d'envie) dans ce contexte ? Où vont aller les envies ? Comment sera t-il possible de relier le "je" avec le "nous" et à quel endroit ?&lt;/p&gt;
&lt;p&gt;Je crois que le monde de l'entreprise reste un &lt;b&gt;lieu privilégié de rencontre et donc de création&lt;/b&gt;. Ce monde a bien changé depuis ses origines, il est devenu froid et sec, sans eau, sans lien. L'entreprise reste un lieu de projet collectif où il est possible de libérer ses envies pour rester en vie. Comment est-il possible de donner assez d'&lt;b&gt;espace&lt;/b&gt; ? Au sens symbolique, le lieu des origines, le lieu des réalisations, le lieu des énergies dissipatives où naissent d'imprévisibles ordres nouveaux.&lt;/p&gt;
&lt;p&gt;"L'espace symbolise un ensemble de coordonnées ou de repères, qui constitue un système mobile de relations, à partir d'un point, d'un corps, d'un centre quelconques, rayonnant sur x dimensions...".&lt;/p&gt;
&lt;p&gt;Il est donc possible de reconstruire à partir des origines, depuis l'aube des temps où il n'existait rien où ce rien était l'espace du tout.&lt;/p&gt;
&lt;p&gt;J'assistais aujourd'hui à une &lt;a href="http://www.nlpnl.eu/soirees.php?idRegion=5"&gt;journée NLPNL d'Andrée&lt;/a&gt; avec &lt;a href="http://www.art-de-changer.com"&gt;André de Châteauvieux&lt;/a&gt; sur &lt;i&gt;"l'outil du coach, c'est le coach"&lt;/i&gt;. Je me permets d'aller plus loin, &lt;i&gt;"l'outil de l'homme, c'est l'homme"&lt;/i&gt; et c'est bien dans la rencontre des envies que naissent la vie et les hommes... Pour atteindre cette étoile ou cette lune, il est possible d'accomplir un petit pas, &lt;i&gt;"un petit pas pour l’homme et un pas de géant pour l’humanité"&lt;/i&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Neil_Armstrong"&gt;Neil Armstrong&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1345046345863161679?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1345046345863161679/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1345046345863161679' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1345046345863161679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1345046345863161679'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/12/ses-envies-en-vie.html' title='Ses envies en vie'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6998882534523689513</id><published>2009-10-23T08:36:00.000-07:00</published><updated>2009-10-23T09:14:38.281-07:00</updated><title type='text'>Soirée NLPNL - Existe-t-il un « Mode d’Emploi de la Vie » ?</title><content type='html'>&lt;p&gt;J'ai une nouvelle fois assisté à une &lt;a href="http://www.nlpnl.eu/soirees.php?idRegion=5"&gt;conférence NLPNL de haut niveau&lt;/a&gt; présentée par Philippe Dupont Consultant Formateur PNL. Il nous a présenté son travail de 35 ans sur cette idée qu'il est possible d'avoir un mode d'emploi universel de la vie au même titre qu'un mode d'emploi pour un appareil photo. Philippe a répertorié un certain nombre de citations et concepts qui l'ont aidés dans sa construction et dans sa vision du monde.&lt;/p&gt;
&lt;p&gt;Les idées et convictions qui ont marqué mon attention:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;De base, nous avons envie de vivre, le spermatozoïde qui nous a conçu a vaincu 200 millions d'adversaires !&lt;/li&gt;
&lt;li&gt;le respect du corps est essentiel. "Plus le corps est faible, plus il commande. Plus il est fort, plus il obéit" (Rousseau)&lt;/li&gt;
&lt;li&gt;Le monde de nos perceptions. "Personne n'a jamais vu la réalité" (Walzlavick). Nous avons 5 sens qui sont limités et en plus nous avons un système de croyances qui nous filtre ce qu'on reçoit de l'environnement... Bref nous sommes forcément bien loin de connaître la vérité, s'il y en a une.&lt;/li&gt;
&lt;li&gt;Nous sommes seuls à vivre notre propre présent. La lumière de la lune met 1,3s pour nous parvenir. Quand nous voyons quelqu'un, nous avons une vision du passé de lui: 0,000003s après&lt;/li&gt;
&lt;li&gt;Les mots sont subjectifs. "Le mot chien ne mort pas" (James)&lt;/li&gt;
&lt;li&gt;Nous ne pouvons pas nous comprendre, nous ne pouvons pas être d'accord car personne n'est capable de percevoir ce que l'autre a perçu.&lt;/li&gt;
&lt;li&gt;Nous mettons un sens aux événements qui nous arrivent et c'est là que nous choisissons d'être en colère, triste ou heureux. Nous sommes responsables ce que l'on vit. Nous sommes responsables de ce qui nous arrive&lt;/li&gt;
&lt;li&gt;Chaque homme est à la recherche de plus de plaisir. Pour avoir plus de plaisir, c'est simple, il faut le vouloir.&lt;/li&gt;
&lt;li&gt;Le bonheur, c'est facile, c'est une décision&lt;/li&gt;
&lt;li&gt;Le premier pas est la moitié du chemin&lt;/li&gt;
&lt;li&gt;L'émetteur dans une communication est responsable de la reformulation.&lt;/li&gt;
&lt;li&gt;C'est dans la réponse qu'on a le sens de la question&lt;/li&gt;
&lt;li&gt;L'autre est une chance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La phrase qui m'a le plus marqué et qui pour moi est la base du plaisir, c'est &lt;b&gt;"quand on fait quelque chose, on le fait bien"&lt;/b&gt;. C'est la base de l'ici et le maintenant, être présent dans ce qu'on fait, dans son corps, dans le faire.&lt;/p&gt;
&lt;p&gt;Une bien belle soirée qui ne peut pas laisser insensible, une soirée qui a certainement permis à chacun de s'ouvrir sur le monde et sur soi.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6998882534523689513?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6998882534523689513/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6998882534523689513' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6998882534523689513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6998882534523689513'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/10/soiree-nlpnl-existe-t-il-un-mode.html' title='Soirée NLPNL - Existe-t-il un « Mode d’Emploi de la Vie » ?'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3525548239080397029</id><published>2009-10-02T06:54:00.000-07:00</published><updated>2009-10-08T10:29:29.958-07:00</updated><title type='text'>Soirée NLPNL - Approche systémique coopérative</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.art-de-changer.com/share/Image/Logo_NLPNL.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://blog.art-de-changer.com/share/Image/Logo_NLPNL.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388002885477399202" /&gt;&lt;/a&gt;
&lt;p&gt;J'ai assisté à une première soirée de l'association &lt;a href="http://www.nlpnl.eu/accueil.php"&gt;NLPNL&lt;/a&gt;. J'ai connu cette association à partir d'&lt;a href="http://blog.art-de-changer.com/index.php?2009/09/13/127-comme-une-carte-gourmande"&gt;un article de blog d'André de Châteauvieux&lt;/a&gt;. La soirée était animée par &lt;a href="http://balta.fmw1.com/"&gt;François Balta&lt;/a&gt; sur l'approche systémique coopérative.&lt;/p&gt;&lt;p&gt;Il commence sa présentation en disant qu'on voudrait que dans notre vie, tout aille bien et la vie est pourtant bien un paradoxe: Le bien / le mal, le développement / la régression, le plaisir / la souffrance. La systémique est un outil d'intégration des opposés, on est dans le ET et non dans le OU. François Balta nous parle de l'historique des approches thérapeutiques: thérapies orientées solution, stratégiques, narratives, provocatrices. L'essentiel pour lui est que l'on est dans une COOPERATION à la fois actif et passif en même temps.&lt;/p&gt;
&lt;ul&gt;Les phrases qui m'ont interpelé:
&lt;li&gt;"vouloir sortir de la contradiction, c'est se mutiler"&lt;/li&gt;
&lt;li&gt;"la tension nous fait exister"&lt;/li&gt;
&lt;li&gt;"Comment puis-je définir les autres sans moi, et moi sans les autres ?"&lt;/li&gt;
&lt;li&gt;"On se regarde par le regard des autres"&lt;/li&gt;
&lt;li&gt;"le marquage par le corps"&lt;/li&gt;
&lt;li&gt;"Le sens n'est jamais dans les mots mais dans le lien entre l'objet et le contexte"&lt;/li&gt;
&lt;li&gt;"Le plus petit changement tripote les valeurs"&lt;/li&gt;
&lt;li&gt;"Nous avons besoin de vérifier chez les autres nos croyances"&lt;/li&gt;
&lt;li&gt;"Le plaisir d'exister dans l'acceptation de l'émotion"&lt;/li&gt;
&lt;li&gt;"Chacun fait de son mieux"&lt;/li&gt;
&lt;li&gt;"L'estime de soi se construit dans le don"&lt;/li&gt;
&lt;li&gt;"Le changement c'est aussi ne pas changer"&lt;/li&gt;
&lt;li&gt;"La liberté de parler, c'est le droit de se taire"&lt;/li&gt;
&lt;li&gt;"La solution est un problème, le problème est une solution"&lt;/li&gt;
&lt;li&gt;"Chaque solution vient avec des inconvénients"&lt;/li&gt;
&lt;li&gt;"Changer pour trouver un meilleur équilibre global"&lt;/li&gt;
&lt;li&gt;"L'intervenant, thérapeute, coach a un pouvoir d'influence mais ne sait pas comment ça va changer"&lt;/li&gt;
&lt;li&gt;"Y'a pas de resistance sans insistance"&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Après cette intervention, j'ai envie de creuser des sujets comme le cycle du &lt;a href="http://fr.wikipedia.org/wiki/Don_%28offrande%29"&gt;don&lt;/a&gt; et l'&lt;a href="http://www.renaissance65.fr/limpermanence.html"&gt;impermanence&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J'ai trouvé très intéressant sa vision des &lt;a href="http://www.interaction-et-changement.fr/2-natures-de-changements.html"&gt;changements de type 1 et type 2&lt;/a&gt;, comment puis-je savoir que mon client est un changement de type 2 puisque je suis moins même dans une relation avec mon propre système de croyance, ça n'a pas de sens. De même, parler de &lt;a href="http://www.enneagramme-envolutif.com/documents/article-enneagramme-niveaux-logiques.html"&gt;niveaux logiques&lt;/a&gt; n'a pas de sens, si on admet que tout est circulaire (à l'image de la torsade de papier qui n'a ni début, ni fin, ni pile, ni face)&lt;/p&gt;&lt;p&gt;J'ai apprécié son utilisation d'un langage simple et paradoxal, probablement que j'achèterai son livre &lt;a href="http://www.amazon.fr/syst%C3%A9mique-avec-mots-tous-jours/dp/2710119978"&gt;La systémique avec les mots de tous les jours&lt;/a&gt;. Suite à cette présentation, je remets en cause les outils que j'utilise comme les rôles délégués comme outil, à la fois dans son vocabulaire, dans son application, est-ce vraiment utile ? Est-ce écologique ? Est-ce une solution et un problème ?&lt;/p&gt;
&lt;p&gt;J'ai beaucoup appris, surtout que je ne savais rien et que le chemin du coaching est long et probablement jamais terminé !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3525548239080397029?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3525548239080397029/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3525548239080397029' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3525548239080397029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3525548239080397029'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/10/soiree-nlpnl-approche-systemique.html' title='Soirée NLPNL - Approche systémique coopérative'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1985695097569498373</id><published>2009-09-02T09:22:00.000-07:00</published><updated>2009-09-02T09:49:56.883-07:00</updated><title type='text'>Between stimulus and response</title><content type='html'>&lt;p&gt;&lt;i&gt;"Between stimulus and response, you have freedom to choose"&lt;/i&gt; - Stephen R. Covey - The 7 habits of highly effective people.&lt;/p&gt;
&lt;p&gt;Nous n'avons pas la possibilité naturelle de voler comme des oiseaux, de transformer du gaz carbonique en oxygène comme les arbres mais nous avons bien plus de pouvoir que ça, nous sommes libres de choisir, c'est bien ce qui nous différencie des autres êtres vivants.&lt;/p&gt;
&lt;p&gt;Un individu, une équipe ou une organisation sont capables de choisir le sens qu'ils veulent donner mais bien souvent ils ne prennent pas cette chance. Scott Peck, dans le chemin le moins fréquenté, nous dit que c'est par paresse que nous refusons de changer, par peur de la souffrance. Prendre conscience de ces émotions, de son intuition, des éléments factuels à chaque décision paraît impossible pour beaucoup.&lt;/p&gt;
&lt;p&gt;La base du coaching est bien de permettre cette &lt;b&gt;prise de conscience&lt;/b&gt; (ou META) à son coaché. Chaque individu porte en lui toutes les compétences inscrites dans l'&lt;a href="http://fr.wikipedia.org/wiki/Inconscient_collectif"&gt;inconscient collectif&lt;/a&gt;, il peut changer sa vision de la réalité, prendre les opportunités qui lui sont présentées et accepter la difficulté de se remettre en question.&lt;/p&gt;&lt;p&gt;Je constate que c'est souvent les &lt;b&gt;émotions qui nous bloquent ou nous libèrent&lt;/b&gt;, apprendre à les ressentir et les accepter est probablement une des première voie vers la prise de conscience et la liberté de choisir dont nous parle Covey.&lt;/p&gt;
&lt;p&gt;D'une certaine façon, je n'ai pas l'impression que l'on change vraiment, on reste biologiquement toujours pareil, nous ressentons toujours les mêmes émotions, de la même façon. Ce qui change c'est notre réaction par rapport à une émotion. Une personne stressée dans les transports ne sera plus stressée dans les transports non pas parce qu'elle ne prend plus les transports mais parce qu'elle aura appris à accepter les émotions qu'elle ressent quand elle se trouve près d'autres personnes et à accepter les émotions et les comportements des autres dans ce contexte stressant.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1985695097569498373?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1985695097569498373/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1985695097569498373' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1985695097569498373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1985695097569498373'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/09/between-stimulus-and-response.html' title='Between stimulus and response'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8574613541327148534</id><published>2009-09-02T03:01:00.000-07:00</published><updated>2009-09-02T08:43:19.010-07:00</updated><title type='text'>Yin et Yang</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/Sp5FoIVMuQI/AAAAAAAAAoo/f4aGF54bmps/s1600-h/yin_yang.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 60px; height: 60px;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/Sp5FoIVMuQI/AAAAAAAAAoo/f4aGF54bmps/s320/yin_yang.jpg" alt="" id="BLOGGER_PHOTO_ID_5376811560860432642" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;J'observe que j'utilise de plus en plus la symbolique du &lt;a href="http://fr.wikipedia.org/wiki/Yin_et_yang"&gt;Yin et du Yang&lt;/a&gt; dans mes discussions avec les autres et pour moi quand je sens un manque d'équilibre.&lt;/p&gt;&lt;p&gt;La vie parisienne me semble être plutôt Yang:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Nous sommes poussés à l'&lt;b&gt;activité&lt;/b&gt;, qui se traduit par les transports, le bruit perpétuel, faire du business, une société de consommation où l'on veut tout tout de suite, j'ai un problème il me faut une solution tout de suite. Je m'étonne parfois que mes clients demandent à ce que leur conflits se résolvent en deux heures après une séance de team building alors qu'ils trainent depuis plusieurs années. C'est souvent cette envie d'activité, cette "manie" qui les amènent dans une confusion dans leurs réunions, le séquencement de leur réunion, leur organisation et leur prise de décisions. Cette phrase "Nous n'avons pas le temps" est anxiogène, elle pousse à une dé-responsabilisation. Au mieux, j'explique la &lt;a href="http://fr.wikipedia.org/wiki/Loi_de_Pareto"&gt;loi de Pareto&lt;/a&gt; à mes clients que 20% des actions qu'ils vont faire va donner 80% des résultats. Le jeu est donc bien de trouver les bonnes actions à faire et pas d'en faire le plus possible.&lt;/li&gt;
&lt;li&gt;Nous cherchons la &lt;b&gt;lumière&lt;/b&gt;, surtout parce que nous avons peur de l'obscurité. Cette lumière se traduit par les pubs pleines de couleurs, par l'envie de succès sans souffrance, tout doit être simple, clair. Nous devons vivre dans un monde merveilleux qui est irréel. La lumière me fait penser aussi à ce chemin, cette direction bien claire qui ne doit pas changer, le chemin est tout tracé. Et pourtant le chemin est complexe et paradoxal, chaque problème est potentiellement une solution et chaque solution est potentiellement un problème.&lt;/li&gt;
&lt;li&gt;La &lt;b&gt;raison&lt;/b&gt; domine. Nous voulons des chiffres, compter les jours passés. Nous voulons des analyses, comprendre tous les faits, avoir toutes les informations, tout savoir car si nous avons toutes les informations, nous savons tout, nous maîtrisons. Nous pensons que pour chaque situation, il y a une cause précise, c'est la faute de ...&lt;/li&gt;
&lt;li&gt;L'&lt;b&gt;expansion&lt;/b&gt; est partout et voulue. J'en veux toujours plus. Je veux toujours plus de choses nouvelles. Des outils nouveaux, encore plus de technologie...&lt;/li&gt;
&lt;li&gt;Le &lt;b&gt;masculin&lt;/b&gt; domine. Dans mon monde et avec mes œillères, j'observe que même les femmes ont une tendance "Dominatrice" au sens &lt;a href="http://en.wikipedia.org/wiki/DISC_assessment"&gt;DISC&lt;/a&gt;, plus masculine que féminine. Ces femmes s'habillent comme des hommes et se retrouvent parfois à aller en thérapie pour trouver (retrouver) leur féminité. Elles parlent vite, elles donnent des ordres, elles dirigent de façon militaire. Cette tendance pousse même les hommes à devenir plus féminin, sans forcément parler d'homosexualité.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;Le Yin est beaucoup moins visible et apprécié. Il est profond, sombre, obscur, solitaire, flexible, non-manifesté.
&lt;li&gt;La &lt;b&gt;profondeur&lt;/b&gt; se traduit par une prise de recul, une prise de conscience en se laissant un espace temps plus long pour ressentir progressivement ce qui se passe. Le "Connais toi toi même" de Socrate ne peut se réaliser qu'en profondeur avec le temps. Il est possible que la profondeur soit rendue accessible par la solitude, ce qui nécessite de trouver un espace sans bruit sans doute dans un milieu naturel.
&lt;/li&gt;&lt;li&gt;La difficulté de se trouver seul est de ressentir de la peur, du vide, de se voir réellement, d'aller vers notre côté &lt;b&gt;obscur&lt;/b&gt;. En développant notre Yin, nous sommes bien loin du monde tout beau, tout propre. L'objectif n'est pas de lutter mais de voir, d'accepter et parfois d'agir en toute conscience.&lt;/li&gt;
&lt;li&gt;Dans le Yin, la &lt;b&gt;flexibilité&lt;/b&gt; est présente contrairement au chemin bien tracé du Yang. On se laisse constamment la possibilité de changer mais en tout conscience. C'est frustrant pour notre Yang, ça demande de réfléchir et de prendre une décision.&lt;/li&gt;
&lt;li&gt;Prendre en compte le &lt;b&gt;non-manifesté&lt;/b&gt;, c'est admettre que les choses nous dépassent, c'est admettre la complexité. Ça nous rend humble tout simplement. Le non-manifesté est presque imperceptible. Pour moi, il est relié au phénomène de &lt;a href="http://fr.wikipedia.org/wiki/Synchronicit%C3%A9"&gt;synchronicité&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;La &lt;b&gt;féminité&lt;/b&gt; se traduit par une plus grande douceur, un calme plus important, une maîtrise de ses émotions, ainsi que par une plus grande écoute des autres.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il faut du Yin et du Yang pour mieux vivre et être dans la réalité. Dans un monde plutôt Yang, il faut donc chercher à développer son Yin: par la méditation (la pratique de la &lt;a href="http://www.sophrologie-formation.fr/"&gt;Sophrologie&lt;/a&gt; par exemple), les ballades en forêt, la marche lente, le plaisir de cuisiner, d'écouter les autres sans juger et ne rien attendre.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8574613541327148534?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8574613541327148534/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8574613541327148534' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8574613541327148534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8574613541327148534'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/09/yin-et-yang.html' title='Yin et Yang'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_I6qpNMiW2Ys/Sp5FoIVMuQI/AAAAAAAAAoo/f4aGF54bmps/s72-c/yin_yang.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6719528345864194400</id><published>2009-09-02T02:14:00.000-07:00</published><updated>2009-09-02T02:56:15.906-07:00</updated><title type='text'>L'éloge de la lenteur</title><content type='html'>&lt;p&gt;&lt;object width="400" height="220"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5404563&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=5404563&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="220"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/5404563"&gt;coaching &amp; hygiène de vie&lt;/a&gt; from &lt;a href="http://vimeo.com/user413270"&gt;coach &amp;amp; moi et Art de Changer&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Ralentir pourrait être perçu comme de la paresse ou de l'incompétence, c'est pourtant une discipline de chaque instant. Le coaching est avant tout dans &lt;b&gt;l'ici et maintenant&lt;/b&gt;. Comment puis-je être présent si je ne suis pas reposé ? Comment puis-je être présent si je n'ai pas nourri mon intuition par la solitude ? Comment puis-je être présent si je ne suis pas à l'écoute de mon corps, de mes émotions et du monde (synchronicité) ? C'est sans doute en cela que l'hygiène du coach est nécessaire...&lt;/p&gt;
&lt;p&gt;Et si on en avait tous besoin ?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6719528345864194400?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6719528345864194400/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6719528345864194400' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6719528345864194400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6719528345864194400'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/09/leloge-de-la-lenteur.html' title='L&apos;éloge de la lenteur'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5850868066516297257</id><published>2009-08-17T15:06:00.001-07:00</published><updated>2009-08-17T15:35:36.107-07:00</updated><title type='text'>Le chemin le moins fréquenté</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.fr/chemin-moins-fr%C3%A9quent%C3%A9-Apprendre-vivre/dp/2290342548/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1250546827&amp;amp;sr=8-1"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 202px; height: 202px;" src="http://ecx.images-amazon.com/images/I/51DNCKP467L._SS500_.jpg" alt="" border="0" /&gt;&lt;/a&gt;
Je ne me voyais pas lire ce livre, un livre de psychiatre qui va m'entraîner dans des histoires de patients schizophrènes, névrosés, ... Sachant que j'ai peur de la folie, j'évite. Pourtant ce livre m'a été conseillé et même prêté par une personne en qui j'ai confiance, alors pourquoi pas ? Je crois à la coincidence, je regarde la bibliothèque et voit ce livre qui m'attends. Je commence, j'aime le style simple et direct et puis ça commence, chaque paragraphe fait sens, fait écho à ce que je vis, à mon accompagnement d'équipes. Le livre commence par "La vie est difficile", l'auteur &lt;a href="http://en.wikipedia.org/wiki/M._Scott_Peck"&gt;Scott Peck&lt;/a&gt; parle de souffrance, de liberté, de responsabilité, de vérité, de réalité. Je viens de finir la page 48. Je feuillette et je vois le titre d'un paragraphe suivant: "La dépression, preuve de santé"... De quoi attisait ma curiosité. En quelques paragraphes, je n'ai jamais été autant "baffé" que depuis ma lecture de &lt;a href="http://jfhelie.blogspot.com/2007/08/methodesagiles7habits.html"&gt;7 habits for effective people&lt;/a&gt;. (Étrange, en le relisant, je me souviens que c'est cet article qui m'a relié à &lt;a href="http://www.octo.com"&gt;Octo&lt;/a&gt;). J'en suis déjà transformé, mes confrontations avec les équipes que j'accompagne seront sans doute différentes... Ma relation avec la souffrance aussi... Mon existence... Bref une lecture pour lecteurs en quête de sens. Sans doute un classique à lire.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5850868066516297257?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5850868066516297257/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5850868066516297257' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5850868066516297257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5850868066516297257'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/08/le-chemin-le-moins-frequente.html' title='Le chemin le moins fréquenté'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6779155561798490359</id><published>2009-08-17T11:03:00.000-07:00</published><updated>2009-08-17T12:01:32.409-07:00</updated><title type='text'>Posture de partage</title><content type='html'>&lt;p&gt;Qu'est ce qui va se passer dans le comité de pilotage d'aujourd'hui ? J'en sais rien, je ne prévois rien, je me rends disponible c'est tout. J'arrive en avance pour parler avec différents membres de ce comité de manière empathique. La magie de l'écoute empathique est là, je ne suis pas sur le contenu, plus sur comment les choses sont dites et encore plus sur le sens et la résonance des messages. En quelques minutes de discussion, un mot me vient en tête: "intégration". Intégration de quoi ? Du logiciel, du travail des équipes, des partenaires, intégration des membres de l'équipe dans l'équipe, quel est le lien entre intégration et intégrité ?&lt;/p&gt;
&lt;p&gt;Le comité de pilotage commence, l'échange se fait avec une personne en distribué à l'aide d'une webcam. Le partage de la connexion est difficile mais se fait finalement. Les personnes qui étaient partis en vacances raccrochent rapidement les morceaux suite à 30 minutes de partage d'informations. "Les comptes rendus des deux dernières réunions ne m'ont pas été transmis ?". Je me dis, ce comité est lié au &lt;b&gt;partage&lt;/b&gt; (&lt;a href="http://jfhelie.blogspot.com/2009/08/le-sens.html"&gt;comme un précédent était lié au vide&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Le sujet intégration est abordé plusieurs fois, je sens que la confrontation se rapproche, la tension émotionnelle monte, le moment est venu pour confronter et partager ma position.&lt;/p&gt;
&lt;p&gt;30 minutes sont accordées pour que chacun partage ses obstacles actuels. Je sors de ma position META habituelle (qui était 10 minutes en fin de réunion) pour entrer dans la confrontation et pose la question: "Qu'est ce qui est intégré maintenant ?", j'ai 1/10 à cette question. Le choc est là et d'autres questions toutes aussi lourdes s'ensuivent. "Que retire t'on pour tenir le délai ?", pour la première fois depuis le début, cette question est enfin posée, la réalité est enfin acceptée: "Nous n'arriverons pas à faire tout ça dans les temps impartis, nous devons trouver une solution".&lt;/p&gt;
&lt;p&gt;Et tic (comme déclic, le changement arrive soudainement), la co-construction peut enfin avoir lieu. Nous acceptons la réalité, la complexité et la difficulté. 5 questions profondes en tout à résoudre en 30 minutes. Cette équipe l'a fait. Le plan d'actions sera suivi.&lt;/p&gt;
&lt;p&gt;La posture du coach peut (doit ?) changer au cours du coaching, une posture d'observateur au début, avec des feedbacks sur le fonctionnement de l'équipe, puis une posture plus de confrontation, une fois que la confiance avec l'équipe est là. L'équipe peut alors profiter de l'intuition du coach, de sa vision systémique pour aller encore plus loin et dépasser ses peurs et ses angles morts.&lt;/p&gt;
&lt;p&gt;Je pense à la &lt;a href="http://fr.wikipedia.org/wiki/Loi_de_Pareto"&gt;loi de Pareto&lt;/a&gt; et me dis que cette équipe vient de faire les 20% qu'elle devait faire pour atteindre son objectif jusqu'ici inatteignable.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6779155561798490359?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6779155561798490359/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6779155561798490359' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6779155561798490359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6779155561798490359'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/08/posture-de-coach.html' title='Posture de partage'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6615880549567189459</id><published>2009-08-10T11:42:00.000-07:00</published><updated>2009-08-17T13:23:09.867-07:00</updated><title type='text'>Se détacher de l'objectif</title><content type='html'>&lt;p&gt;J'ai pratiqué le tennis en compétition pendant longtemps. Beaucoup de tennis men vous dirons qu'ils ont "peur de perdre". Après chaque point perdu, c'est la remise en cause, pourquoi ai-je mis cette balle dehors ? Et plus on se pose la question, plus on perd de points. Pendant longtemps j'ai pratiqué le tennis de cette façon, mes progrès étaient lents et surtout cela me procurait beaucoup de frustration. Un jour, j'ai compris que ce n'était pas que les balles soient fautes qui étaient importants, c'était que je reste concentré. Rester concentré m'apportait plus de bien-être, me permettait de me détacher de l'objectif et paradoxalement de l'atteindre plus facilement. Je me concentrais donc sur les coutures de la balle de tennis ou sur le fait que chaque balle devait être 1 mètre au dessus du filet.&lt;/p&gt;
&lt;p&gt;Certaines équipes vivent la même chose, elles sont bloquées car elles n'acceptent pas de faire des erreurs, elles sont bloquées au point de ne plus faire du tout. Souvent, il est nécessaire de détacher l'équipe de son objectif pour qu'elle se transforme. C'est un instant qui lui permet de &lt;b&gt;lâcher prise&lt;/b&gt;, de prendre conscience de son potentiel, de se libérer et de revenir à la réalité dans un tout autre état d'esprit où l'obstacle n'existe plus. Ceci peut être activé en faisant jouer l'équipe sur autre chose par une activité sollicitant son cerveau droit (dessin, histoires, photos, émotions, construction, peintures, ...) et lui demandait de faire le lien avec ce qu'elle vit en ce moment sur son projet. "Nous avons tel obstacle dans le projet". "Humm, il me semble que vous l'avez levé pendant le jeu ?"... Tic&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6615880549567189459?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6615880549567189459/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6615880549567189459' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6615880549567189459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6615880549567189459'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/08/se-detacher-de-lobjectif.html' title='Se détacher de l&apos;objectif'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4371548328862144376</id><published>2009-08-03T12:04:00.000-07:00</published><updated>2009-08-17T15:31:55.177-07:00</updated><title type='text'>Le sens</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/41JDCCZJ1AL._SL500_AA240_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/41JDCCZJ1AL._SL500_AA240_.jpg" alt="" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;J'accompagne une équipe projet dans son développement. Cette équipe fait des progrès extraordinaires en l'espace de deux semaines. Deux équipes qui ne se parlaient pas se parlent et choisissent collectivement qu'est ce qu'ils vont faire pour dans un mois. L'énergie est au rendez-vous et tout semble être parti pour le mieux. L'équipe affronte ses peurs et les dépasse. Le comité projet qui a lieu toutes les semaines fait de réels progrès, les rôles sont délégués, plan d'actions, gestion des risques... Et pourtant il manque quelque chose, je suis en META dans une réunion de ce comité et là je ne prends aucune note sur mon carnet de notes, la page devient vide. Coïncidence ou phénomène de synchronicité, la place du PDG présent habituellement est &lt;b&gt;vide&lt;/b&gt;, il est parti en vacances. Dans cette réunion, je ne reçois plus l'énergie habituelle, encore du vide... Du coup, je me demande à quoi sert cette réunion et là je ressent encore du vide, quel est le sens à tout ça ? A quoi ça sert ? Pour quoi faire ? J'exprime mon ressenti à l'équipe et lui demande un retour, je n'ai pas de réponse hormis le fait qu'ils sont rassurés de voir que les choses avancent.&lt;/p&gt;
&lt;p&gt;Le responsable absent (le PDG) porte le sens, un sens qu'il n'a pas partagé et qui reste caché comme un trésor perdu dans les profondeurs. Bien que l'équipe est une vision du produit à construire, tout parait vide, presque irréel.&lt;/p&gt;
&lt;p&gt;Le sens nourrit, fait vivre et il ne serait en être autrement. Sans sens, une équipe ne peut pas se dépasser. Au delà de son objectif, le sens est sa finalité&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4371548328862144376?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4371548328862144376/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4371548328862144376' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4371548328862144376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4371548328862144376'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/08/le-sens.html' title='Le sens'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4344370570984417199</id><published>2009-07-03T13:37:00.000-07:00</published><updated>2009-10-08T10:42:10.814-07:00</updated><title type='text'>Accompagnement agile, une aberration ?</title><content type='html'>Je me retrouve souvent à accompagner des clients vers l'agilité en tant que "coach agile". Ce mot "coach agile" est un oxymore; agile veut dire méthode agile, qui veut dire expert/formateur à la méthode; un coach est bien différent d'un expert; en particulier il n'y a pas de dépendance qui s'installe entre le client et le prestataire et de prises de décisions faites par le prestataire pour le client. Bref, tout ça pour dire qu'il y a un truc qui déconne dans l'accompagnement agile.
J'ai un client qui veut que ses équipes travaillent avec les méthodes agiles. Qu'est ce qu'on fait ? On forme ses équipes projet, c'est à dire qu'on leur fait faire une formation de 3-5 jours sur les méthodes agiles, voilà, et puis c'est tout. Oui mais il y a LA réticence au changement. Quelle réticence ? Pour quel changement ? Ha oui, l'équipe n'est pas performante en appliquant cette méthode. Est ce vraiment dû à la méthode ? N'est ce pas dû au fait que l'équipe vient de se former... Une équipe qui se forme n'est pas efficace quelque soit la méthode. Certes les méthodes agiles regroupent de bonnes pratiques de développement liées au bon sens. Tout ça reste assez simple. Par contre, c'est d'avoir une équipe performante qui peut devenir compliqué. Et c'est là que le coaching d'équipe a tout son intérêt. Une équipe performante est une équipe qui est capable de se transformer.

Et pourquoi pas revoir notre copie "agilistes", faire des formations agiles (&lt;a href="http://fr.wikipedia.org/wiki/Scrum"&gt;Scrum&lt;/a&gt; et &lt;a href="http://fr.wikipedia.org/wiki/Test_Driven_Development"&gt;TDD&lt;/a&gt; par exemple), puis coacher l'équipe (sans méthode) ? Est ce que ça ne serait pas plus efficace ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4344370570984417199?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4344370570984417199/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4344370570984417199' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4344370570984417199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4344370570984417199'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/07/accompagnement-agile-une-aberration.html' title='Accompagnement agile, une aberration ?'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-9069025819159674751</id><published>2009-06-18T23:39:00.000-07:00</published><updated>2009-06-18T23:51:06.056-07:00</updated><title type='text'>Université du SI 2009</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.universite-du-si.com/public/img/logo_usi.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 91px; height: 113px;" src="http://www.universite-du-si.com/public/img/logo_usi.jpg" border="0" alt="" /&gt;&lt;/a&gt;
Le 1er et 2 juillet aura lieu pour la 2 fois l'&lt;a href="http://usi2009.universite-du-si.com/index.php?newlang=fra&amp;amp;module=Pagesetter&amp;amp;tid=1&amp;amp;tpl=list-intro"&gt;Université du SI.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;a href="http://agenda.usi2009.com/img/programme_usi2009.pdf"&gt;programme&lt;/a&gt; toujours aussi riche et des keynotes de qualité.&lt;/p&gt;
&lt;p&gt;Je ferai une session: &lt;a href="http://usi2009.universite-du-si.com/Jean.Francois-Helie-1-37.html"&gt;"Styles sociaux en action !"&lt;/a&gt; basée sur le modèle Herrmann avec Bernard Notariani&lt;/p&gt;
&lt;p&gt;Il reste des places alors n'hésitez pas à vous inscrire: &lt;a href="http://usi2009.universite-du-si.com/?module=Users&amp;func=register&amp;newlang=fra"&gt;&lt;--&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-9069025819159674751?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/9069025819159674751/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=9069025819159674751' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/9069025819159674751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/9069025819159674751'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/06/universite-du-si-2009.html' title='Université du SI 2009'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8979058559994991189</id><published>2009-06-15T04:51:00.000-07:00</published><updated>2009-06-15T05:00:55.845-07:00</updated><title type='text'>L'art de coacher</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/4125QGY1J1L._SL500_AA240_.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/4125QGY1J1L._SL500_AA240_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Je conseille vivement ce livre à tous ceux qui veulent en connaître un peu plus sur le coaching... Un livre émouvant qui pose les limites dans les relations humaines et toute la fragilité du coach.&lt;/p&gt;
&lt;p&gt;La suite sur le &lt;a href="http://www.cooprh.com/pratiques-narratives/"&gt;blog de l'auteur&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8979058559994991189?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8979058559994991189/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8979058559994991189' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8979058559994991189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8979058559994991189'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/06/lart-de-coacher.html' title='L&apos;art de coacher'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5063071467420195611</id><published>2009-06-12T08:06:00.000-07:00</published><updated>2009-08-03T13:42:32.795-07:00</updated><title type='text'>Une bonne leçon de leadership</title><content type='html'>&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/GA8z7f7a2Pk&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/GA8z7f7a2Pk&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Wooaaah ou comment une chose extraordinaire se produit ?&lt;/p&gt;
&lt;p&gt;C'est l'histoire de 2 initiateurs qui ont une idée innovante et qui s'élargit à partir d'un troisième à tout une foule.&lt;/p&gt;
&lt;p&gt;Le changement dans une grande équipe, dans une organisation se produit à partir de 3 ??&lt;/p&gt;
&lt;p&gt;Mon interprétation:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les deux premiers sont des créatifs avec un faible niveau d'interactions avec d'autres.&lt;/li&gt;&lt;li&gt;Le troisième a beaucoup d'influence dans ses relations interpersonnelles (ou pas), car d'autres personnes avec qui il a des liens semblent l'accompagner juste après&lt;/li&gt;&lt;li&gt;Le changement se produit car ils sont trois, deux ne suffirait pas
&lt;/li&gt;
&lt;li&gt;Il reste toujours des sceptiques&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Peut être une mise en évidence du &lt;a href="http://changingminds.org/disciplines/leadership/followership/followership.htm"&gt;Followership&lt;/a&gt; ?&lt;/p&gt;
&lt;p&gt;Merci &lt;a href="http://www.notarianni.org/"&gt;Bernard&lt;/a&gt; pour le lien et à &lt;a href="http://sethgodin.typepad.com/seths_blog/2009/06/guy-3.html"&gt;Seth Godin&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5063071467420195611?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5063071467420195611/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5063071467420195611' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5063071467420195611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5063071467420195611'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/06/une-bonne-lecon-de-leadership.html' title='Une bonne leçon de leadership'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-965843695049509367</id><published>2009-06-09T05:36:00.000-07:00</published><updated>2009-06-09T08:28:53.040-07:00</updated><title type='text'>Spirale Dynamique</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/41tVV2swP8L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU08_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/41tVV2swP8L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU08_.jpg" border="0" alt="" /&gt;&lt;/a&gt;Suite à un commentaire sur l'article précédent, je me suis intéressé à la théorie de la dynamique en spirale, j'ai donc acheté le bouquin &lt;a href="http://www.amazon.fr/Spirale-Dynamique-Comprendre-sorganisent-pourquoi/dp/2100515217/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1244551953&amp;amp;sr=8-1"&gt;Spirale Dynamique&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;
Je savais par intuition que ce livre m'apporterait quelque chose de nouveau. La théorie regroupe la notion de cycle de la &lt;a href="http://fr.wikipedia.org/wiki/Gestalt-th%C3%A9rapie"&gt;Gestalt, &lt;/a&gt;la vision holistique de la &lt;a href="http://fr.wikipedia.org/wiki/Syst%C3%A9mique"&gt;systémie&lt;/a&gt; et la &lt;a href="http://fr.wikipedia.org/wiki/Pyramide_des_besoins"&gt;pyramide des besoins de Maslow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La théorie de la dynamique en spirale suppose que les changements importants de la vie (changement de type 2 en systémie) d'une entité (individu, organisation, pays, ...) se font sur les valeurs profondes. Les changements passent par plusieurs étapes qui sont liées les unes aux autres et cycliques. Cette théorie se rapproche aussi de la notion de stades de développement d'une équipe ou d'une organisation. En particulier, je retrouve en terme d'organisation le niveau de maturité des entreprises (institutionnelles, expertes, humanistes, en réseau) présentées par Alain Cardon dans &lt;a href="http://www.amazon.fr/Coaching-d%C3%A9quipe-Alain-Cardon/dp/270812885X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1244552439&amp;amp;sr=8-1"&gt;Coaching d'équipe&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;C'est quoi cette théorie ?&lt;/h2&gt;
&lt;p&gt;La Spirale Dynamique indique qu'il existe 8 niveaux de valeurs à ce jour, les 6 premiers constituants le premier cycle:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;AN Beige&lt;/span&gt; correspond à une étape où l'individu ou la société cherche à satisfaire ses besoins primaires, physiologiques.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;BO-Violet&lt;/span&gt; correspond à l'étape suivante où l'individu ou la société se rend compte de la sécurité qu'apportent l'appartenance à un groupe et le respect des traditions&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;CP-Rouge&lt;/span&gt; correspond à une étape où l'individu ou la société se connecte à sa puissance et à ses forces personnelles&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;DQ-Bleu&lt;/span&gt; correspond à l'étape suivante où l'individu définit ce qu'il a de commun avec la société et comment cela donne ordre et sens à son existence&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ER-Orange&lt;/span&gt; correspond à l'étape de satisfaction de ses besoins matériels&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;FS-Vert&lt;/span&gt; est la recherche de relations chaleureuses avec les autres par lesquelles on accède au bonheur&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;A'N'-Jaune&lt;/span&gt; correspond à une étape où l'individu cherche à développer en lui compétence, responsabilité et autonomie pour résoudre les problèmes généraux du monde&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;B'O'-Turquoise&lt;/span&gt; est une étape où l'individu éprouve le besoin d'élargir sa perception dans une vision holistique qui englobe toute vie.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Exemple de l'évolution d'un individu via la spirale dynamique&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;AN-Beige: Le nouveau-né cherche à satisfaire ses besoins primaires: dormir, manger&lt;/li&gt;&lt;li&gt;BO-Violet: Agé d'un mois, le bébé commence à avoir conscience de l'absence de sa mère et des relations de cause à effet: pleure =&gt; nourriture&lt;/li&gt;&lt;li&gt;CP-Rouge: Vers l'âge de 2 ans, l'enfant dit "non", il provoque, transgresse les règles, affirme sa puissance&lt;/li&gt;&lt;li&gt;DQ-Bleu: Vers 5 ans, l'enfant intègre des règles et des limites, c'est l'étape de la structure morale&lt;/li&gt;&lt;li&gt;ER-Orange: Se met en place à des âges différents, adolescence ou au premier job. C'est l'étape de l'indépendance et de la recherche de réussite.&lt;/li&gt;&lt;li&gt;FS-Vert: Se produit à l'âge adulte dans certaines conditions. C'est un moment où il recherche à être en contact avec les autres, avec l'humanité&lt;/li&gt;&lt;li&gt;A'N'-Jaune: Les individus ayant atteint ce niveau ont forcément vécu et rejeté ER-Orange puis FS-Vert pour acquérir un mode de pensée et de fonctionnement A'N'-Jaune. C'est la recherche d'autonomie, une vision globale des choses, une ouverture et une flexibilité.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Au niveau des organisations&lt;/h2&gt;

&lt;p&gt;En Europe et aux Etats Unis, la plupart des organisations sont ER-Orange, c'est à dire qu'elles sont orientées compétitivité, quelques unes sont FS-Vert, aucune n'est à ce jour A'N'-Jaune.&lt;/p&gt;

&lt;h2&gt;Un lien avec les approches agiles&lt;/h2&gt;

&lt;p&gt;Un développeur agile est plutôt FS-Vert, il est soucieux de la collaboration avec ses équipiers et présente un esprit d'ouverture.&lt;/p&gt;&lt;p&gt;
La plupart des sociétés qui demandent à être accompagnées pour mettre en place les méthodes agiles demandent des consultants qui sont des experts de la méthode. On est alors dans la recherche de normes DQ-Bleu ou dans la recherche d'efficacité propre au ER-Orange et pas dans la collaboration du FS-Vert.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-965843695049509367?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/965843695049509367/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=965843695049509367' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/965843695049509367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/965843695049509367'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/06/spirale-dynamique.html' title='Spirale Dynamique'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3597869903612542394</id><published>2009-04-22T13:43:00.000-07:00</published><updated>2009-04-22T17:02:07.473-07:00</updated><title type='text'>Le changement en spirale</title><content type='html'>&lt;p&gt;Je travaille depuis quelques temps sur la dynamique et la systémique d'équipes. A partir des quelques expériences que j'ai pu avoir, j'ai compris que le changement du système par rapport à sa finalité se produisait à un endroit précis où l'énergie est forte et pas forcément à l'endroit attendu. Tout ça m'a fait penser à une &lt;b&gt;spirale&lt;/b&gt; et à une démarche en trois étapes: création d'énergie, diffusion d'énergie, consommation d'énergie. Dans son approche, cette démarche ressemble au parcours d'une spirale.&lt;/p&gt;

&lt;h2&gt;Le changement sous trois zones&lt;/h2&gt;

&lt;p&gt;La demande de changement vient souvent d'un mandataire qui n'est pas au cœur du système. Le mandataire est &lt;span style="font-weight: bold;"&gt;éloigné du centre gravitationnel&lt;/span&gt; du système, il est la plupart du temps au niveau du &lt;span style="font-weight: bold;"&gt;manteau&lt;/span&gt; entre le noyau et la croûte. Imaginons qu'on vous demande de changer la structure de notre planète, c'est à dire les propriétés structurelles de la planète, où interviendrez vous avec le minimum d'effort ? Probablement que vous changeriez les propriétés structurelles du &lt;span style="font-weight: bold;"&gt;noyau&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;interne&lt;/span&gt; en premier&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_I6qpNMiW2Ys/Se-EAdpUZUI/AAAAAAAAAn4/ZUX9Ez0qvf0/s1600-h/photo002.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 191px; height: 187px;" src="http://3.bp.blogspot.com/_I6qpNMiW2Ys/Se-EAdpUZUI/AAAAAAAAAn4/ZUX9Ez0qvf0/s320/photo002.jpg" alt="" id="BLOGGER_PHOTO_ID_5327622027695383874" border="0" /&gt;&lt;/a&gt;&lt;p&gt;La Terre se divise en trois zones concentriques :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;le noyau,&lt;/li&gt;&lt;li&gt;le manteau,&lt;/li&gt;&lt;li&gt;et la croûte. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si vous changez la croûte, vous devez changer toute la surface de la croûte pour changer la structure du manteau et espérer changer le noyau, ceci demande un effort très important et une énergie considérable, surtout que le noyau en interne possède lui-même une énergie énorme à la fois de changement mais aussi de réticence.&lt;/p&gt;

&lt;h2&gt;Le changement en spirale&lt;/h2&gt;

&lt;p&gt;Quelle stratégie adopter alors ? &lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/Se-NBZ8OmZI/AAAAAAAAAoA/4TJAVB5HF_o/s1600-h/spirale.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 177px; height: 179px;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/Se-NBZ8OmZI/AAAAAAAAAoA/4TJAVB5HF_o/s320/spirale.jpg" alt="" id="BLOGGER_PHOTO_ID_5327631939485473170" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;Adopter une stratégie de changement en spirale:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La première étape consiste à &lt;span style="font-weight: bold;"&gt;trouver le noyau interne&lt;/span&gt;, c'est l'endroit où l'énergie (chaleur) est la plus forte (5000°C). Ce centre n'est pas toujours le plus haut niveau hiérarchique de l'entreprise, c'est plutôt la source de l'énergie du système, il se limite souvent à 2 ou 3 acteurs&lt;/li&gt;&lt;li&gt;Une fois que vous avez trouvé le noyau interne, il faut se rapprocher géographiquement de ce noyau, comprendre sa dynamique et se laisser faire accepter par ce système, en bref &lt;span style="font-weight: bold;"&gt;gagner la confiance du noyau&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Parfois vous aurez besoin de changer la structure de ce noyau en créant une meilleure dynamique, en &lt;span style="font-weight: bold;"&gt;créant de l'énergie dans ce noyau&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Parfois vous n'aurez pas besoin de créer de l'énergie mais de la &lt;span style="font-weight: bold;"&gt;diffuser aux éléments du manteau &lt;/span&gt;au fur et à mesure, c'est par exemple déléguer du leadership ou de l'expertise
&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;&lt;span style="font-weight: normal;"&gt;Une fois intégrer le changement au niveau du manteau,&lt;/span&gt;le changement se produit globalement&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pourquoi travailler sur le noyau ? Parce que le noyau est la source de l'énergie, la température est la plus forte. Je disais que la demande venait en général d'un mandataire qui n'est pas dans le noyau car il a froid et sent que la croûte a encore plus froid que lui. Une fois la couche manteau atteinte par l'énergie du noyau, le changement se produit car l'énergie est suffisante pour alimenter la croûte étant donné sa superficie. &lt;span style="font-weight: bold;"&gt;Le noyau crée la chaleur, le manteau diffuse la chaleur, la croûte consomme la chaleur&lt;/span&gt;. On pourrait croire que le noyau correspond au top management, ce n'est pas toujours le cas. De même, il est faux de croire que le mandataire ou son hiérarchique est capable de nous donner la source d'énergie.&lt;/p&gt;

&lt;h2&gt;Changement en spirale sur une équipe projet&lt;/h2&gt;

&lt;p&gt;Un manager d'une direction informatique (mandataire) vient avec une demande de changement auprès d'un consultant, il veut que le projet aille plus vite. Le mandataire n'est pas dans l'équipe projet, il ne participe pas et n'est pas présent physiquement sur le plateau projet. Sa demande est en décalage par rapport à ce qui se passe sur le projet, il est trop loin de la source pour connaître le cœur du fonctionnement, trop loin pour agir et manque d'énergie pour interagir profondément avec le noyau. La diffusion d'énergie va dans un sens, du noyau vers le manteau puis du manteau vers la croûte. Sans le savoir, le mandataire demande au consultant d'aller dans le noyau. Dans une approche en spirale, le consultant devra approcher ce noyau et devra pouvoir y rester, car il fait chaud, c'est brulant et complexe. Le consultant pourra utiliser son affinité avec un des membres du noyau (parmi les 2 ou 3, pas plus) pour rentrer dans ce noyau. Ensuite, le consultant devra estimer si l'énergie est suffisante dans le noyau pour la diffusion ou pas et alors stimuler le noyau. Le consultant ne doit pas perdre son temps sur autre chose que sur le noyau, c'est tout l'objet de l'approche en spirale. L'approche en spirale consiste à parcourir la spirale en partant du point central. Parfois il arrive que le mandataire fasse parti du point central, le travail est alors simplifié. Si ce n'est pas le cas, le mandataire devient alors un frein au changement car il se trouve trop loin du point où se produira le changement. Le point du changement est un lieu où se trouve les acteurs du noyau. Dans le cas d'un projet, c'est souvent le comité projet ou de pilotage (copil). Un bon consultant peut par sa présence alimenter l'énergie de ce comité projet, parfois il faut plus, parfois il faut du temps. Ce que je veux dire, c'est que ça ne sert à rien de travailler sur autre chose que le noyau tant que l'énergie n'est pas suffisante. Dans cette approche, qui est une approche de coaching, le consultant ne s'intéresse pas au contenu mais à la forme des interactions et l'intensité dégagée. Une fois que le consultant considère que l'énergie est suffisante et est alignée avec la finalité du système alors le consultant peut introduire progressivement des personnes du manteau dans la dynamique du noyau, d'abord celui qui est le plus prêt du fil de la spirale, jusqu'au dernier du manteau. Une fois que toutes les personnes que le consultant considère dans le manteau sont intégrées dans la dynamique, il peut alors se retirer, c'est la fin de sa mission.&lt;/p&gt;

&lt;h2&gt;Un modèle utile pour moi&lt;/h2&gt;

&lt;p&gt;Ce modèle d'intervention en spirale que j'ai créé m'aide à intervenir sur les missions sur lesquelles j'interviens car il me permet de garder à l'esprit que:
&lt;ul&gt;&lt;li&gt;le mandataire n'est pas toujours celui qui est au coeur du changement&lt;/li&gt;&lt;li&gt;je dois principalement travailler sur la source d'énergie&lt;/li&gt;&lt;li&gt;je travaille sur l'énergie du noyau puis sur la diffusion sur le manteau&lt;/li&gt;&lt;li&gt;je suis un chemin, celui de la spirale, je sais où j'en suis, je sais quand j'ai terminé (au niveau du manteau)
&lt;/li&gt;&lt;li&gt;j'interviens de façon progressive en ajoutant des acteurs au fur et à mesure&lt;/li&gt;&lt;li&gt;j'agis dans l'instant, je ne vais pas demander à une planète de s'arrêter de tourner&lt;/li&gt;&lt;li&gt;je crois philosophiquement à la circularité de l'énergie et aux cycles de changement représentés par la spirale
&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3597869903612542394?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3597869903612542394/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3597869903612542394' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3597869903612542394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3597869903612542394'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/04/le-changement-en-spirale.html' title='Le changement en spirale'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_I6qpNMiW2Ys/Se-EAdpUZUI/AAAAAAAAAn4/ZUX9Ez0qvf0/s72-c/photo002.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1966929124604917350</id><published>2009-04-14T23:31:00.000-07:00</published><updated>2009-04-15T01:11:06.115-07:00</updated><title type='text'>Scrum au Paris JUG</title><content type='html'>&lt;p&gt;Hier, c'était une soirée &lt;a href="http://fr.wikipedia.org/wiki/Scrum"&gt;Scrum&lt;/a&gt; au &lt;a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20090414"&gt;Paris JUG&lt;/a&gt;. &lt;a href="http://mignots.free.fr/Eric/"&gt;Eric Mignot&lt;/a&gt; et &lt;a href="http://www.touilleur-express.fr/"&gt;Nicolas Martignole&lt;/a&gt; nous ont parlé de Scrum, Nicolas posait des questions, Eric tentait de répondre ;-).&lt;/p&gt;
&lt;p&gt;Ce qui m'a plus, c'est la simplicité de la présentation, Eric parle bien d'"approche agile" plutôt que de méthode. Le mot approche montre bien comment il voit le changement chez ses clients, il préfère intégrer un "daily scrum" sans le reste plutôt que ne noyer le client sous la mêlée. Il a bien précisé que l'objectif était de livrer un logiciel et de d'avoir du fun et non d'appliquer une méthode.&lt;/p&gt;
&lt;p&gt;Il a bien expliqué que dans la réalité le Product Owner n'était pas une seule personne, il est en effet courant que les coûts et le quoi du produit soient gérés par des personnes différentes. J'aime cette approche systémique. J'ai retenu l'image du backlog comme iceberg. Je confirme que c'est au alentour du 5/6 sprint que la vélocité se stabilise. J'ai appris que le sprint correspondait à un mini-forfait où les tâches (découpage des stories) étaient estimées en heures, c'est pas ce que je fais mais pourquoi pas, ça doit permettre une meilleure focalisation de l'équipe. On sent qu'Eric utilise dans son approche, la systémique et la théorie des contraintes, probablement que c'est nécessaire pour accompagner au mieux nos clients vers une plus grande agilité.&lt;/p&gt;
&lt;p&gt;Merci Eric pour cette présentation et à bientôt !&lt;/p&gt;
&lt;p&gt;La soirée s'est poursuivi d'une présentation de &lt;a href="http://blog.xebia.fr"&gt;Guillaume Bodet&lt;/a&gt; avec une vue pragmatique de comment appliquer Scrum chez des clients. Il nous indique qu'il n'est pratiquement pas possible d'appliquer "Scrum by the book" sur des projets, il n'existe pas un seul Product Owner mais plusieurs personnes, une qui gère les coûts, une personne qui sait quoi faire pour une partie du logiciel. On sent qu'il a dû essuyer quelques désillusions comme nous tous. Ce qui a retenu mon attention, c'est que le Scrum Master un "trapu techniquement". A vrai dire je n'en sais rien, est ce vraiment nécessaire ? Est ce qu'un Scrum Master a même besoin de s'intéresser au contenu du produit ? Je ne crois pas. Il a parlé des 5 niveaux de planification et a rappelé qu'il faut tous les faire. Il a aussi parlé du cône d'incertitude en parlant de la planification.&lt;/p&gt; &lt;p&gt;Malheureusement, je n'ai pas assisté à toute sa session. Guillaume nous ramène bien à la réalité, n'oubliez pas que les méthodes ou approches agiles ne sont pas magiques, elles s'appliquent dans un système plus large qu'est l'entreprise.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1966929124604917350?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1966929124604917350/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1966929124604917350' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1966929124604917350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1966929124604917350'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/04/scrum-au-paris-jug.html' title='Scrum au Paris JUG'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2785663421153669184</id><published>2009-04-03T07:38:00.000-07:00</published><updated>2009-04-03T07:54:17.627-07:00</updated><title type='text'>Coaching - Méthodes agiles</title><content type='html'>&lt;p&gt;Le coaching d'équipe a sans doute plus d'apport que le coaching individuel. Le coaching individuel consiste en général à coacher le chef de projet. Coacher le chef de projet permettra dans le meilleur des cas à améliorer sa performance mais pas forcément celle de son équipe. De même coacher individuellement chaque membre de l'équipe ne permettra pas forcément à améliorer les performances de l'équipe.&lt;/p&gt;
&lt;p&gt;Du coup, comment coacher une équipe ?&lt;/p&gt;
&lt;p&gt;Certains (&lt;span style="font-weight: bold;"&gt;Animateurs&lt;/span&gt;) proposeront des séminaires de team building pour renforcer la motivation de l'équipe, ça marche un temps mais ça ne suffira pas à faire que l'équipe fonctionne mieux car elle n'aura pas régler ses dysfonctionnements et l'energie retombe au bout d'un moment.&lt;/p&gt;
&lt;p&gt;D'autres (&lt;span style="font-weight: bold;"&gt;Facilitateurs&lt;/span&gt;) proposeront de travailler sur la cohésion en permettant à chacun de mieux se connaître et de mieux communiquer, cela créera des équipes affectives qui n'auront pas résolues leurs problèmes opérationnels.&lt;/p&gt;
&lt;p&gt;Les &lt;span style="font-weight: bold;"&gt;Méthodistes&lt;/span&gt; travailleront sur la façon de faire et donc proposeront une méthode ou des outils pour être plus efficace et atteindre les résultats. Les résultats seront atteints pour un temps mais pas forcément de manière durable.&lt;/p&gt;
&lt;p&gt;Les &lt;span style="font-weight: bold;"&gt;Coachs d'équipe&lt;/span&gt; travailleront avec l'équipe quand elle travaille en questionnant l'équipe sur le sens de ses actions, sur son cadre de fonctionnement et en observant ses changements de comportements suite à ces questions.&lt;/p&gt;
&lt;p&gt;Où se situe le "coach agile" ?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2785663421153669184?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2785663421153669184/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2785663421153669184' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2785663421153669184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2785663421153669184'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/04/coaching-methodes-agiles.html' title='Coaching - Méthodes agiles'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8330381949649680250</id><published>2009-03-06T07:17:00.001-08:00</published><updated>2009-03-19T02:13:10.471-07:00</updated><title type='text'>Créer une équipe</title><content type='html'>&lt;p&gt;Dans les méthodes agiles, l’accent est mis sur l’équipe. Il suffit de lire le manifeste agile pour s’en convaincre, valoriser les individus et les interactions, collaborer avec le client, répondre au changement. De ce postulat, nous pouvons nous demander ce qui définit l' « équipe », et ce qui la différencie du groupe.&lt;/p&gt;
&lt;h3&gt;Différence entre équipe et groupe&lt;/h3&gt;
&lt;p&gt;Contrairement au groupe, une équipe est constituée spécifiquement pour répondre à des enjeux ambitieux et est orientée vers la tâche et vers les hommes. Une équipe se caractérise par sa diversité, son unité et fournit un espace exceptionnel pour ses membres.&lt;/p&gt;
&lt;p&gt;Une équipe est coordonnée par un leader, un groupe par un chef. Les membres d’une équipe travaillent, créent et décident ensemble ; les membres d’un groupe se réunissent et se répartissent le travail.&lt;/p&gt;
&lt;h3&gt;La dynamique d’une équipe&lt;/h3&gt;
&lt;p&gt;D’un point de vue sociologique, il peut être intéressant de voir comment se comporte la dynamique d’une équipe et la dynamique d’un groupe&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_I6qpNMiW2Ys/SbE-_8jdjXI/AAAAAAAAAmQ/6bPQrPjsjXw/s1600-h/Image+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 106px;" src="http://4.bp.blogspot.com/_I6qpNMiW2Ys/SbE-_8jdjXI/AAAAAAAAAmQ/6bPQrPjsjXw/s320/Image+1.png" alt="" id="BLOGGER_PHOTO_ID_5310094703954070898" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;La dynamique d’une équipe est très forte, beaucoup d’interactions ont lieu entre les membres et de manière équilibrée. Il est intéressant de voir aussi la position du leader qui fait partie de l’équipe et qui établit des relations multipolaires, c’est à dire que le leader n’est pas le seul pôle d’attractivité. Il est visible sur le schéma de la dynamique d’une équipe que les membres sont proches les uns des autres.&lt;/p&gt;
&lt;p&gt;La dynamique d’un groupe est faible, les membres interagissent peu ensemble, ce qui crée une certaine latence : « c’est mou, ça manque d’énergie ». Le leader tient en général un lieu central, les interactions sont bipolaires entre le leader et chacun des membres. Les membres sont plus éloignés, ça se traduit par la distance qui les sépare réellement physiquement.&lt;/p&gt;
&lt;h3&gt;Pourquoi la dynamique est si importante ?&lt;/h3&gt;
&lt;p&gt;La dynamique d’équipe est très importante car c’est elle qui est à l’origine de la performance et de la créativité d’une équipe.
Exemples réels d’une même réunion d’avancement vu d'un groupe et d'une équipe :
&lt;ul&gt;&lt;li&gt;Vu d’un groupe : Le chef de projet demande aux membres les uns à la suite des autres sur quoi ils travaillent et où ils en sont. Des dialogues entre le chef de projet et chaque membre ont lieu. Les autres membres attendent patiemment leur tour. La réunion a duré 1 heure. Les membres sortent de la réunion sans se rappeler exactement ce qu'ils ont à faire, ils n'ont pas l'impression de faire partie d'une équipe et ne ressortent pas avec plus énergie.&lt;/li&gt;
&lt;li&gt;Vu d’une équipe : L’animation de la réunion est effectuée par un des membres de l’équipe et non par le leader. Le temps de la réunion est vérifié par un des membres qui annonce le temps écoulé de façon régulière. Chaque membre participe, chacun se sent responsable de l'activité des autres (co-responsabilité). Un des membres interroge l’équipe « ça fait 2 minutes que nous parlons de ce sujet, qu’est ce qu’on décide ? ». A la fin de la réunion, un des membres propose de supprimer la réunion en mettant à jour un tableau de suivi visuel visible par tous et mis à jour en temps réel. La réunion a duré 15 minutes et sera supprimée les prochaines fois. Les membres sortent de la réunion en se sentant engagés et dans l'action, leur niveau d'énergie est fort.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;L'efficacité d'une équipe peut se traduire par l'obtention des résultats attendus (ou supérieurs) dans un délais le plus faible possible.&lt;/p&gt;
&lt;p&gt;Dans le cas du groupe de l'exemple, l'efficacité est médiocre car le groupe n'a pas obtenu de résultats concluants et surtout les membres ne sont pas dans l'action mais dans l'échange d'information, dans le "mou". Le chef est le goulot d'étranglement car c'est par lui que doit passer toutes les discussions, le temps passé est donc long et non optimisé pour chacun des membres, les résultats sont même négatifs car chacun a l'impression d'avoir perdu son temps et se sent démotivé.&lt;/p&gt;
&lt;p&gt;Dans le cas de l'équipe de l'exemple, l'efficacité est forte car chacun valorise son temps et celui des autres, les membres participent tous activement au débat et n'hésitent pas à donner leur avis tout en respectant les règles de fonctionnement en équipe (gestion du temps, participation, écoute, ...) . La dynamique est forte et permet même à l'équipe de proposer une amélioration du suivi de l'avancement pour la prochaine fois. Le temps est optimisé et constitue un moteur à la dynamique.&lt;/p&gt;
&lt;h3&gt;Evolution d’une équipe&lt;/h3&gt;
&lt;p&gt;Pour construire une équipe, il est donc important de suivre son rythme et de respecter son développement. En particulier une équipe sera moins performante qu’un groupe dans une phase initiale mais par contre sera 10,100, 1000 fois plus performante dans une phase de maturité.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SbE_tFPGcHI/AAAAAAAAAmg/t_uOpWYqn_c/s1600-h/Image+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SbE_tFPGcHI/AAAAAAAAAmg/t_uOpWYqn_c/s320/Image+3.png" alt="" id="BLOGGER_PHOTO_ID_5310095479378702450" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;Autant le groupe est orienté vers la tâche, c’est à dire que chaque membre du groupe effectue la tâche qui lui a été donné par son chef, autant une équipe va d’abord chercher à créer des liens affectifs entre ses membres, puis partager une vision commune et enfin va se mettre à exécuter les tâches qu’elle s’est effectuée collectivement.&lt;/p&gt;
&lt;h3&gt;Et alors ?&lt;/h3&gt;
&lt;p&gt;Pour créer une équipe, il importe de respecter son développement et c’est bien le manager qui donne les moyens à ce groupe de devenir équipe :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Dans sa phase initiale, le leader/coach/manager pourra créer une ambiance agréable, aider à tisser les liens entre les membres, par des ateliers de team building ou des dojos randoris sur des problématiques plus techniques&lt;/li&gt;
&lt;li&gt;Dans une phase intermédiaire, le leader/coach/manager travaillera la vision du produit que l’équipe va construire à l’aide par exemple d’atelier product box et/ou par la constitution d’un story map&lt;/li&gt;
&lt;li&gt;Dans la phase finale, le leader/coach/manager travaillera la montée du leadership des acteurs en déléguant et en faisant circuler ses responsabilités pour augmenter la dynamique et surmotiver l’équipe&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le démarrage de projet est très important pour une équipe car c’est le moment où le système se met en place et se stabilise. C’est l’étape où l’équipe se projette et visualise son succès ou son non succès. L’équipe évolue dans un système plus large, en particulier la culture de l’entreprise est un élément qu’il ne faut négliger ; une culture où « chez nous, je n’ai jamais vu un projet terminer à l’heure » peut avoir un effet néfaste sur l’équipe porté de manière inconsciente chez l’individu ; dans ces cas, il faut fournir beaucoup d’énergie pour arriver à focaliser l’équipe et la rendre performance avec un gros travail de visualisation et d’encouragement à chaque résultat.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8330381949649680250?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8330381949649680250/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8330381949649680250' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8330381949649680250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8330381949649680250'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/03/creer-une-equipe.html' title='Créer une équipe'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_I6qpNMiW2Ys/SbE-_8jdjXI/AAAAAAAAAmQ/6bPQrPjsjXw/s72-c/Image+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4772889249055587546</id><published>2009-03-05T06:19:00.000-08:00</published><updated>2009-03-26T03:29:06.563-07:00</updated><title type='text'>Les règles de codage en équipe</title><content type='html'>&lt;h3&gt;Problème récurrent&lt;/h3&gt;
&lt;p&gt;Une équipe de développeurs de 8 personnes se crée. Chacun membre possède des compétences techniques très diverses. Cette équipe est en charge de créer un produit logiciel de qualité. Lancée directement vers la tâche, au bout de quelques jours de développement, personne n’arrive à comprendre le code de l’autre et finalement chacun se spécialise et se restreint à son petit univers. Un consultant externe ou le leader intervient et propose de mettre en place des indicateurs de qualité. 1 mois plus tard la situation ne s’est pas améliorée voire elle s’est dégradée.&lt;/p&gt;
&lt;p&gt;Pourquoi ?&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Parce que chaque membre de l’équipe ne se sent pas coresponsable du code qui est produit&lt;/li&gt;
&lt;li&gt;Parce que le consultant externe ou le leader tombe sur une réticence au changement même si sa solution est pertinente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette situation est un problème récurrent auquel j’ai pu me confronter sur plusieurs projets.&lt;/p&gt;
&lt;span class="fullpost"&gt;And here is the rest of it.&lt;/span&gt;
&lt;h3&gt;Autre approche&lt;/h3&gt;
&lt;p&gt;L’approche que je vous expose ici a permis à une équipe de développement agile de garder un niveau de qualité du code sur la durée.&lt;/p&gt;
&lt;p&gt;La clé est d’accepter que l’équipe ne soit pas performante pendant une quinzaine de jours voire un mois pour lui permettre de s’aligner sur la qualité attendue du logiciel et gagner en performance sur la durée.&lt;/p&gt;
&lt;p&gt;Un atelier très adapté pour permettre cet alignement est le Dojo Randori (c.f. Annexe) . Il peut être proposé de faire la première itération de l’équipe sous ce mode : construction de tests Fitnesse, tests JUnit, tests manuels. Cette première itération est alors un moment où l’équipe se constitue équipe en s’alignant sur les pratiques de codage.
Cette première étape est positive pour la montée en compétence des membres de l’équipe, néanmoins cela ne signifie pas que le code est de qualité, que le code est « refactoré » correctement.&lt;/p&gt;
&lt;p&gt;Pour le consultant externe ou le leader de l’équipe, ça peut être l’occasion d’organiser une séance de « code sur les murs » où il demande à l’équipe « qu’est ce qui vous permet de dire que le code est de qualité ? » à partir d’exemples déjà développés. L’équipe définit alors ces propres règles, qui par expérience, ne sont pas si différentes que celles proposaient par Martin Fowler dans Refactoring Improving the Design of Existing Code&lt;/p&gt;
&lt;p&gt;Pendant un à deux mois, le consultant externe ou le leader peuvent alors provoquer des séances de refactoring régulières pendant lesquelles l’équipe modifie le code à partir des règles qu’elles s’étaient fixées. Ces rendez-vous peuvent être l’occasion pour ajouter des règles ou d’en supprimer.&lt;/p&gt;

&lt;h3&gt;Les métriques de code&lt;/h3&gt;

&lt;p&gt;Je suis contre l’utilisation de métriques de code PMD, CheckStyle car ces métriques créent un sentiment de contrôle sur l’équipe. Cela demande que le leader vérifie que ces règles soient respectées et qu’il aille voir les développeurs pour respecter ces règles. De plus, ces métriques sont limitées, par exemple elles ne permettent pas de savoir si une méthode est bien nommée. Ces métriques créent une déresponsabilisation des développeurs qui se disent : « Je peux faire du code de merde et je le corrigerai plus tard à partir des résultats des métriques » ; les métriques sont sujettes à proscranisation.&lt;/p&gt;

&lt;h3&gt;Annexe : Fonctionnement du Dojo Randori&lt;/h3&gt;
&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_I6qpNMiW2Ys/ScJHs6v8gmI/AAAAAAAAAnA/tyeFVO0DFRw/s1600-h/Image+6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 313px; height: 242px;" src="http://4.bp.blogspot.com/_I6qpNMiW2Ys/ScJHs6v8gmI/AAAAAAAAAnA/tyeFVO0DFRw/s320/Image+6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314889347260777058" /&gt;&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;Le terme Dojo vient du japonais, lieu consacré à la méditation, au travail et à la discipline&lt;/li&gt;
&lt;li&gt;Lieu où les programmeurs travaillent sur un défi de programmation&lt;/li&gt;
&lt;li&gt;Cet atelier permet à chaque participant d’améliorer sa pratique de développement&lt;/li&gt;
&lt;li&gt;Il est très utile pour faire progresser les individus, les expérimentés apprennent aux plus débutants&lt;/li&gt;
&lt;li&gt;Les participants s’alignent sur des pratiques, des conventions de codage&lt;/li&gt;
&lt;li&gt;Deux personnes sont devant un ordinateur, une des deux code, l’autre la conseille, les autres derrière regardent l’écran géant et attendent leur passage&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4772889249055587546?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4772889249055587546/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4772889249055587546' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4772889249055587546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4772889249055587546'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/03/les-regles-de-codage-en-equipe.html' title='Les règles de codage en équipe'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_I6qpNMiW2Ys/ScJHs6v8gmI/AAAAAAAAAnA/tyeFVO0DFRw/s72-c/Image+6.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-68527912124994678</id><published>2009-03-03T05:34:00.000-08:00</published><updated>2009-03-03T05:38:29.129-08:00</updated><title type='text'>Cadrer une demande</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/41hWapjLRnL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU08_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/41hWapjLRnL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU08_.jpg" alt="" border="0" /&gt;&lt;/a&gt;
Un cadrage rigoureux de la demande d’aide permet de mieux comprendre le système et de répondre au mieux à la demande. La demande d’aide est souvent exprimée de manière floue, soit sous forme d’un problème à résoudre, soit sous forme de solutions à mettre en œuvre. En général, le demandeur attend tout de suite une réponse. Il est important de ne pas tomber dans ce piège tant que la demande n’a pas été cadrée.&lt;/p&gt;
&lt;p&gt;Dans la phase de cadrage, il est important de savoir si &lt;span style="font-weight: bold;"&gt;le demandeur est bien le demandeur réel&lt;/span&gt; ou un transmetteur, est-il responsable de la demande ? A t-il le pouvoir de décision ? Ensuite il convient de connaître &lt;span style="font-weight: bold;"&gt;la situation qui a déclenchée la demande d’aide&lt;/span&gt;. Pour éviter que le demandeur soit un frein au changement, vérifier que &lt;span style="font-weight: bold;"&gt;le demandeur est engagé&lt;/span&gt; dans sa demande.&lt;/p&gt;
&lt;p&gt;Un objectif exprimé par le demandeur est souvent un problème ou une solution, il est important de connaître &lt;span style="font-weight: bold;"&gt;l’(es) objectif(s) supérieur(s)&lt;/span&gt; et valider la cohérence de l’objectif avec les objectifs supérieurs. Ensuite pour cadrer la mission, il est nécessaire de connaître &lt;span style="font-weight: bold;"&gt;les résultats attendus&lt;/span&gt; après l’intervention du consultant. Dans un système, il est un avantage de connaître les &lt;span style="font-weight: bold;"&gt;acteurs ressources ou freins à l’objectif&lt;/span&gt; (Insiders, Outsiders).&lt;/p&gt;&lt;p&gt;D’un point systémique, les &lt;span style="font-weight: bold;"&gt;relations entre les acteurs&lt;/span&gt; permettent de mieux connaître le système. Les acteurs ont-ils intérêt à s’engager dans le changement, &lt;span style="font-weight: bold;"&gt;qu’est ce que les acteurs gagnent&lt;/span&gt;, en particulier le demandeur ?&lt;/p&gt;
&lt;p&gt;Connaître &lt;span style="font-weight: bold;"&gt;les marges de manœuvre&lt;/span&gt; du système permet de connaître l’évolution possible du système. La&lt;span style="font-weight: bold;"&gt; recherche des contraintes&lt;/span&gt; permet de connaître les leviers créateurs du changement. Il est important de connaître les actions en cours et &lt;span style="font-weight: bold;"&gt;les solutions qui ont déjà été tentées&lt;/span&gt; pour éviter de faire de la même chose.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-68527912124994678?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/68527912124994678/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=68527912124994678' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/68527912124994678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/68527912124994678'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/03/cadrer-une-demande.html' title='Cadrer une demande'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7065618904267670118</id><published>2009-02-20T02:46:00.000-08:00</published><updated>2009-02-20T03:21:37.989-08:00</updated><title type='text'>Attention à l'agile !</title><content type='html'>&lt;p&gt;Le manifeste agile définit les quatre valeurs fondamentales suivantes:
&lt;ul&gt;&lt;li&gt;L’&lt;span style="font-weight: bold;"&gt;interaction avec les personnes&lt;/span&gt; plutôt que les processus et les outils&lt;/li&gt;&lt;li&gt;Un &lt;span style="font-weight: bold;"&gt;produit opérationnel&lt;/span&gt; plutôt qu’une documentation pléthorique&lt;/li&gt;&lt;li&gt;La &lt;span style="font-weight: bold;"&gt;collaboration avec le client &lt;/span&gt;plutôt que la négociation de contrat&lt;/li&gt;&lt;li&gt;La &lt;span style="font-weight: bold;"&gt;réactivité face au changement&lt;/span&gt; plutôt que le suivi d'un plan&lt;/li&gt;&lt;/ul&gt;Le travail essentiel à faire en agile est de travailler sur l'équipe. L'interaction avec les personnes correspond à la dynamique d'équipe. Le produit opérationnel est une valeur qui renforce la focalisation et mobilisation d'une équipe. La collaboration avec le client formalise la cohésion de l'équipe, le client fait partie de l'équipe. La réactivité face au changement est une valeur qui demande que l'équipe soit à un niveau de maturité élevé.&lt;/p&gt;
&lt;p&gt;L'accompagnement d'une équipe vers l'agilité s'apparente plus à du coaching d'équipe qu'à du conseil ou de l'expertise sur la méthode. Même si les méthodes agiles introduisent le planning game, la standup meeting, le binômage, les rétrospectives, tous ces "outils" ne servent à rien s'ils ne sont pas introduit au bon moment. Les imposer peut créer une rétiscence au changement et surtout une déresponsabilisation de l'équipe par rapport à l'outil et donc une équipe qui n'est pas efficace.&lt;/p&gt;
Par exemple:&lt;br/&gt;
&lt;ul&gt;&lt;li&gt;une standup meeting peut être très vite un lieu où le chef de projet affirme son autorité plutôt qu'un échange entre membres de l'équipe&lt;br/&gt;
&lt;/li&gt;&lt;li&gt;un bilan d'itération peut devenir un espace de discussions conflictuelles ayant un effet démobilisateur sur l'équipe&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;La rétrospective peut être un lieu d'échange qui ne débouche pas sur des actions, voir qui débouche sur des actions qui ne sont pas faites par la suite&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;Beaucoup de Scrum masters appliquent la méthode de façon stricte sans prendre en compte le système équipe et sa maturité, ce qui donne des résultats peu satisfaisants voir des situations instables, désorganisées où l'équipe n'assume plus des fonctions vitales comme le pilotage par exemple.&lt;br/&gt;
Je m'interroge sur l'application actuelle du coaching agile en France (celui que je connais) et à l'étranger. J'ai peur des dangers de la certification Scrum master où des coachs certifiés après 2 jours de formation sont amenés à accompagner des équipes vers l'agilité. Je m'interroge aussi sur le manque de cadre qui est donné à ce metier: "coach agile" - "scrum master" qui ne fait que décribiliser le métier. Le monde du coaching est aussi sujet à ces risques mais au moins un certain nombre de mesures ont été prises pour l'en protèger: Les formations durent 1 an, les coachs sont pour la plupart supervisés, le cadre d'accompagnement et un code déontologique sont définis. On ne s'improvise pas coach d'équipe comme on s'improvise pas coach agile.&lt;br/&gt;
&lt;br/&gt;
Quand est ce que le métier "coach agile" sera considéré comme un métier à part entière, un métier d'accompagnement et pas comme un supplément au consultant, à l'expert technique, à l'architecte ?&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7065618904267670118?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7065618904267670118/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7065618904267670118' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7065618904267670118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7065618904267670118'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/attention-lagile.html' title='Attention à l&apos;agile !'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7759697936277904800</id><published>2009-02-06T02:43:00.000-08:00</published><updated>2009-02-06T02:50:38.257-08:00</updated><title type='text'>XMLUnit</title><content type='html'>&lt;p&gt;&lt;a href="http://xmlunit.sourceforge.net"&gt;XMLUnit&lt;/a&gt; permet de tester unitairement la comparaison de XML et la validation des expressions XPath.&lt;/p&gt;
&lt;p&gt;Exemple:&lt;/p&gt;
&lt;pre&gt;
 @Test
 public void xmlEquals() throws Exception {
  XMLAssert.assertXMLEqual("&amp;lt;toto&amp;gt;&amp;lt;titi&amp;gt;&amp;lt;/titi&amp;gt;&amp;lt;tata&amp;gt;&amp;lt;/tata&amp;gt;&amp;lt;/toto&amp;gt;","&amp;lt;toto&amp;gt;&amp;lt;tata&amp;gt;&amp;lt;/tata&amp;gt;&amp;lt;titi&amp;gt;&amp;lt;/titi&amp;gt;&amp;lt;/toto&amp;gt;");
 }
 
 @Test
 public void xmlFile() throws Exception {
  Assert.assertTrue(XMLUnit.compareXML(new StringReader("&amp;lt;toto&amp;gt;&amp;lt;titi&amp;gt;&amp;lt;/titi&amp;gt;&amp;lt;tata&amp;gt;&amp;lt;/tata&amp;gt;&amp;lt;/toto&amp;gt;"),"&amp;lt;toto&amp;gt;&amp;lt;tata&amp;gt;&amp;lt;/tata&amp;gt;&amp;lt;titi&amp;gt;&amp;lt;/titi&amp;gt;&amp;lt;/toto&amp;gt;").similar());
 }

 @Test
 public void xmlXPath() throws Exception {
  XMLAssert.assertXpathExists("//toto/titi[name='rod']", "&amp;lt;toto&amp;gt;&amp;lt;titi&amp;gt;&amp;lt;name&amp;gt;rod&amp;lt;/name&amp;gt;&amp;lt;/titi&amp;gt;&amp;lt;tata&amp;gt;&amp;lt;/tata&amp;gt;&amp;lt;/toto&amp;gt;");
 }
&lt;/pre&gt;
&lt;p&gt;Pour aller plus loin, Jettez un coup d'oeil au &lt;a href="http://xmlunit.sourceforge.net/example.html"&gt;Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans le pom maven, ca donne ça:&lt;/p&gt;
&lt;pre&gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;xmlunit&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;xmlunit&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7759697936277904800?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7759697936277904800/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7759697936277904800' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7759697936277904800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7759697936277904800'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/xmlunit.html' title='XMLUnit'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4187786388388296120</id><published>2009-02-06T02:06:00.000-08:00</published><updated>2009-02-06T02:29:50.285-08:00</updated><title type='text'>Unitils++</title><content type='html'>&lt;p&gt;J'avais écrit un article sur &lt;a href="http://jfhelie.blogspot.com/2008/02/unitils.html"&gt;Unitils&lt;/a&gt; qui permet de simplifier l'utilisation des mocks avec les annotations. A l'époque où j'ai écrit l'article, &lt;a href="http://unitils.org"&gt;Unitils&lt;/a&gt; utilisait &lt;a href="http://www.easymock.org/"&gt;EasyMock&lt;/a&gt; pour son implémentation des mocks, depuis la version 2, ils ont construit leur propre implémentation des mocks qui est beaucoup plus simple qu'EasyMock, de quoi faire comprendre facilement comment marche un mock en formation. Adieu Easymock, je t'aimais bien !&lt;/p&gt;
&lt;p&gt;Un exemple:&lt;/p&gt;
&lt;pre&gt;
@RunWith(UnitilsJUnit4TestClassRunner.class)
public class CalculatorWebServiceTest {
 @InjectIntoByType
 private Mock&amp;lt;Calculator&amp;gt; calculator;
 @TestedObject
 private CalculatorWebService webservice;

 @Test
 public void result() {
  // define mock behaviour
  calculator.returns(1).result();
  // assert result
  Assert.assertEquals(1, webservice.result());
  // assert mock invocation
  calculator.assertInvoked().result();
 }
}
&lt;/pre&gt;
&lt;p&gt;Pour aller plus loin, le &lt;a href="http://unitils.org/tutorial.html"&gt;Tutorial&lt;/a&gt; d'Unitils est bien foutu.&lt;/p&gt;
&lt;p&gt;Pour ceux qui veulent maveniser tout ça:&lt;/p&gt;
&lt;pre&gt;  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;4.4&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;org.unitils&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;unitils&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;asm&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;asm&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;3.1&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;asm&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;asm-analysis&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;3.1&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;asm&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;asm-tree&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;3.1&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;org.objenesis&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;objenesis&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;org.objenesis&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;objenesis&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4187786388388296120?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4187786388388296120/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4187786388388296120' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4187786388388296120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4187786388388296120'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/unitils.html' title='Unitils++'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5183626901541375896</id><published>2009-02-05T09:39:00.000-08:00</published><updated>2009-02-05T10:02:17.551-08:00</updated><title type='text'>Le changement</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51c8zUc4WQL._SL500_AA240_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/51c8zUc4WQL._SL500_AA240_.jpg" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p&gt;Parfois dans votre vie, vous changez de paradigme, vous prenez la pilule rouge comme dans Matrix et vous voyez une autre réalité, c’est ce qu’apporte la systémique.&lt;/p&gt;
&lt;p&gt;Jacques-Antoine Malarewicz dans &lt;a href="http://www.amazon.fr/Syst%C3%A9mique-entreprise-2%C3%A8me-Jacques-Antoine-Malarewicz/dp/2744063444/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1233855662&amp;sr=8-1"&gt;Systémique et entreprise&lt;/a&gt; énonce &lt;b&gt;quelques axiomes du changement&lt;/b&gt; que j’ai repris ici : &lt;/p&gt;
• Il vaut mieux &lt;b&gt;ne pas parler de changement&lt;/b&gt; : nous participons tous au changement sans le savoir, chacun de nous est le changement&lt;br/&gt;
• Le &lt;b&gt;changement est un processus&lt;/b&gt; : chaque étape compte même si aucune d’entre elles n’est déterminante, c’est une succession d’essais et d’erreurs&lt;br/&gt;
• Le &lt;b&gt;changement est un processus complexe&lt;/b&gt; : l’idée n’est pas de contrôler une situation, mais de la provoquer et d’accompagner. Un consultant qui prétendrait contrôler une situation voudrait dire qu’il se substitue aux dirigeants de l’entreprise&lt;br/&gt;
• &lt;b&gt;Changement et non-changement vont de pairs&lt;/b&gt; : le mandant qui demande du changement va en général tout faire pour qu’il n’y ait pas de changement&lt;br/&gt;
• &lt;b&gt;Changer l’état d’esprit&lt;/b&gt; : changer d’état d’esprit, c’est un changement de vision, de paradigme&lt;br/&gt;
• Le &lt;b&gt;changement est saltatoire&lt;/b&gt; : le changement se fait par saut, avec de longues phases de stagnation&lt;br/&gt;
• Les solutions immédiates apportent moins que l’&lt;b&gt;anticipation des changements ultérieurs&lt;/b&gt;&lt;br/&gt;
• &lt;b&gt;Système complexe et changement&lt;/b&gt;: plus un système est complexe, moins il faut d’énergie pour y introduire un changement de part son instabilité, plus un système est simple plus il faut d’énergie de part sa rigidité&lt;br/&gt;
• Parfois la meilleure façon d’&lt;b&gt;introduire du changement dans une situation est de la complexifier&lt;/b&gt;&lt;br/&gt;
• Il n’est de changement que &lt;b&gt;spontané&lt;/b&gt;&lt;br/&gt;
• Le &lt;b&gt;changement provient de la marge&lt;/b&gt;, quand il est annoncé il est immanquablement mis en échec&lt;br/&gt;
• Le changement est à la fois un &lt;b&gt;processus de désapprentissage et d’apprentissage&lt;/b&gt;&lt;br/&gt;
• La compréhension et le changement : &lt;b&gt;le changement n’est pas compréhensible&lt;/b&gt;, il est préférable de répondre au comment qu’au pourquoi&lt;br/&gt;
• Il n’est de &lt;b&gt;véritables changements sans implications émotionnelles&lt;/b&gt;&lt;br/&gt;
• Le changement se produit au « &lt;b&gt;bon moment&lt;/b&gt; », au consultant de le détecter&lt;br/&gt;
• Ce sont d’&lt;b&gt;avantages des permissions que des solutions&lt;/b&gt; que le consultant extérieur doit pouvoir donner&lt;br/&gt;
• La &lt;b&gt;place du passé&lt;/b&gt; : le passé est revu dans le présent&lt;br/&gt;
• &lt;b&gt;Changer c’est rendre possible l’impossible&lt;/b&gt;&lt;br/&gt;
• &lt;b&gt;Rien n’est jamais acquis&lt;/b&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5183626901541375896?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5183626901541375896/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5183626901541375896' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5183626901541375896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5183626901541375896'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/le-changement.html' title='Le changement'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5095648742347003600</id><published>2009-02-05T01:21:00.000-08:00</published><updated>2009-02-05T01:46:57.900-08:00</updated><title type='text'>Simplicité ou complexité ?</title><content type='html'>&lt;p&gt;&lt;a href="http://fr.wikipedia.org/wiki/Extreme_programming"&gt;Extreme Programming&lt;/a&gt; propose 5 valeurs fondamentales: &lt;b&gt;communication, simplicité, feedback, courage, respect&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Je m'interroge aujourd'hui sur la valeur &lt;b&gt;simplicité&lt;/b&gt;, en effet il n'est pas toujours si évident que la simplicité crée de la valeur. La théorie des systèmes nous prouve le contraire. Dans un projet, créer 2 équipes ajoute de la complexité et peut dans certains cas créer une dynamique et une efficacité globale plus forte. La simplicité est réductrice, d'une certaine façon la simplicité me fait penser à une procédure, à la rigidité. Si un observateur regarde une équipe qui a atteint le dernier stade de maturité d’Intelligence collective, il est probable qu'il pense que c'est le bordel, c'est tout sauf simple, impossible de voir qui est le chef, l'équipe semble désorganisée. En fait, c'est tout l'inverse, l'équipe a atteint un tel niveau de maturité qu'elle est capable de changer sa structure très rapidement pour s'adapter. La complexité est souvent source de créativité. Ici s’oppose le cartésianisme, philosophie rationaliste et la systémique, philosophie irrationaliste.&lt;/p&gt;
&lt;p&gt;C’est probablement ici que réside toute la difficulté d’un consultant qui souhaite introduire les méthodes agiles chez son client : jouer entre simplicité et complexité.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5095648742347003600?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5095648742347003600/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5095648742347003600' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5095648742347003600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5095648742347003600'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/simplicite-ou-complexite.html' title='Simplicité ou complexité ?'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2798819872063890487</id><published>2009-02-02T13:03:00.000-08:00</published><updated>2009-02-02T13:17:14.384-08:00</updated><title type='text'>Recadrage de point de vue</title><content type='html'>&lt;p&gt;Le &lt;b&gt;recadrage de point de vue&lt;/b&gt; ou aussi appelée &lt;b&gt;changement de positions perceptuelles&lt;/b&gt; est une technique issue de la &lt;a href="http://fr.wikipedia.org/wiki/Programmation_neuro-linguistique"&gt;Programmation Neuro Linguistique (PNL)&lt;/a&gt; qui peut être utilisée pour gérer une situation de conflit ou plus conventionnellement de trouver un terrain d’entente. Dans le cas d’un conflit entre deux personnes, l’idée est de permettre à chacun des deux personnes de se mettre à la place de l’autre.&lt;/p&gt;
&lt;p&gt;Dans l’idéal, le recadrage se fait en trois étapes :&lt;/p&gt;
1. Chaque personne joue son propre rôle auprès du médiateur&lt;br/&gt;
2. Chaque personne se met dans la peau de l’autre personne auprès du médiateur&lt;br/&gt;
3. Chaque personne se met en position dissociée ou appelée « Méta » auprès du médiateur&lt;br/&gt;
&lt;br/&gt;
Les règles de départ de la médiation:&lt;br/&gt;
• Valider que les deux personnes souhaitent obtenir un terrain d’entente&lt;br/&gt;
• Énoncer aux deux personnes que pendant qu’une des personnes est questionnée par le médiateur, l’autre ne doit pas intervenir, elle a le droit de prendre des notes&lt;br/&gt;
&lt;br/&gt;
&lt;p&gt;Pour la position « Méta », j’utilise des figurines comme des playmobiles qui permettent de faciliter la position « Méta »&lt;/p&gt;
Ressources:&lt;br/&gt;
• &lt;a href="http://www.amazon.fr/Cas-coaching-comment%C3%A9s-Sylviane-Cannio/dp/221254149X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1233608971&amp;sr=8-1"&gt;Cas de coaching commentés&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2798819872063890487?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2798819872063890487/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2798819872063890487' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2798819872063890487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2798819872063890487'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/recadrage-de-point-de-vue.html' title='Recadrage de point de vue'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3151086347227416384</id><published>2009-02-02T02:30:00.000-08:00</published><updated>2009-02-02T13:16:12.367-08:00</updated><title type='text'>Modèle de Congruence</title><content type='html'>&lt;p&gt;Gerald M. Weinberg a complété les positions d’incongruence de Satir par le modèle suivant : Soi, Autres, Contexte.&lt;/p&gt;
&lt;p&gt;Quand nous agissons de manière congruente, nous agissons en prenons en compte consciemment ou inconsciemment des trois aires suivantes : soi, les autres, le contexte&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_I6qpNMiW2Ys/SYbL7F5C38I/AAAAAAAAAkw/5kRlsG3nuys/s1600-h/Image+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 153px; height: 155px;" src="http://3.bp.blogspot.com/_I6qpNMiW2Ys/SYbL7F5C38I/AAAAAAAAAkw/5kRlsG3nuys/s320/Image+4.png" alt="" id="BLOGGER_PHOTO_ID_5298146227702128578" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
•    &lt;span style="font-weight: bold;"&gt;Soi&lt;/span&gt; : Nous devons prendre en compte nos propres besoins et capacités. Par exemple, des managers qui essayent d’assister à chaque réunion technique consommeront tout leur temps de disponibilité pour faire leur travail de manager ou même pour pouvoir avoir une réelle contribution technique&lt;br/&gt;
•    &lt;span style="font-weight: bold;"&gt;Autres&lt;/span&gt; : Nous devons prendre en compte les besoins et les capacités des autres personnes. Par exemple si un développeur est complètement capable d’écrire du code lisible, mais refuse de le faire, alors tester ou maintenir ce code sera un fardeau&lt;br/&gt;
•    &lt;span style="font-weight: bold;"&gt;Contexte&lt;/span&gt; : Nous devons considérer la réalité du contexte dans lequel nous opérons. Si un manager d’une start-up dépensait de l’argent comme si l’entreprise possédait demi milliard d’euros dans son budget, alors il est probable que l’entreprise échoue au-delà des qualités du produit qu’elle vend et de la performance de l’équipe&lt;br/&gt;
&lt;br/&gt;
&lt;p&gt;Ce modèle peut être lié avec les postures d’incongruence de Satir. Weinberg en ajoute une nouvelle posture qui est « &lt;span style="font-weight: bold;"&gt;Aimant – Détestant&lt;/span&gt; », les personnes en action ne prennent pas en compte le contexte&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SYbMVh5bq2I/AAAAAAAAAk4/8uE5m-WXIiY/s1600-h/Image+6.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 152px; height: 149px;" src="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SYbMVh5bq2I/AAAAAAAAAk4/8uE5m-WXIiY/s320/Image+6.png" alt="" id="BLOGGER_PHOTO_ID_5298146681896545122" border="0" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
Le « &lt;span style="font-weight: bold;"&gt;Réprimandeur&lt;/span&gt; » ne prend pas en compte les autres : « Je suis tout, vous n’êtes rien »&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/SYbM7gmKHYI/AAAAAAAAAlA/goZNB7LZFS8/s1600-h/Image+7.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 132px; height: 120px;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/SYbM7gmKHYI/AAAAAAAAAlA/goZNB7LZFS8/s320/Image+7.png" alt="" id="BLOGGER_PHOTO_ID_5298147334382296450" border="0" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
La « &lt;span style="font-weight: bold;"&gt;Carpette&lt;/span&gt; » ne s’estime pas : « Je ne suis rien, vous êtes tout »&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SYbNVkufBPI/AAAAAAAAAlI/z-EiAT0Wa_k/s1600-h/Image+8.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 141px; height: 132px;" src="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SYbNVkufBPI/AAAAAAAAAlI/z-EiAT0Wa_k/s320/Image+8.png" alt="" id="BLOGGER_PHOTO_ID_5298147782167561458" border="0" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
L’ « &lt;span style="font-weight: bold;"&gt;Hyper-raisonnable&lt;/span&gt; » ne prend en compte que le contexte, il ne ressent rien en soi et dans les autres&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/SYbNqxCxM7I/AAAAAAAAAlQ/yuNYh4o_HFg/s1600-h/Image+9.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 124px; height: 124px;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/SYbNqxCxM7I/AAAAAAAAAlQ/yuNYh4o_HFg/s320/Image+9.png" alt="" id="BLOGGER_PHOTO_ID_5298148146251117490" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
Le « &lt;span style="font-weight: bold;"&gt;Distracteur&lt;/span&gt; » ne prend ni en compte lui-même, les autres et le contexte.&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SYbN92T-GII/AAAAAAAAAlY/zlxG57cDQB8/s1600-h/Image+10.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 120px; height: 123px;" src="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SYbN92T-GII/AAAAAAAAAlY/zlxG57cDQB8/s320/Image+10.png" alt="" id="BLOGGER_PHOTO_ID_5298148474082957442" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
« &lt;span style="font-weight: bold;"&gt;Aimant – Détestant&lt;/span&gt; », les personnes en action ne prennent pas en compte le contexte&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
Ressources:&lt;br/&gt;
•    &lt;a href="http://www.amazon.com/Quality-Software-Management-Congruent-Action/dp/0932633285/ref=pd_bbs_sr_2?ie=UTF8&amp;s=books&amp;qid=1233609269&amp;sr=8-2"&gt;Quality Software Management Congruent Action&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3151086347227416384?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3151086347227416384/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3151086347227416384' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3151086347227416384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3151086347227416384'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/02/modele-de-congruence.html' title='Modèle de Congruence'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_I6qpNMiW2Ys/SYbL7F5C38I/AAAAAAAAAkw/5kRlsG3nuys/s72-c/Image+4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7897997650646936984</id><published>2009-01-29T02:12:00.000-08:00</published><updated>2009-01-29T02:23:01.325-08:00</updated><title type='text'>Tests de personnalité́s</title><content type='html'>&lt;p&gt;Il existe un nombre important d’outils de personnalités: MBTI, BigFive, Ennéagramme, Structogram, et bien d’autres… Tous aussi intéressant les uns que les autres, tous aussi vrais que faux. Un outil ne vous permet pas de connaître votre personnalité tout entière, il ne vous donnera que des indications sur vous-même. Comme dit si justement Paul Valéry : &lt;i&gt;"Tout ce qui est simple est faux, mais tout ce qui ne l'est pas est inutilisable !"&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;
D’une certaine façon, un test de personnalité n’a pas plus de pertinence qu’un horoscope, ce qui est important c’est qu’il vous fait réfléchir sur vous-même, vous permet de découvrir une partie de vous même, de mieux vous accepter, d’accepter vos différences. Ce qui importe, c’est plus ce que vous en faites que le test lui-même. Avant de m’y intéresser, j’en avais déjà passé et ça n’a rien changé pour moi. Le jour où j’y décidais de m’y intéresser, j’ai pris conscience de nouvelles choses, je me suis ouvert de nouvelles portes et je me suis dit que chacun porte en lui-même les ingrédients de son bonheur (et pas le bonheur, terme indéfinissable). Il est clair que plus vous vous connaissez bien, mieux vous appréhendez le monde, mieux vous comprendrez les autres.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7897997650646936984?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7897997650646936984/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7897997650646936984' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7897997650646936984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7897997650646936984'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/01/tests-de-personnalites.html' title='Tests de personnalité́s'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8082016047981778948</id><published>2009-01-28T11:51:00.000-08:00</published><updated>2009-01-28T12:21:06.886-08:00</updated><title type='text'>Plus loin avec MBTI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51W37JQSM6L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/51W37JQSM6L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p&gt;What type am I ? est un livre en anglais qui explique simplement et clairement MBTI avec des dessins assez ludiques, je vous le conseille vivement si vous souhaitez aller plus loin avec MBTI&lt;/p&gt;
&lt;p&gt;Le livre parle aussi du "&lt;b&gt;Keirsey Temperament Sorter&lt;/b&gt;", David Keirsey a regroupé plusieurs types ensemble pour former 4 tempéraments, on appelle cet outil « Keirsey Temperament Sorter » :&lt;/p&gt;
• Les « &lt;b&gt;gardiens&lt;/b&gt; » (SJ) : sont motivés par un besoin d’être serviable. Ils aiment coller aux manières standards de faire les choses et valorisent les traditions, les coûtumes et les lois de la société&lt;br/&gt;
• Les « &lt;b&gt;artisans&lt;/b&gt; » (SP) : sont motivés par un besoin de liberté et d’action. Ils valorisent et aiment vivre dans l’ici et le maintenant&lt;br/&gt;
• Les « &lt;b&gt;rationnels&lt;/b&gt; » (NT) : sont motivés par un besoin de comprendre le monde autour d’eux. Ils valorisent les compétences et les pouvoirs de l’esprit&lt;br/&gt;
• Les « &lt;b&gt;idéalistes&lt;/b&gt; » (NF) : sont motivés par un besoin de se comprendre et de comprendre les autres. Ils valorisent l’authenticité et l’intégrité et recherche un monde idéal.&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Ressources:&lt;/b&gt;&lt;br/&gt;
•&lt;a href="http://16types.free.fr/"&gt;http://16types.free.fr/&lt;/a&gt;&lt;br/&gt;
•&lt;a href="http://fr.wikipedia.org/wiki/Myers_Briggs_Type_Indicator"&gt;http://fr.wikipedia.org/wiki/Myers_Briggs_Type_Indicator&lt;/a&gt;&lt;br/&gt;
•&lt;a href="http://en.wikipedia.org/wiki/Keirsey_Temperament_Sorter"&gt;http://en.wikipedia.org/wiki/Keirsey_Temperament_Sorter&lt;/a&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8082016047981778948?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8082016047981778948/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8082016047981778948' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8082016047981778948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8082016047981778948'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/01/plus-loin-avec-mbti.html' title='Plus loin avec MBTI'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-761369333382319154</id><published>2009-01-28T10:11:00.000-08:00</published><updated>2009-01-28T11:50:55.863-08:00</updated><title type='text'>Myers Briggs Type Indicator</title><content type='html'>&lt;h2&gt;Qu’est ce que MBTI ?&lt;/h2&gt;

&lt;p&gt;Myers-Briggs Type Indicator (MBTI) est l’indicateur de personnalité le plus utilisé au monde avec 2 millions de passations par an. Le Myers Briggs Type Indicator (MBTI) a été conçu par Katharine Cook Briggs et sa fille Isabel Briggs Myers à partir de la théorie des personnalités de Jung. C’est dans les années 30 que le psychiatre suisse Carl Gustav Jung développe son approche typologique des personnalités sur la base de sa pratique psychanalytique et d’observations historiques. Il met en évidence quatre fonctions psychologiques fondamentales (la pensée, le sentiment, la sensation, l’intuition) et deux façons de puiser de l’énergie (introversion, extraversion) L’idée centrale de sa théorie est que les variations de comportements des individus ne sont pas le fait du hasard mais qu’elles résultent de préférences spontanées concernant ces dimensions essentielles. Par exemple, une personne orientée « pensée » prendra le plus souvent et le plus facilement ses décisions de façon  rationnelle, sur la base de critères impersonnels en négligeant le plan affectif. À l’inverse, une personne orientée « sentiment » prendra davantage en considération le plan affectif dans son mode décisionnel.&lt;/p&gt;

&lt;h2&gt;Préférences et types&lt;/h2&gt;
&lt;h3&gt;Les préférences&lt;/h3&gt;


Extraversion (E)&lt;br/&gt;
- Préfère tirer de l'énergie des activités, des gens et des choses du monde extérieur&lt;br/&gt;
Introversion (I)&lt;br/&gt;
- Préfère tirer son énergie des réflexions, sentiments et idées du monde intérieur&lt;br/&gt;
Sensation (S)&lt;br/&gt;
- Préfère se concentrer sur les informations obtenues par les cinq sens et sur les applications pratiques&lt;br/&gt;
Intuition (N)&lt;br/&gt;
- Préfère se concentrer sur les structures, les rapports et les significations possibles&lt;br/&gt;
Pensée (T)&lt;br/&gt;
- Préfère fonder ses décisions sur la logique et une analyse objective des causes et des effets&lt;br/&gt;
Sentiment (S)&lt;br/&gt;
- Préfère baser ses décisions sur un processus d'appréciation, en prenant en compte ce qui est important pour les personnes&lt;br/&gt;
Jugement (J)&lt;br/&gt;
- Apprécie une approche planifiée et organisée de la vie ; préfère que des décisions soient prises&lt;br/&gt;
Perception (P)&lt;br/&gt;
- Apprécie une approche souple et spontanée ; préfère garder les options ouvertes&lt;br/&gt;

&lt;h3&gt;Passer le test&lt;/h3&gt;

&lt;a href="http://16types.free.fr/test.html"&gt;Passer le test&lt;/a&gt;

&lt;h3&gt;Les types&lt;/h3&gt;

&lt;p&gt;Les diverses combinaisons de ces préférences conduit à 16 " types " de personnalité dont chacun est associé à un ensemble unique de caractéristiques comportementales et de valeurs. Ces " types " fournissent un point de départ utile pour un retour d'expérience individualisé, une exploration de soi-même et une discussion de groupe. C'est un modèle qui ne juge pas, qui ne classe pas, qui décrit la personnalité de façon dynamique et détaillée, avec un langage simple permettant de donner un nom à des phénomènes insaisissables. Il permet de comprendre les différences afin d'en tirer parti, et donc d'accepter l'autre, non plus « malgré » mais « pour » ses différences. C'est un modèle de tolérance.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;« Qui connaît les autres est instruit. Qui se connaît est sage. » – Lao-Tseu&lt;/i&gt;&lt;/p&gt;

&lt;b&gt;ESTJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Sociable, énergique et digne de confiance. Efficace, organisé, et ferme. Aime l’administratif et diriger. Excellent dans l’organisation et dans les décisions politiques et procédures. Assertif, franc et direct. Concentrer sur la résolution de problèmes. Responsable, travailleur et orienté objectif. Cohérent, pragmatique et logique.&lt;/p&gt;

&lt;b&gt;ESFJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Enthousiaste, sociable, et charmeur. Aime être nécessaire et apprécié. Qui présente bien, compatissant, et coopératif. Aime être serviable, actif au service des organisations. Sérieux, loyal et responsable. Valorise l’harmonie et montre de l’amour de façon pratique.&lt;/p&gt;

&lt;b&gt;ISTJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Réservé, persévérant, loyal, et prudent. Méthodique, organisé et concentré sur les faits. Travailleur, minutieux, et bon dans le suivi. Pieds sur terre, pragmatique et sérieux. Tiens ses engagements. Fait ce qui est bien et attend la même chose des autres. Calme et constant dans les crises.&lt;/p&gt;

&lt;b&gt;ISFJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Consciencieux, sérieux, et coopératif. Loyal, digne de confiance, et autodiscipliné. Forte éthique de travail, termine les tâches à temps. Excellente mémoire pour les détails. Amical silencieux, prévenant et reservé. Travaille souvent derrière la scène en aidant les gens. Modeste et discret. Chaleureux, plein de tact, et doux.&lt;/p&gt;

&lt;b&gt;ESTP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Aime les risques, les défis et l’aventure. Energique, et n’arrête jamais. Vie la vie pour le plus. Alerte, confiant, et convaincant. Peut être outrancier, direct et impulsif. Compétent, plein de ressource, et répond bien aux crises. Réaliste, pragmatique, et terre à terre. Habile négociateur.&lt;/p&gt;

&lt;b&gt;ESFP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Compréhensif, généreux, coopératif, et aimant aider les autres. Amical, grégaire, énergique, plein de vivacité et charmant. Souvent la vie de la fête. Tolérant et s’acceptant soi et les autres. A le sens pratique commun. Accentue le positif. Se réjoui des nouvelles expériences et a la joie de vivre&lt;/p&gt;

&lt;b&gt;ISTP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Préfère l’action à la conversation. Aime l’aventure et le défi. Gère bien la crise. Aime travailler avec des outils, machines, et tout ce qui nécessite des talents du terrain. Plein de ressources, indépendant, et autodéterminé. Logique, réaliste et pratique. Réservé, détaché, curieux et observateur. Entrepôt d’information et de faits.&lt;/p&gt;

&lt;b&gt;ISFP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Gentil, loyal, et compatissant. Apparaît réservé et modeste. Fait des choses en silence pour les autres. Patient, tolérant et ne portant pas de jugement sur les autres. A une attitude de vivre et laisser vivre. Sensible aux conflits et désaccords. A peu besoin de dominer et contrôler les autres.&lt;/p&gt;

&lt;b&gt;ENTJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Meneur confiant qui aime être responsable. Ferme et ambitieux. Aime les échanges intellectuels. Ingénieux et plein de ressources dans la résolution de problèmes complexes. Innovant, analytique, et logique. Autodéterminé, et indépendant. Aspire à être le meilleur dans tous ce qu’il fait.&lt;/p&gt;

&lt;b&gt;ENTP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Parle sans détour et se porte bien dans les défis et les débats. Enthousiaste, charmant, grégaire, et spirituel. Valorise la liberté et l’indépendance. Innovant, entreprenant et plein de ressource. Spontané et impulsif. Preneur de risques qui est en alerte de toutes les possibilités. Inquisiteur et curieux.&lt;/p&gt;

&lt;b&gt;INTJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Indépendant et individualiste. Possède une grande intuition et vision. Talentueux dans la création de théories et de systèmes. Conduit lui même et les autres vers des objectifs et des progrès personnels. Organisé, determiné, bon dans le suivi. Responsable, réservé et tranquille&lt;/p&gt;

&lt;b&gt;INTP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Analytique et brillant. Résout les problèmes de manière conceptuel et pense de manière originale. Particulier et non conformiste. Valorise la précision des pensées et du langage. Remarque les inconsistances, les contradictions et les défauts dans la pensée des autres. Indépendant, curieux, et perspicace.&lt;/p&gt;

&lt;b&gt;ENFJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Aimable, charmant, enthousiaste, et actif socialement. Parleur persuasif et enthousiasme, meneur charismatique qui motive les autres. Empathique, chaleureux, serviable et d’un grand secours. Peux idéaliser les gens et les relations. Responsable, consciencieux et orienté objectif. Diplomate et bon à promouvoir l’harmonie.&lt;/p&gt;

&lt;b&gt;ENFP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Plein d’entrain, serviable, tolérant, et compatissant. Plein d’enthousiaste et de nouvelles idées. Valorise la liberté et l’autonomie. Bon en communication et inspirant l’action. Créatif, spontané, positif, et qui aime s’amuser. Individualiste et perspicace.&lt;/p&gt;

&lt;b&gt;INFJ&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Suceptible, intérieur, et parfois mystique. Tenace concernant ses valeurs personnelles et convictions. Possède une riche vie intérieure, et valorise l’intégrité personnelle. Créatif, original, et idéaliste. Resérvé, doux, et compatissant. Aime la solitude, a un besoin fort d’harmonie. Conscientieux, déterminé, et persérvérant.&lt;/p&gt;

&lt;b&gt;INFP&lt;/b&gt;&lt;br/&gt;
&lt;p&gt;Dévoue, compatissant, ouvert d’esprit, et doux. Déteste les règles, les ordres, les calendriers, et les dates butoir. Aime apprendre et être absorbé dans ses propres projets. A des convictions passionnées et recherche des idéaux. Se fixe des hauts niveaux pour lui même. Idéaliste, susceptible et créative. Peut être réservée et contemplative.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-761369333382319154?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/761369333382319154/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=761369333382319154' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/761369333382319154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/761369333382319154'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/01/myers-briggs-type-indicator.html' title='Myers Briggs Type Indicator'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6778534117298633288</id><published>2009-01-28T09:41:00.000-08:00</published><updated>2009-01-28T10:05:37.969-08:00</updated><title type='text'>Se libérer de sa culpabilisation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51NE41dWBkL._SL500_AA240_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 240px;" src="http://ecx.images-amazon.com/images/I/51NE41dWBkL._SL500_AA240_.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;p&gt;
Étant conscient que le sentiment de culpabilité est souvent responsable de notre mal-être, je me suis procuré un livre sur le sujet : « &lt;a href="http://www.amazon.fr/Etre-sans-culpabiliser-Sarah-Famery/dp/2212539959/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1233164700&amp;sr=8-1"&gt;Être soi sans culpabiliser&lt;/a&gt; » de Sarah Famery.
Ce livre est simplificateur et donne quelques pistes qui permettent de mieux comprendre les origines de notre culpabilisation
Ce sentiment de culpabilisation est présent fréquemment, quand une personne rejoint une équipe, quand une personne est en conflit, ...&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;p&gt;
J’ai découvert que le sentiment de culpabilité pouvait se traduire de 5 façons différentes:&lt;/p&gt;
•    &lt;span style="font-weight: bold;"&gt;Le sentiment de « ne pas être assez bien »&lt;/span&gt; : la personne qui vit ce sentiment a l’impression de ne jamais mériter l’estime et nourrit l’idée que les autres sont toujours plus intéressants. Ce sentiment peut venir d’un manque d’amour ou de reconnaissance ou d’une difficulté qu’a eu la personne à s’imposer, se faire accepter. Une très forte exigence d’un parent, d’un professeur, patron, conjoint, peut peser sur la personne et lui faire penser que, quoi qu’elle fasse, elle n’est jamais assez bien. La personne est dans la &lt;span style="font-weight: bold;"&gt;non-estime de soi&lt;/span&gt;.&lt;br/&gt;
•    &lt;span style="font-weight: bold;"&gt;Le sentiment de « mal faire »&lt;/span&gt; : la personne qui vient ce sentiment, craint de ne pas « bien » faire. La personne dans cette situation croit que les autres feront mieux à sa place. Cette personne est attachée à des modèles très forts, en particulier si elle a reçu une éducation très normative et moraliste ou a subit beaucoup de reproches de personnes importantes à ses yeux ou s’est vu imposer du parent du même sexe un modèle d’intelligence, compétence, … ou a vécu avec des personnes qu’il a tendance à idéaliser. La personne vit dans l’&lt;span style="font-weight: bold;"&gt;omniprésence du bien&lt;/span&gt;.&lt;br/&gt;
•    &lt;span style="font-weight: bold;"&gt;Le sentiment de « ne pas être comme il faut »&lt;/span&gt; : la personne a l’impression de ne pas être comme il faut, de rentrer dans le « moule » par rapport à autrui, un parent ou un milieu social. La notion de devoir est ici dominante. Cette impression vient de vécus dans des milieux souvent rigides. Elle peut venir aussi d’un besoin d’intégration de la personne. Ou si les parents désirent à la place de l’enfant de sa situation future. La personne est en &lt;span style="font-weight: bold;"&gt;attente de l’autre&lt;/span&gt;.&lt;br/&gt;
•    &lt;span style="font-weight: bold;"&gt;Le sentiment de « faire du mal »&lt;/span&gt; : la personne culpabilise si elle fait quelque chose pour elle, pour son plaisir car elle a l’impression de faire du mal, du tort à autrui. Dans notre culture, nous sommes souvent accusés d’égoïsme. La notion de sacrifice est répandue par exemple le sacrifice pour sa famille. La personne pense &lt;span style="font-weight: bold;"&gt;les autres d’abord&lt;/span&gt;. La personne a pu être l’objet de chantages affectifs par ses parents lui demandant de faire pour ses parents.&lt;br/&gt;
•    &lt;span style="font-weight: bold;"&gt;Le sentiment de « ne pas avoir de droit »&lt;/span&gt; : La personne a le sentiment qu’elle n’a pas le droit de penser ou de faire quelque chose. Quoi qu’elle fasse, la personne culpabilise car elle estime qu’elle n’a pas le droit de le faire. Cela remonte à des interdits très forts dans l’enfance ou à l’expérience d’une personne écrasante ou à des histoires personnelles où la personne n’avait pas le droit d’exister. La personne &lt;span style="font-weight: bold;"&gt;manque de place&lt;/span&gt;.&lt;br/&gt;
&lt;p&gt;
Pour se libérer de ses culpabilités, il convient avant tout de les détecter, puis de faire des liens avec son environnement ou des personnes en relation avec cette culpabilité et ensuite d’en chercher des origines plus anciennes.&lt;/p&gt;
&lt;p&gt;
Ce que j’ai remarqué, c’est que la petite voix qui me dit « Il faut ou il faudrait que je fasse ceci » ou que « j’aurai dû faire ceci » va tester ma culpabilité. Pour échapper à cela, je me dis « je peux faire ceci » ou « je peux choisir de faire ceci » et le fait de faire ce travail de reformulation me permet de me responsabiliser par rapport à la situation.&lt;/p&gt;

&lt;p&gt;Quelques citations pour finir :
&lt;span style="font-style: italic;"&gt;« Quand on cède à la peur du mal, on ressent déjà le mal de la peur. »&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;Beaumarchais, Le Barbier de Séville.&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;« C'est une perfection de n'aspirer point à être parfait.»&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;Fénelon&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;« J'ai le droit d'être idiote ou intelligente. Et j'ai aussi le droit d'être les deux à la fois. Je refuse d'adopter seulement l'une de ces deux attitudes. » Björk&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6778534117298633288?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6778534117298633288/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6778534117298633288' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6778534117298633288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6778534117298633288'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/01/etant-conscient-que-le-sentiment-de.html' title='Se libérer de sa culpabilisation'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1350190540174958100</id><published>2009-01-21T07:41:00.000-08:00</published><updated>2009-01-29T08:36:55.715-08:00</updated><title type='text'>Positions d’incongruence</title><content type='html'>On dit qu’une personne est &lt;span style="font-weight: bold;"&gt;congruente&lt;/span&gt; quand sa communication verbale et non-verbale adresse le même message.
La communication verbale est celle qui est exprimée par les mots.
La communication non-verbale est celle qui exprimée par :
&lt;ul&gt;&lt;li&gt;L’expression du visage&lt;/li&gt;&lt;li&gt;La position du corps&lt;/li&gt;&lt;li&gt;La tension des muscles&lt;/li&gt;&lt;li&gt;Le rythme de la respiration&lt;/li&gt;&lt;li&gt;Le ton de la voix&lt;/li&gt;&lt;li&gt;Les gestes
&lt;/li&gt;&lt;/ul&gt;Si les deux ne sont pas en accord, le message est double et donc perturbe la communication avec son interlocuteur.

Les principales causes d’incongruence sont :
&lt;ul&gt;&lt;li&gt;Ne pas s’estimer&lt;/li&gt;&lt;li&gt;Avoir peur de blesser quelqu’un d’autre&lt;/li&gt;&lt;li&gt;Se soucier des représailles des autres&lt;/li&gt;&lt;li&gt;Avoir peur d’une rupture de la relation&lt;/li&gt;&lt;li&gt;Ne pas vouloir s’imposer&lt;/li&gt;&lt;li&gt;Être centré sur soi et ne pas attacher d’importance à l’autre ou la relation&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://fr.wikipedia.org/wiki/Virginia_Satir"&gt;Virginia Satir&lt;/a&gt;, thérapeute familiale, a décrit 4 postures principales d'incongruence:
&lt;ul&gt;&lt;li&gt;La "&lt;span style="font-weight: bold;"&gt;Carpette&lt;/span&gt;": c'est celui qui dit toujours oui, qui s'excuse tout le temps, qui ne veut jamais être en désaccord dans tous les cas, qui est reconnaissant quand quelqu'un vient lui parler. Il est responsable de tout, c'est le martyre, le lèche-botte, le mendian. Sa voix est pleurnicheuse. Il est peu vaillant, vouté, prêt à prendre des coups&lt;/li&gt;&lt;li&gt;Le "&lt;span style="font-weight: bold;"&gt;Réprimandeur&lt;/span&gt;": c'est celui qui accuse, qui cherche un bouc émissaire, un chef qui agit de manière supérieure, c'est celui qui dit: "c'est de ta faute". Sa voix est dure, ferme, souvent stridente et forte. Son corps est accusateur, il pointe du doigt. Il préfère évacuer les choses que de se renseigner. Son visage fait la grimace, ses lèvres sont plissées, ses narines dilatées, appelant des noms, prêt à critiquer tout ce qui est visible&lt;/li&gt;&lt;li&gt;L'"&lt;span style="font-weight: bold;"&gt;Hyper-raisonnable&lt;/span&gt;": c'est celui qui est raisonnable, calme, qui ne montre pas ses sentiments, qui garde son sang-froid, qui utilise des phrases en longueur avec des mots compliqués et abstrait.  Son corps est souvent immobile. Sa voix est monotone, sèche et détachée. Ce qui est important pour l'"Hyper raisonnable", c'est de paraître intelligent. En adoptant cette attitude, les autres ne nous écoutent plus au bout de quelques minutes. Cette posture peut paraître pour beaucoup la bonne attitude à adopter: "Dis les bons mots, ne montre aucun ressenti et ne réagit pas"&lt;/li&gt;&lt;li&gt;Le "&lt;span style="font-weight: bold;"&gt;Distracteur&lt;/span&gt;": ce qu'il dit ou fait est hors propos de ce que les autres sont en train de dire ou de faire. La voix est souvent chantante et en décalage par rapport aux mots. Il ignore les questions des autres et lance sans arrêt de nouveaux sujets. Son corps part dans différentes directions, les yeux ne sont pas fixes, les genoux sont dans un sens, les bras dans un autre, la tête instable.&lt;/li&gt;&lt;/ul&gt;Il existe bien sûr une posture congruente. Tous les messages vont dans la même direction, les mots sont en accord avec l’expression du visage, la position du corps et le ton de la voix. Les relations sont simples, libres et honnêtes et les gens ne se sentent pas menacés dans leur amour-propre. Quand vous êtes dans cette posture, vous vous excusez quand vos actes ne sont pas en accord avec vos intentions. Vous pouvez juger des actes mais pas des personnes. Habituellement vous êtes aussi capable de proposer de nouvelles alternatives. Dans cette posture, la personne exprime ses émotions. Le message est unique. Vous vous sentez bien en leur présence.

Les postures d'incongruence sont des postures que nous avons tous appris. Certains messages que nous avons reçus renforcent ces postures:
&lt;ul&gt;&lt;li&gt;"Ne t’impose pas, c’est égoïste de demander des choses pour soi" renforce une posture "Carpette"&lt;/li&gt;&lt;li&gt;"Ne te laisse rabaisser par personne, ne sois pas un lâche" renforce une posture "Réprimandeur"&lt;/li&gt;&lt;li&gt;"Ne sois pas si stupide, tu es trop intelligent pour faire des erreurs" renforce la posture "Hyper raisonnable"&lt;/li&gt;&lt;li&gt;"Ne sois pas sérieux, laisse tomber ! Qui s’en inquiète ?" renforce la posture "Distracteur"&lt;/li&gt;&lt;/ul&gt;
Toutes ces postures ne sont pas sans rapport avec les positions de vie de l'Analyse Transactionnelle et le triangle infernal (Persécuteur, Sauveur, Victime)

Ce que propose Virginia Satir, c'est de jouer avec d'autres personnes ces postures pendant une période de 5 minutes et de partager ce que l'on ressent. Si vous pouvez développer vos capacités d'écoute de votre corps et de vous mettre en position "Meta", vous serez probablement capable de changer la relation dans laquelle vous êtes pour aller vers une relation plus "nourrissante" ou arrêter la relation si vous pensez qu'elle n'apporte rien.

Références:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/New-Peoplemaking-Virginia-Satir/dp/0831400706/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1232554596&amp;amp;sr=8-1"&gt;Virginia Satir, The &lt;i&gt;New Peoplemaking&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Quality-Software-Management-Congruent-Action/dp/0932633285/ref=pd_bbs_sr_2?ie=UTF8&amp;s=books&amp;qid=1233246628&amp;sr=8-2"&gt;Gerald M. Weinberg, Quality Software Management - Volume 3 - Congruent Action&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1350190540174958100?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1350190540174958100/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1350190540174958100' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1350190540174958100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1350190540174958100'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/01/positions-dincongruence.html' title='Positions d’incongruence'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8855935485479113521</id><published>2009-01-16T06:53:00.001-08:00</published><updated>2009-01-16T07:25:45.816-08:00</updated><title type='text'>Blog en anglais sur le coaching ?</title><content type='html'>&lt;p&gt;En ce moment, je ne publie d'articles, ce n'est pas parce que j'ai moins d'idées, bien au contraire, en fait je les écris mais ne les publie plus. Je suis tout simplement en train de changer. Le changement est spontané et n'épargne personne même si notre nature profonde d'être humain n'aime pas le changement. Je suis en train de changer et j'ai l'envie irrésistible de changer de blog.&lt;/p&gt;
&lt;p&gt;
J'ai changé de lectures: mes bouquins sur Spring et autres frameworks J2EE ont été remplacés par des bouquins sur le coaching, le coaching d'équipe et la systémique. Les deux sujets sont importants mais pour autant je ne me vois pas traiter les deux sujets en même temps. De plus, j'ai envie d'écrire en anglais pour toucher une population plus large. L'effort est conséquent mais en vaut la peine.&lt;/p&gt;
&lt;p&gt;
Mon nouveau blog parlera toujours d'agilité et sera complété par du coaching d'équipe, d'organisation, des outils de coaching, des sujets qui sont complémentaires à l'agilité et qui permettent d'adapter les méthodes agiles au contexte des clients. J'aimerai pouvoir apporter aux coachs agiles si je peux de nouvelles perspectives pour accompagner leurs clients vers le changement.&lt;/p&gt;
&lt;p&gt;
Je souhaite faire des fiches de lecture des livres que je lis et qui m'ont apporté.&lt;/p&gt;
&lt;p&gt;
Tout un programme, une nouvelle année, plein de nouvelles résolutions ;-)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8855935485479113521?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8855935485479113521/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8855935485479113521' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8855935485479113521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8855935485479113521'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2009/01/blog-en-anglais-sur-le-coaching.html' title='Blog en anglais sur le coaching ?'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1207046641618247453</id><published>2008-12-03T08:59:00.000-08:00</published><updated>2008-12-03T09:05:18.154-08:00</updated><title type='text'>Stade de développement d'une équipe</title><content type='html'>Dans des projets de réalisation, un bon processus bien appliqué ne suffit pas toujours à la réussite du projet. Il est nécessaire que les individus travaillant sur ce projet possèdent un bon niveau de performance collective pour pouvoir atteindre l'objectif du projet. Chaque équipe réagit différemment en fonction du contexte, de la culture d'entreprise, des individus en présence et du projet à réaliser. Certaines équipes fonctionnent mieux que d'autres et obtiennent de meilleurs résultats.&lt;br/&gt;&lt;br/&gt;
C'est fort de ce constat qu'intervient la notion de stade de développement d'une équipe:&lt;br/&gt;&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/STa7wfqXqvI/AAAAAAAAAjY/FJndQOMXsts/s1600-h/Image+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 229px;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/STa7wfqXqvI/AAAAAAAAAjY/FJndQOMXsts/s320/Image+1.png" alt="" id="BLOGGER_PHOTO_ID_5275610455318440690" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
•    Premier stade: équipe désorganisée, chaque membre vérifie s'il fait partie de l'équipe, les objectifs sont divergents, chacun est tourné sur soi et crée une relation de dépendance vers un leader s'il y en a un, les membres ne se connaissent pas bien et se méfient les uns des autres&lt;br/&gt;&lt;br/&gt;


•    Deuxième stade: équipe organisée, l'équipe s'organise autour d'un leader, la vision de l'équipe est celle du leader, les communications inter-membres sont faibles, il est fréquent de voir une certaine compétition entre les membres de l'équipe
&lt;br/&gt;&lt;br/&gt;

•    Dernier stade: l'équipe est auto-organisée, l'équipe se responsabilise collectivement, les membres communiquent beaucoup, les membres sont peu spécialisés, l'énergie est collective et tournée vers l'objectif commun
&lt;br/&gt;&lt;br/&gt;

A chaque fois que l'équipe accueille un nouveau membre ou en perd un, elle retombe au premier stade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1207046641618247453?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1207046641618247453/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1207046641618247453' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1207046641618247453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1207046641618247453'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/12/stade-de-dveloppement-dune-quipe.html' title='Stade de développement d&apos;une équipe'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_I6qpNMiW2Ys/STa7wfqXqvI/AAAAAAAAAjY/FJndQOMXsts/s72-c/Image+1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1479588404492531488</id><published>2008-11-13T02:00:00.000-08:00</published><updated>2009-07-04T01:18:25.999-07:00</updated><title type='text'>Code smell</title><content type='html'>Un "code smell" ou code qui ne sent pas bon est un indicateur de qualité du code. Plus le code est de qualité, plus il est lisible, moins il y a de bugs, plus il est partagé par plusieurs développeurs, plus il est amélioré, plus la qualité augmente. L'impact est que la vélocité de l'équipe augmente car le code est plus simple, plus lisible et plus la confiance de l'équipe dans l'application est importante.

Les principaux "code smell":
&lt;ul id="cptb0"&gt;&lt;li id="tik.0"&gt;Duplication de code&lt;/li&gt;&lt;li id="xhst"&gt;Méthode trop grosse &gt; 10 lignes&lt;/li&gt;&lt;li id="tik.2"&gt;Classe trop grosse &gt; 1/2 page
&lt;/li&gt;&lt;li id="tik.5"&gt;Une classe qui exploite trop une autre classe
&lt;/li&gt;&lt;li id="tik.6"&gt;Une classe qui a une dépendance sur l'implémentation d'une classe
&lt;/li&gt;&lt;li id="tik.7"&gt;Une classe dont des méthodes surchargent celles de la classe en déformant la fonctionnalité initiale
&lt;/li&gt;&lt;li id="ibvj0"&gt;Une classe faignante, qui ne fait rien&lt;/li&gt;&lt;li id="tik.12"&gt;Méthode dupliquée
&lt;/li&gt;&lt;li id="tik.13"&gt;Sur-complexité due à l'utilisation excessive de patterns, qui ne sont pas nécessaire
&lt;/li&gt;&lt;/ul&gt;
&lt;b id="dt7o1"&gt;&lt;span id="dt7o2"  style="font-size:130%;"&gt;Références&lt;/span&gt;&lt;/b&gt;

&lt;ul id="tik.18"&gt;&lt;li id="tik.19"&gt;&lt;a id="tik.20" href="http://c2.com/cgi/wiki?CodeSmell" class="external text" title="http://c2.com/cgi/wiki?CodeSmell" rel="nofollow"&gt;CodeSmell at c2.com&lt;/a&gt;&lt;/li&gt;&lt;li id="tik.21"&gt;&lt;cite class="book" style="font-style: normal;" id="Reference-Fowler-1999"&gt;&lt;a id="tik.22" href="http://en.wikipedia.org/wiki/Martin_Fowler" title="Martin Fowler"&gt;Fowler, Martin&lt;/a&gt; (1999). &lt;i id="tik.23"&gt;Refactoring. Improving the Design of Existing Code&lt;/i&gt;. Addison-Wesley. &lt;a id="tik.24" href="http://en.wikipedia.org/wiki/Special:BookSources/0201485672" class="internal"&gt;ISBN 0-201-48567-2&lt;/a&gt;.&lt;/cite&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1479588404492531488?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1479588404492531488/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1479588404492531488' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1479588404492531488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1479588404492531488'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/11/code-smell.html' title='Code smell'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5784067810951154072</id><published>2008-10-18T13:00:00.000-07:00</published><updated>2008-10-18T13:03:13.033-07:00</updated><title type='text'>Motivation dans une équipe agile</title><content type='html'>&lt;span style="font-size:180%;"&gt;Introduction&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;

La motivation est essentielle pour atteindre ses objectifs personnels. Pour être motivé, nous devons satisfaire une partie des besoins suivants en fonction de sa personnalité:
&lt;ul&gt;&lt;li&gt;besoin d'autonomie&lt;/li&gt;&lt;li&gt;besoins de réalisation, d'accomplissement&lt;/li&gt;&lt;li&gt;besoins de pouvoir
&lt;/li&gt;&lt;li&gt;besoins d'affiliation, d'appartenance sociale&lt;/li&gt;&lt;li&gt;besoin de compétences&lt;/li&gt;&lt;li&gt;besoin d'estime de soi&lt;/li&gt;&lt;li&gt;besoin d'intimité&lt;/li&gt;&lt;/ul&gt;
Certains facteurs permettent d'augmenter notre motivation:
&lt;ul&gt;&lt;li&gt;la variété des tâches&lt;/li&gt;&lt;li&gt;la possibilité de réaliser des tâches entièrement&lt;/li&gt;&lt;li&gt;la signification des tâches&lt;/li&gt;&lt;li&gt;un retour sur son activité&lt;/li&gt;&lt;li&gt;l'importance de la tâche pour soi&lt;/li&gt;&lt;li&gt;l'assurance d'obtenir ce que l'on souhaite en retour si on réalise l'action&lt;/li&gt;&lt;li&gt;la confiance dans le succès de la tâche
&lt;/li&gt;&lt;li&gt;un rapport d'égalité avec les autres membres d'une équipe
&lt;/li&gt;&lt;li&gt;le plaisir&lt;/li&gt;&lt;li&gt;l'esthétisme&lt;/li&gt;&lt;li&gt;les relations avec les autres
&lt;/li&gt;&lt;/ul&gt;
Extrait de wikipedia:

"La théorie de l’autodétermination parle de « motivation autodéterminée » quand le besoin d'autonomie joue un rôle prioritaire ; elle y ajoute le besoin de compétence et le besoin d’appartenance sociale ; trois besoins psychologiques formant selon elle la base de la motivation humaine.
Certaines sources de motivation font appel à la cognition, comme par exemple, les buts que nous nous fixons et les valeurs auxquelles nous adhérons."
&lt;span style="font-size:180%;"&gt;&lt;br/&gt;&lt;br/&gt;
La motivation dans une équipe agile&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;

Le manifeste agile nous dit bien que les personnes et leurs interactions sont plus importantes que les outils et les méthodes.
Un contexte agile développe la motivation des membres d'une équipe par la variété des tâches (pratique code collectif), un retour sur son activité (pratique feedback), la confiance dans le succès de la tâche (pratiques conception simple et petites livraisons), un rapport d'égalité entre les membres de l'équipe (pas de différentiation entre développeur, concepteur, architecte), l'importance de la tâche (priorisation du backlog, vision du produit), le plaisir (jeu du planning game, post-it, ateliers participatifs, ...), l'autonomie accordée (chacun est responsable de toutes les parties du code, rétrospective: l'équipe parle en son nom)

D'un point de vue cognitif, la motivation se développe si on connaît le but du produit (c'est à dire la vision) que l'on réalise et si nous adhérons aux valeurs exprimées par les méthodes agiles: communication, courage, respect, simplicité, feedback.

Concrêtement, pour augmenter la motivation de l'équipe, il faut travailler sur tous les aspects en même temps, favoriser le rapprochement entre les gens, être transparent sur ce que l'on fait et pourquoi on le fait, jouer, s'enthousiasmer, prendre le temps de créer une équipe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5784067810951154072?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5784067810951154072/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5784067810951154072' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5784067810951154072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5784067810951154072'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/10/motivation-dans-une-quipe-agile.html' title='Motivation dans une équipe agile'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6807074244878230204</id><published>2008-09-27T08:22:00.000-07:00</published><updated>2008-09-27T08:28:58.505-07:00</updated><title type='text'>Agile tour 2008</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.agiletour.com/sites/default/files/logo.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://www.agiletour.com/sites/default/files/logo.jpg" alt="" border="0" /&gt;&lt;/a&gt;
Le démarrage d'&lt;a href="http://www.agiletour.com/"&gt;Agile tour 2008&lt;/a&gt; est pour bientôt, la première étape est à Besançon le 1er octobre
Les sessions sont gratuites donc n'hésitez pas à venir pour découvrir ou redécouvrir les méthodes agiles.



Les conférences traitent des sujets suivants: &lt;ul&gt;&lt;li&gt; La gestion de projets agiles (eXtreme Programming, Scrum, Lean Software Development, Crystal, DSDM, etc.) &lt;/li&gt;&lt;li&gt; La communication dans l’entreprise &lt;/li&gt;&lt;li&gt; Le management d’équipe &lt;/li&gt;&lt;li&gt; Les aspects financiers &lt;/li&gt;&lt;li&gt; Les contrats &lt;/li&gt;&lt;li&gt; Les entreprises agiles &lt;/li&gt;&lt;li&gt; Les outils &lt;/li&gt;&lt;li&gt; La qualité &lt;/li&gt;&lt;li&gt; La performance &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6807074244878230204?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6807074244878230204/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6807074244878230204' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6807074244878230204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6807074244878230204'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/agile-tour-2008.html' title='Agile tour 2008'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7158046442907186961</id><published>2008-09-25T06:34:00.001-07:00</published><updated>2008-09-25T06:34:46.877-07:00</updated><title type='text'>Lecture de temperature</title><content type='html'>&lt;p&gt;Dans les rétrospectives de projets agiles, il est courant de demander aux participants de dire ce qu’ils ont aimé dans l’itération, ce qu’ils voudraient améliorer et ce sur quoi ils se posent des questions. Ensuite, on définit un plan d’actions pour la prochaine itération. C’est pas mal mais on peut s’ennuyer à la longue ;-)&lt;/p&gt;
&lt;p&gt;Il est possible de fonctionner différemment au moyen de la technique inventée par Virginia Satir qui est le Temperature reading ou lecture de température, qu’elle utilisait avec les familles avec lesquelles elle travaillait.&lt;/p&gt;
&lt;p&gt;Vous trouverez le détail dans &lt;a href="http://www.dhemery.com/pdf/temperature_reading.pdf"&gt;l'excellent article de Dale H. Emery&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;J’ai vraiment apprécié l’exercice pour ce qu’il apporte: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Les appréciations faites aux autres sont moteurs d’énergie et même d’amour. Par exemple, quand j’ai dit: “Je t’apprecie Emilie pour le travail que tu as fait sur XXX, pour l’energie …, la confiance que tu m’as accordé, …”, j’ai cru que je lui faisais une déclaration d’amour ;). Ce travail d’appréciation met le cercle dans un état de synergie incroyable. &lt;/li&gt;
&lt;li&gt; Les questions permettent de poser la problématique. Le fait d’avoir fait le travail d’appréciation fait que chaque personne est connectée l’une à l’autre et donc que les questions des uns sont aussi les questions des autres&lt;/li&gt;
&lt;li&gt; Les plaintes et recommandations permettent de résoudre les limites actuelles et donc permettent de créer un circuit neuronal qui sera suivi dans le futur&lt;/li&gt;
&lt;li&gt; Les nouvelles informations permettent de changer sa représentation du futur&lt;/li&gt;
&lt;li&gt; Les espoirs et souhaits focalisent les membres du cercle vers une vision beaucoup plus fines de ce qu’ils souhaitent. Cela permet de conclure.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;Merci à Bernard pour l’animation et Emmanuel pour les compléments d’informations&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7158046442907186961?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7158046442907186961/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7158046442907186961' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7158046442907186961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7158046442907186961'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/lecture-de-temperature.html' title='Lecture de temperature'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4187341376418839050</id><published>2008-09-23T14:11:00.001-07:00</published><updated>2008-09-23T14:11:38.469-07:00</updated><title type='text'>Core protocols: Bilan</title><content type='html'>J’avais écrit &lt;a href="http://jfhelie.blogspot.com/2008/05/coreprotocols.html"&gt;un article sur les core protocols&lt;/a&gt; quand je les ai découverts. Après 6 mois, j’aimerai faire un bilan.&lt;/p&gt;
&lt;h3&gt; Ce que je trouve bien&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Les cores protocols nous posent la problématique qu’il est difficile de travailler en équipe et que pour bien travailler en équipe les membres de cette équipe doivent adopter une certaine attitude&lt;/li&gt;
&lt;li&gt; Ils nous apprennent à faire un retour positif à quelqu’un en lui montrant ce qu’on a aimé en premier&lt;/li&gt;
&lt;li&gt; Ils nous apprennent qu’il est plus efficace de demander de l’aide à quelqu’un quand on n’a pas de solutions et de ne pas attendre. C’est assez logique, si vous cherchez quelque chose de spécifique dans un supermarché, il est probable que la manière la plus efficace est de demander à un vendeur où se trouve le produit&lt;/li&gt;

&lt;li&gt; Ils nous apprennent qu’ils est intéressant pour les participants d’une réunion de savoir ce qu’attend l’autre&lt;/li&gt;
&lt;li&gt; Ils nous apprennent que pour créer un engagement collectif, il est important que chacun connaisse les objectifs personnels de chacun&lt;/li&gt;
&lt;li&gt; Ils nous apprennent qu’une équipe bien engagée peut produire des résultats bien supérieur à l’habituel.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Ce qui me déplaît&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Les cores protocols comme le nom l’indique protocolise la communication en équipe, ce qui fait que les relations entre les personnes sont “inhumaines”&lt;/li&gt;

&lt;li&gt; Les cores protocols sont “inhumains”&lt;/li&gt;
&lt;li&gt; Le checkin fait penser que l’on appartient à une secte&lt;/li&gt;
&lt;li&gt; Le protocole check est tout simplement insupportable&lt;/li&gt;
&lt;li&gt; Les cores&amp;nbsp;protocoles considérent les humains comme des produits&lt;/li&gt;
&lt;li&gt; La GROSSE ERREUR des protocols est de voir la communication uniquement sous le volet “Parole”, or 80% de notre communication est non orale&lt;/li&gt;
&lt;li&gt; Les core protocols donnent l’impression d’être un handicapé de la communication en n’offrant aucune liberté&lt;/li&gt;

&lt;li&gt; Le mot “booted” ne signifie rien pour moi, car je suis “booted” depuis que je suis né car je suis vivant avec une certaine autonomie, à la naissance je sais respirer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Conclusion&lt;/h3&gt;
&lt;p&gt;Pour bien travailler en équipe, il semble évident que les membres doivent adopter une certaine attitude.  Cette attitude se base sur des principes humains: d’écoute, de respect, de partage,… Les core protocols n’apportent rien de nouveau en cela, il suffit de lire &lt;a href="http://www.amazon.fr/Habits-Highly-Effective-People-Miniature/dp/0762408332"&gt;7 habits for effective people&lt;/a&gt; pour cela. Pour l’appliquer, il faut tout une vie, car en essayant de comprendre les autres, c’est soi-même que l’on comprend. Les core protocols se veulent des raccourcis simplistes à la construction d’une équipe alors que c’est l’équipe qui choisit d’être une équipe et un groupe ne devient pas une équipe parce qu’il applique les protocols.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4187341376418839050?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4187341376418839050/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4187341376418839050' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4187341376418839050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4187341376418839050'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/core-protocols-bilan.html' title='Core protocols: Bilan'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8847859427876704139</id><published>2008-09-17T05:30:00.000-07:00</published><updated>2008-09-17T05:31:25.792-07:00</updated><title type='text'>Soirée Coaching au Dôjô</title><content type='html'>Hier j’ai assisté à une soirée d’information sur la formation au coaching organisée par l’équipe &lt;a href="http://www.ledojo.fr/"&gt;Le dôjô&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le lieu est sympa, &lt;a href="http://maps.google.com/maps/ms?f=q&amp;amp;hl=fr&amp;amp;geocode=&amp;amp;ie=UTF8&amp;amp;msa=0&amp;amp;msid=112377499611540326055.00045714aea4fded46fb1&amp;amp;ll=48.842294,2.349422&amp;amp;spn=0.007315,0.01796&amp;amp;z=16"&gt;juste à côté de la rue mouffetard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Jane Turner et Bernard Hévin étaient les animateurs de cette soirée, on était une vingtaine de personnes dans la salle, j’étais assez curieux de connaître les profils des gens dans la salle mais bon j’ai pas eu de réponse.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sfcoach.org/annuaires/fiches/fiche38.htm"&gt;Jane Turner&lt;/a&gt; commence en nous présentant son parcours et nous explique que cela fait bientôt 15 ans qu’ils coaniment le Dôjô avec &lt;a href="http://www.sfcoach.org/annuaires/fiches/fiche25.htm"&gt;Bernard Hévin&lt;/a&gt;. Jane Turner semble être focalisée sur le coaching et la thérapie individuel. Bernard Hévin semble plus sensible au coaching d’entreprise en particulier coaching d’équipe et d’organisation, ça tombe bien c’est ça qui m’intéresse ;-).&lt;/p&gt;
&lt;h3&gt; Introduction&lt;/h3&gt;

&lt;p&gt;Ils nous racontent que les clients viennent en mode curatif plutôt qu’en mode préventif, c’est sans doute lié à la culture française qui n’est pas trop sensible au développement personnel contrairement à la culture américaine. Pour eux, même pour du coaching professionnel, il est nécessaire de construire un projet de vie. Les vies personnelle, familiale, professionnelle sont liées et donc pour avoir un vrai changement il faut lier l’ensemble (approche systémique). Ils nous exposent aussi leur problématique face à des patients qui viennent non pas pour être soignés d’un point de vue thérapeutique mais plus pour un problème d’identité dans un monde changeant. Le coaching est bien faire un état des lieux au présent pour aller vers un futur choisi&lt;/p&gt;
&lt;h3&gt; Présentation de leur démarche de coaching&lt;/h3&gt;
&lt;p&gt;Deux modèles:&lt;/p&gt;
&lt;ul class="minus"&gt;
&lt;li&gt; Modèle dit “Relationnel”&lt;/li&gt;
&lt;li&gt; Modèle dit “Disciplinaire”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le modèle relationnel est lié à la psychologie, aux comportements et tout ce qui est lié à l’&lt;a href="http://fr.wikipedia.org/wiki/Carl_Rogers"&gt;approche rogérienne&lt;/a&gt;. Ce n’est pas ce modèle qu’il nous expose ce soir, le modèle qu’il nous expose est le modèle disciplinaire qui permet de savoir où le coaché se situe.
Ce modèle se base sur des cartes:&lt;/p&gt;

&lt;ul class="minus"&gt;
&lt;li&gt; Carte des anciens et nouveaux principes&lt;/li&gt;
&lt;li&gt; Carte des cycles de changement&lt;/li&gt;
&lt;li&gt; Carte des valeurs fondamentales&lt;/li&gt;
&lt;li&gt; Carte des domaines de vie&lt;/li&gt;
&lt;li&gt; Carte des âges de la vie&lt;/li&gt;
&lt;li&gt; Carte de l’apprentissage à l’âge adulte&lt;/li&gt;

&lt;li&gt; Carte des aires de conscience&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Carte des anciens et nouveaux principes&lt;/h4&gt;
&lt;p&gt;Idée: Vous vous êtes construits dans des principes qui vous ont permis jusque là de vivre sereinement, ces principes sont liés à votre famille d’origine, aux principes de l’entreprise dans laquelle vous travaillez, … Ces principes ne répondent plus à vos demandes actuelles car cela ne fonctionnent plus. Ceux sont des anciens principes qu’il faut transformer en nouveaux principes.
Exemple d’anciens principes: “Les autres ont toujours raison”, “je suis une femme de 50 ans au chômage, je ne retrouverai jamais de travail”&lt;/p&gt;
&lt;h4&gt; Carte des cycles de changement&lt;/h4&gt;
&lt;p&gt;Idée: La vie change tout le temps et nous sommes situés dans une des trois phases suivantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; lancement: nous avons des idées, des projets , on a de l’énergie, nous sommes dans le faire&lt;/li&gt;

&lt;li&gt; plateau: nous avons réussi nos projets, nous stagnons&lt;/li&gt;
&lt;li&gt; marasme: nous sommes en déclin, nous n’avons plus de motivation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;7 personnes / 10 viennent voir un coach quand ils sont dans le marasme
2 personnes / 10 quand ils sont sur le plateau
1 personne / 10 quand ils sont en phase lancement&lt;/p&gt;
&lt;p&gt;Une remarque importante que j’ai noté, c’est qu’on ne peut pas faire d’économie sur les étapes.&lt;/p&gt;
&lt;h4&gt; Carte des valeurs fondamentales&lt;/h4&gt;
&lt;p&gt;Les valeurs de l’individu changent régulièrement, les moyens mis en place ne suffisent plus. Nos valeurs reflètent où nous en sommes.
Nous sommes des êtres d’habitudes.
Connaître ses valeurs fondamentales, c’est être capable de répondre à la question : Pourquoi je fais ce que je fais ?&lt;/p&gt;
&lt;h4&gt; Carte des domaines de vie&lt;/h4&gt;

&lt;p&gt;Les domaines de vie sont les suivants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; domaine personnel: combien de temps vous donnez vous à vous même ?&lt;/li&gt;
&lt;li&gt; domaine couple: combien de temps qualitatif et quantitatif vous donnez vous tous les deux ?&lt;/li&gt;
&lt;li&gt; domaine familial: même question pour le noyau familial et élargi&lt;/li&gt;
&lt;li&gt; domaine professionel&lt;/li&gt;
&lt;li&gt; domaine social: contribution aux associations&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;Nous avons 100 heures / semaine de disponible, dont 40 heures pour le travail.&lt;/p&gt;
&lt;h4&gt; Carte des âges de la vie&lt;/h4&gt;
&lt;p&gt;La carte des âges de la vie permet de savoir où se situe le sujet&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; 20 à 30 ans: le positionnement du sujet est flou, expérimentatif. Le sujet souhaite découvrir la vie. Il ne faut donc pas s’étonner de “l’infidélité” de cette personne&lt;/li&gt;
&lt;li&gt; 30 à 40 ans: les exigences internes et externes sont énormes, il faut un bon boulot, une belle femme,…, bref il faut “y arriver”, “réussir”&lt;/li&gt;
&lt;li&gt; 40 à 50 ans: “Ça suffit ! Les enfants sont grands ! Je suis responsable de moi”. Les femmes vont vers la part masculine de leur personnalité, voyages, sorties. Les hommes vont plutôt vers la part féminine de leur personnalité, plus casanière. &lt;/li&gt;

&lt;li&gt; 50 à 60 ans: C’est l’âge d’or si tout se passe bien, c’est la décennie de la qualité de la vie. Sinon c’est la décennie de la dernière chance si j’estime que je n’ai pas réussi.&lt;/li&gt;
&lt;li&gt; 60 -70 ans: C’est le recommencement, c’est l’âge de la retraite&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Carte de l’apprentissage à l’âge adulte&lt;/h4&gt;
&lt;p&gt;Cette carte pose la question de savoir si nous sommes curieux de la vie, notre capacité d’apprendre et de désapprendre&lt;/p&gt;
&lt;h4&gt; Carte des aires de conscience&lt;/h4&gt;
&lt;p&gt;Cette carte permet de situer les questions: “De quoi ai-je conscience ?” ou “Qui es tu face à moi ?” Dans les exemples, on retrouve l’identité de rôles. Je joue un rôle dans une situation donnée, ai-je conscience du rôle que je joue ? Suis-je à l’aise avec ce rôle ?
Par exemple, quand je change de responsabilité, je deviens responsable d’une équipe, suis-je à l’aise avec ce nouveau rôle ?&lt;/p&gt;

&lt;h3&gt; Les différents types de coaching&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; coaching d’intégration: si par exemple en tant qu’individu, j’ai du mal à trouver mes marques&lt;/li&gt;
&lt;li&gt; coaching de performance: tout allait bien mais ça ne va plus. 1/3 des sujets qui réussissait et qui ne réussissent plus dans leur entreprise démissionnent&lt;/li&gt;
&lt;li&gt; coaching de croissance: tout va bien, mais qu’est ce qui va se passer dans le futur ?&lt;/li&gt;
&lt;li&gt; coaching de maintenance: ca va bien, il faut maintenir la motivation, ce qui n’est pas si facile&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt; Conclusion&lt;/h3&gt;
&lt;p&gt;J’ai bien aimé cette soirée, j’ai appris plein de choses dont je me sers déjà aujourd’hui. Cette soirée m’a donnée envie de continuer dans le coaching d’équipe. Prochain rendez-vous du dôjô: une &lt;a href="http://www.ledojo.fr/dojo_soirees.html"&gt;formation PNL le 23 septembre&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8847859427876704139?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8847859427876704139/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8847859427876704139' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8847859427876704139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8847859427876704139'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/soire-coaching-au-dj.html' title='Soirée Coaching au Dôjô'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1640994720917605928</id><published>2008-09-16T05:29:00.000-07:00</published><updated>2008-09-16T05:36:02.393-07:00</updated><title type='text'>Jersey encore !</title><content type='html'>Pour ceux qui veulent encore plus d'informations sur &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt;, je conseille la &lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5425&amp;amp;yr=2008&amp;amp;track=nextweb"&gt;présentation sur Jersey fait à JavaOne 2008&lt;/a&gt; par &lt;a href="http://weblogs.java.net/blog/mhadley/"&gt;Marc Hadley&lt;/a&gt; et &lt;a href="http://blogs.sun.com/sandoz/entry/mvcj"&gt;Paul Sandoz&lt;/a&gt; de chez &lt;a href="http://java.sun.com/"&gt;Sun&lt;/a&gt;
&lt;br/&gt;
Merci Benoît pour le lien !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1640994720917605928?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1640994720917605928/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1640994720917605928' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1640994720917605928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1640994720917605928'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/jersey-encore.html' title='Jersey encore !'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1059448925784369107</id><published>2008-09-15T13:56:00.000-07:00</published><updated>2008-09-15T13:59:00.216-07:00</updated><title type='text'>REST en Java avec Jersey</title><content type='html'>REST est un style d’architecture pour créer des services web accessibles par URL. En attendant Spring 3.0 qui intégrera REST dans son MVC, il est possible d’utiliser &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt; qui est une implementation de JAX-RS (&lt;a href="http://jcp.org/en/jsr/detail?id=311"&gt;JSR 311&lt;/a&gt;) en Java qui simplifie le dévelopment de web service en REST.&lt;/p&gt;
&lt;p&gt;Ce tutorial vous présente un CRUD sur utilisateur en XML avec JAXB exposé en REST à l’aide de Jersey.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;1ère étape&lt;/em&gt;: construire son modèle XSD et son binding JAXB:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt; Fichier &lt;strong&gt;model.xml&lt;/strong&gt;:&lt;/li&gt;

&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;?xml version=“1.0” encoding=“UTF-8”?&amp;gt;
&amp;lt;xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
 elementFormDefault=“qualified”&amp;gt;
 &amp;lt;xsd:element name=“users”&amp;gt;
  &amp;lt;xsd:complexType&amp;gt;
   &amp;lt;xsd:sequence&amp;gt;
    &amp;lt;xsd:element ref=“user” maxOccurs=“unbounded” /&amp;gt;

   &amp;lt;/xsd:sequence&amp;gt;
  &amp;lt;/xsd:complexType&amp;gt;
 &amp;lt;/xsd:element&amp;gt;
 &amp;lt;xsd:element name=“user”&amp;gt;
  &amp;lt;xsd:complexType&amp;gt;
   &amp;lt;xsd:all&amp;gt;

    &amp;lt;xsd:element name=“firstName” type=“xsd:string” /&amp;gt;
    &amp;lt;xsd:element name=“lastName” type=“xsd:string” /&amp;gt;
   &amp;lt;/xsd:all&amp;gt;
  &amp;lt;/xsd:complexType&amp;gt;
 &amp;lt;/xsd:element&amp;gt;
&amp;lt;/xsd:schema&amp;gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Fichier &lt;strong&gt;binding.xml&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;?xml version=“1.0” encoding=“UTF-8”?&amp;gt;
&amp;lt;jaxb:bindings jaxb:version=“2.1”
 xmlns:jaxb=“http://java.sun.com/xml/ns/jaxb” xmlns:xjc=“http://java.sun.com/xml/ns/jaxb/xjc”
 xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
 xsi:schemaLocation=“http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd”&amp;gt;
 &amp;lt;jaxb:bindings schemaLocation=“model.xsd” node=“/xsd:schema”&amp;gt;
  &amp;lt;jaxb:globalBindings&amp;gt;

   &amp;lt;xjc:simple /&amp;gt;
  &amp;lt;/jaxb:globalBindings&amp;gt;
  &amp;lt;jaxb:schemaBindings&amp;gt;
   &amp;lt;jaxb:package name=“jerseysample.model” /&amp;gt;
  &amp;lt;/jaxb:schemaBindings&amp;gt;
  &amp;lt;jaxb:bindings node=“//xsd:element&lt;a href="?@name=" users=""&gt;@name='users'&lt;/a&gt;”&amp;gt;

   &amp;lt;jaxb:class name=“UserBeanList” /&amp;gt;
  &amp;lt;/jaxb:bindings&amp;gt;
  &amp;lt;jaxb:bindings node=“//xsd:element&lt;a href="?@name=" user=""&gt;@name='user'&lt;/a&gt;”&amp;gt;
   &amp;lt;jaxb:class name=“UserBean” /&amp;gt;
  &amp;lt;/jaxb:bindings&amp;gt;

 &amp;lt;/jaxb:bindings&amp;gt;
&amp;lt;/jaxb:bindings&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Il est possible d’utiliser le &lt;a href="https://maven-jaxb2-plugin.dev.java.net/"&gt;plugin Maven 2 JAXB&lt;/a&gt; pour générer les classes de binding Java.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;2ème étape&lt;/em&gt;: récupérer une liste d’utilisateurs:&lt;/li&gt;

&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; D’abord le test:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt; @Test
 public void shouldGetUsers() {
  WebResource resource = client.resource(BASE_URI + “users”);
  Builder builder = resource.accept(MediaType.APPLICATION_XML);
  UserBeanList users = builder.get(UserBeanList.class);
  Assert.assertNotNull(users);
  Assert.assertEquals(2, users.getUsers().size());
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Jersey fournit une classe cliente &lt;strong&gt;WebResource&lt;/strong&gt; pour simplifier l’appel des ressources, ici on indique aussi que le client accepte du XML, ça aurait pu être du JSON.&lt;/li&gt;

&lt;li&gt; Ensuite l’implémentation:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt;@Path(“/”)
public class UsersResource {
…
 @Context
 private UriInfo uriInfo;
 @GET
 @Path(“/users”)
 @Produces(MediaType.APPLICATION_XML)
 public Response listUsers/(/) {
  UserBeanList userBeanList = new UserBeanList/(/);
  userBeanList.getUsers/(/).addAll(users.values/(/));
  return Response.ok(userBeanList).build/(/);
 }
…
}&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;@GET&lt;/strong&gt; indique le mapping de la méthode java avec un GET HTTP, &lt;strong&gt;@Path&lt;/strong&gt; définit l’url d’accès du service, l’attribut &lt;strong&gt;uriInfo&lt;/strong&gt; est rempli automatiquement grâce à l’annotation &lt;strong&gt;@Context&lt;/strong&gt;, &lt;strong&gt;@Produces&lt;/strong&gt; indique que le web service produit du XML. La réponse ok permet d’indiquer au client que tout s’est bien passé, cela se traduit par un code HTTP 200.&lt;/li&gt;

&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;3ème étape&lt;/em&gt;: récupérer un utilisateur par son id:&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le test:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt; @Test
 public void shouldGetOneUser() {
  WebResource resource = client.resource(BASE_URI + “users/0”);
  Builder builder = resource.accept(MediaType.APPLICATION_XML);
  UserBean user = builder.get(UserBean.class);
  Assert.assertEquals(“Rod”, user.getFirstName());
  Assert.assertEquals(“Johnson”, user.getLastName());
 }&lt;/pre&gt;

&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le code:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt; @GET
 @Produces(MediaType.APPLICATION_XML)
 @Path(“users/{id}/”)
 public Response getUser(@PathParam(“id”)
 String id) {
  if (!users.keySet&amp;nbsp;.contains(id))
   return Response.status(Status.NOT_FOUND).build();
  return Response.ok(users.get(id)).build();
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;@PathParam&lt;/strong&gt; permet de mapper &lt;strong&gt;{id}&lt;/strong&gt; avec l’attribut id de la méthode. La classe Status fournit des status HTTP prédéfini, pas besoin de connaître les codes HTTP pour faire du REST avec Jersey.&lt;/li&gt;

&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;4ème étape&lt;/em&gt;: créer un utilisateur, ça se fait par un &lt;strong&gt;POST&lt;/strong&gt; HTTP:&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le test:&lt;/li&gt;
&lt;/ul&gt;

&lt;/ul&gt;
&lt;pre&gt; @Test
 public void shouldCreateUser() {
  WebResource resource = client.resource(BASE_URI + “users”);
  resource.accept(MediaType.APPLICATION_XML);
  UserBean user = new UserBean();
  // Une dédicace pour Vincent
  user.setFirstName(“Vincent”);
  user.setLastName(“Massol”);
  Builder builder = resource.entity(user, MediaType.APPLICATION_XML);
  ClientResponse response = builder.post(ClientResponse.class);
  Assert.assertEquals(Status.CREATED, Status.fromStatusCode(response.getStatus()));
  Assert.assertEquals(BASE_URI + “users/3”, response.getLocation&amp;nbsp;.toString());
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le code:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt;  @POST
 @Path(“users”)
 @Consumes(MediaType.APPLICATION_XML)
 @Produces(MediaType.APPLICATION_XML)
 public Response createUser(UserBean user) {
  UriBuilder uriBuilder = uriInfo.getAbsolutePathBuilder();
  URI uri = uriBuilder.path(“3”).build();
  users.put(“3”, user);
  return Response.created(uri).entity(user).build();
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;

&lt;li&gt; &lt;strong&gt;@POST&lt;/strong&gt; indique que la méthode java sera appelée sur un POST HTTP, &lt;strong&gt;@Consumes&lt;/strong&gt; indique que le web service consomme du XML. &lt;strong&gt;Response.create&lt;/strong&gt; permet de dire au client qu’une ressource a été créée et possède telle uri.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;5ème étape&lt;/em&gt;: mettre à jour un utilisateur, ça se fait par un &lt;strong&gt;PUT&lt;/strong&gt; HTTP:&lt;/li&gt;

&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le test:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt; @Test
 public void shouldModifyOneUser() {
  WebResource resource = client.resource(BASE_URI + “users/1”);
  UserBean user = new UserBean();
  user.setFirstName(“Rob”);
  user.setLastName(“Johnson”);
  resource.put(user);
  Builder builder = resource.accept(MediaType.APPLICATION_XML);
  user = builder.get(UserBean.class);
  Assert.assertEquals(“Rob”, user.getFirstName());
  Assert.assertEquals(“Johnson”, user.getLastName());
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le code:&lt;/li&gt;
&lt;/ul&gt;

&lt;/ul&gt;
&lt;pre&gt; @PUT
 @Path(“users/{id}/”)
 @Consumes(MediaType.APPLICATION_XML)
 public Response saveUser(@PathParam(“id”)
 String id, UserBean user) {
  users.put(id, user);
  return Response.created(uriInfo.getAbsolutePath&amp;nbsp;).build();
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;@PUT&lt;/strong&gt; indique que la méthode Java sera appelée sur un PUT HTTP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;6ème étape&lt;/em&gt;: supprimer un utilisateur grâce à un DELETE HTTP:&lt;/li&gt;

&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; Le test:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt; @Test
 public void shouldDeleteUser&amp;nbsp; {
  WebResource resource = client.resource(BASE_URI + “users/0”);
  resource.delete&amp;nbsp;;
  ClientResponse response = resource.get(ClientResponse.class);
  Assert.assertEquals(Status.NOT_FOUND, Status.fromStatusCode(response.getStatus&amp;nbsp;));
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;

&lt;li&gt; Le code:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt; @DELETE
 @Path(“users/{id}/”)
 public void deleteUser(@PathParam(“id”)
 String id) {
  users.remove(“0”);
 }&lt;/pre&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;@DELETE&lt;/strong&gt; indique que la méthode java sera appelée lors d’un DELETE HTTP sur la ressource.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;

&lt;p&gt;Jersey fournit un peu plus que la JSR 311, en particulier son implémentation cliente est bien utile plutôt que de passer par la librairie Commons HTTPClient. 
Jersey est disponible sur le repository Maven 2 de SUN.&lt;/p&gt;
&lt;p&gt;Récupérer &lt;a href="http://88.178.232.8/site/jerseysample.zip"&gt;le code source du projet&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1059448925784369107?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1059448925784369107/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1059448925784369107' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1059448925784369107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1059448925784369107'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/rest-en-java-avec-jersey.html' title='REST en Java avec Jersey'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6854774995989490222</id><published>2008-09-05T05:01:00.000-07:00</published><updated>2008-09-12T01:25:04.135-07:00</updated><title type='text'>REST ou SOAP ?</title><content type='html'>&lt;p&gt;Beaucoup de débats ont lieu sur le choix d'une architecture REST ou SOAP. La conclusion, c'est qu'il faut les deux, ça dépend de ce qu'on a besoin. Si votre consommateur de service est une application Web alors choisissez dans un premier temps une architecture type REST. Si vous faîtes de l'EDI (Echange de données informatisés) choisissez SOAP car vous avez des mécanismes de sécurité, de transaction et d'accusés de réception de base.&lt;p&gt;
&lt;b&gt;Quelques avantages de REST&lt;/b&gt;:&lt;br/&gt;
&lt;br/&gt;
- séparation lecture / écriture&lt;br/&gt;
- caching HTTP sur GET/PUT/DELETE&lt;br/&gt;
- idempotence: GET/PUT/DELETE/HEAD, ce qui permet le bookmark en particulier&lt;br/&gt;
- compression&lt;br/&gt;
- grosse réponse, fichier binaire, SOAP Attachement c'est pas trop ça&lt;br/&gt;
- simplicité et ergonomie&lt;br/&gt;
- ressources donc différent format de réponse possibles: JSON / XML /
Text / XHTML avec l'utilisation des content type&lt;br/&gt;
- expérience de navigation inégalable&lt;br/&gt;
- beaucoup plus simple à appeler pour des applications web&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Limites:&lt;/b&gt;&lt;br/&gt;
&lt;br/&gt;
- Sécurité point à point car HTTPS, pas les mécanismes de WS-Security,
Federation SAML&lt;br/&gt;
- Pas de notion d'accusé de réception, de garantie de reception du
message, WS-Reliable Messaging&lt;br/&gt;
- C'est synchone uniquement contrairement à WS-Adressing&lt;br/&gt;
- Peu d'outils par rapport à SOAP&lt;br/&gt;
- Pas de gestion des transactions distribuées comme WS-Transaction&lt;br/&gt;
- Moins cadré que SOAP pour les développeurs, on peut coder de la merde&lt;br/&gt;
&lt;br/&gt;
&lt;p&gt;D'une certaine façon, c'est pour cela que dans l'idéal, il faut
pouvoir fournir les deux, c'est ce que font Amazon et Flickr&lt;/p&gt;&lt;p&gt;
Microsoft propose REST dans ses solutions et la plupart des moteurs
Webservice fournissent du faux-REST (Axis) ou du REST (CXF) et même
java a sa JSR 311.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6854774995989490222?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6854774995989490222/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6854774995989490222' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6854774995989490222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6854774995989490222'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/rest-ou-soap.html' title='REST ou SOAP ?'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-613347838448331654</id><published>2008-09-02T12:32:00.000-07:00</published><updated>2008-09-02T12:34:33.980-07:00</updated><title type='text'>Plugins Maven 2 utiles</title><content type='html'>&lt;p&gt;Je vous fais la liste de quelques plugins Maven 2 utilisés sur un de mes projets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;build-helper-maven-plugin&lt;/em&gt; permet d’ajouter un répertoire de source dans le classpath, ça peut être utile dans le cas de code généré comme par exemple pour des web services&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;

                &amp;lt;artifactId&amp;gt;build-helper-maven-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
                &amp;lt;executions&amp;gt;
                    &amp;lt;execution&amp;gt;
                        &amp;lt;id&amp;gt;add-source&amp;lt;/id&amp;gt;

                        &amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;
                        &amp;lt;goals&amp;gt;
                            &amp;lt;goal&amp;gt;add-source&amp;lt;/goal&amp;gt;
                        &amp;lt;/goals&amp;gt;
                        &amp;lt;configuration&amp;gt;

                            &amp;lt;sources&amp;gt;
                                &amp;lt;source&amp;gt;
                                    ${basedir}/src/main/axisgenerated
                                &amp;lt;/source&amp;gt;
                            &amp;lt;/sources&amp;gt;
                        &amp;lt;/configuration&amp;gt;
                    &amp;lt;/execution&amp;gt;

                &amp;lt;/executions&amp;gt;
            &amp;lt;/plugin&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;maven-surefire-plugin&lt;/em&gt; peut être spécifié pour déclarer une version spécifique de surefire et permettre l’ajout de paramètres comme ceux de la JVM&lt;/li&gt;
&lt;/ul&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-surefire-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.3&amp;lt;/version&amp;gt;
                &amp;lt;executions&amp;gt;
                    &amp;lt;execution /&amp;gt;
                &amp;lt;/executions&amp;gt;

                &amp;lt;configuration&amp;gt;
                    &amp;lt;argLine&amp;gt;-Xms256m -Xmx256m&amp;lt;/argLine&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;maven-compiler-plugin&lt;/em&gt; peut être utilisé pour forcer l’encoding de compilation, ici windows-1252, il est préférable de faire de l’utf-8 et pour la compilation en JDK 5, cela permet de gérer les annotations&lt;/li&gt;

&lt;/ul&gt;
&lt;pre&gt;            &amp;lt;plugin&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;
                &amp;lt;configuration&amp;gt;

                    &amp;lt;encoding&amp;gt;windows-1252&amp;lt;/encoding&amp;gt;
       &amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;
       &amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;
                &amp;lt;/configuration&amp;gt;

            &amp;lt;/plugin&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;maven-resources-plugin&lt;/em&gt;: même chose pour les ressources&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;            &amp;lt;plugin&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-resources-plugin&amp;lt;/artifactId&amp;gt;

                &amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;encoding&amp;gt;windows-1252&amp;lt;/encoding&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt; &lt;em&gt;maven-jetty-plugin&lt;/em&gt; permet de lancer un moteur de servlets jetty en ligne de commande, c’est pratique car on n’a pas besoin d’en installer un et il prend en compte le changement à chaud. Commande: &lt;strong&gt;mvn jetty:run&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;   &amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;maven-jetty-plugin&amp;lt;/artifactId&amp;gt;

    &amp;lt;configuration&amp;gt;
     &amp;lt;connectors&amp;gt;
      &amp;lt;connector
       implementation=“org.mortbay.jetty.nio.SelectChannelConnector”&amp;gt;
       &amp;lt;port&amp;gt;8181&amp;lt;/port&amp;gt;
      &amp;lt;/connector&amp;gt;

     &amp;lt;/connectors&amp;gt;
     &amp;lt;contextPath&amp;gt;/v1&amp;lt;/contextPath&amp;gt;
     &amp;lt;scanIntervalSeconds&amp;gt;3&amp;lt;/scanIntervalSeconds&amp;gt;
     &amp;lt;scanTargetPatterns&amp;gt;
      &amp;lt;scanTargetPattern&amp;gt;

       &amp;lt;directory&amp;gt;src/main/webapp&amp;lt;/directory&amp;gt;
       &amp;lt;includes&amp;gt;
        &amp;lt;include&amp;gt;&lt;strong&gt;/*.xml&amp;lt;/include&amp;gt;
        &amp;lt;include&amp;gt;&lt;/strong&gt;/*.properties&amp;lt;/include&amp;gt;

       &amp;lt;/includes&amp;gt;
      &amp;lt;/scanTargetPattern&amp;gt;
     &amp;lt;/scanTargetPatterns&amp;gt;
    &amp;lt;/configuration&amp;gt;
   &amp;lt;/plugin&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; &lt;em&gt;maven-release-plugin&lt;/em&gt; permet de faire un release automatiquement de votre projet, avec la commande &lt;strong&gt;mvn release:prepare&lt;/strong&gt;:&lt;/li&gt;

&lt;/ul&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-release-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;configuration&amp;gt;

     &amp;lt;tagBase&amp;gt;
      https://cheminducode/tags
     &amp;lt;/tagBase&amp;gt;
    &amp;lt;/configuration&amp;gt;
   &amp;lt;/plugin&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-613347838448331654?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/613347838448331654/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=613347838448331654' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/613347838448331654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/613347838448331654'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/plugins-maven-2-utiles.html' title='Plugins Maven 2 utiles'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2225744247688598729</id><published>2008-09-01T03:30:00.000-07:00</published><updated>2008-09-01T03:36:29.632-07:00</updated><title type='text'>Décompiler les classes dans Eclipse</title><content type='html'>&lt;p&gt;Vous connaissez probablement &lt;a href="http://www.download.com/DJ-Java-Decompiler/3000-2417_4-10046809.html"&gt;DJ Decompiler&lt;/a&gt; ou &lt;a href="http://www.kpdus.com/jad.html"&gt;Jad&lt;/a&gt;. Pour les personnes comme moi qui ne sont sur Windows, il peut être intéressant de décompiler à partir d'Eclipse. C'est possible avec &lt;a href="http://jadclipse.sourceforge.net/"&gt;JadClipse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pour l'installation et la configuration, &lt;a href="http://jadclipse.sourceforge.net/wiki/index.php/Main_Page"&gt;suivre ce lien&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2225744247688598729?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2225744247688598729/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2225744247688598729' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2225744247688598729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2225744247688598729'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/09/dcompiler-les-classes-dans-eclipse.html' title='Décompiler les classes dans Eclipse'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-398130842824704697</id><published>2008-08-29T04:53:00.000-07:00</published><updated>2008-09-01T04:30:46.866-07:00</updated><title type='text'>Launch SOAP UI Mock with JUnit</title><content type='html'>SOAP UI permet de créer des mocks à partir d'un WSDL ou d'une connexion sur un Web service de test. Quand ces mocks sont créés par les fournisseurs de service, il peut être intéressant de pouvoir les utiliser directement dans les tests JUnit ou dans une page Fitnesse plutôt que de devoir installer SOAP UI et de lancer les mocks, voici ce que propose ce tutorial.

Ajouter les dépendances dans le projet Maven:

&lt;pre&gt;   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;xmlbeans&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;xbean&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.3.0-trunk-patched&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;xmlbeans&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;xbean_xpath&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.3.0&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;xmlbeans&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;xmlpublic&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.3.0&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;xmlbeans&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;jsr173&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;xmlbeans-2.3.0&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;eviware&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;soapui&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;eviware&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;soapui-xmlbeans&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;xmlbeans&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;xbean_xpath&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.3.0&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;commons-httpclient&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;commons-httpclient&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.0.1-soapui&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;bouncycastle&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;bcprov-jdk15&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;138&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;jetty&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;jetty&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;6.1.5&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;jetty&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;jetty-util&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;6.1.5&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;jetty&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.5-6.1.5&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;wsdl4j&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;wsdl4j&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.6.2-fixed&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;groovy&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;groovy-all&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;saxon&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;saxon&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;8.8&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
   &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;saxon&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;saxon-dom&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;8.8&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;&lt;/pre&gt;

Et le repository SOAP UI pour télécharger les jars:
&lt;pre&gt;&amp;lt;repositories&amp;gt;
       &amp;lt;repository&amp;gt;
           &amp;lt;id&amp;gt;eviwareRepository&amp;lt;/id&amp;gt;
           &amp;lt;url&amp;gt;http://www.eviware.com/repository/maven2&amp;lt;/url&amp;gt;
       &amp;lt;/repository&amp;gt;
   &amp;lt;/repositories&amp;gt;&lt;/id&gt;&lt;/repository&gt;
  &lt;/repositories&gt;&lt;/pre&gt;

Dans votre test JUnit, il vous suffit de démarrer les mocks de la façon suivante:

&lt;pre&gt;
 private static List&lt;MockRunner&gt; runners;
 private static List&lt;MockRunner&gt; runners;

 @BeforeClass
 public static void startSoapUIMocks() throws Exception {
  runners = new ArrayList&lt;MockRunner&gt;();
  WsdlProject project = new WsdlProject("/etc/mocks/soapui-project-sample.xml");
  for (int c = 0; c &lt; project.getMockServiceCount(); c++) {
   MockService mockService = project.getMockServiceAt(c);
   mockService.addMockRunListener(new LogListener());
   runners.add(mockService.start());
  }
 }
...
}

class LogListener implements MockRunListener {
 public void onMockRunnerStart(MockRunner mockRunner) {
 }

 public void onMockRunnerStop(MockRunner mockRunner) {
 }

 public void onMockResult(MockResult result) {
 }

 public void onMockRequest(MockRunner runner, HttpServletRequest request, HttpServletResponse response) {
 }
}

&lt;/pre&gt;

Et de les arrêter comme suit:    

&lt;pre&gt;
 @AfterClass
 public static void endSoapUIMocks() throws Exception {
  for (MockRunner runner : runners)
   runner.stop();
 }

&lt;/pre&gt;

Pas si dur finallement ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-398130842824704697?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/398130842824704697/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=398130842824704697' title='15 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/398130842824704697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/398130842824704697'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/08/launch-soap-ui-mock-with-junit.html' title='Launch SOAP UI Mock with JUnit'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5461646174427612864</id><published>2008-08-26T00:41:00.000-07:00</published><updated>2008-08-26T12:44:52.074-07:00</updated><title type='text'>Raisons de l'échec de projets agiles</title><content type='html'>XP n'a rien de magique ! Si vous pouvez améliorer la façon de créer des produits logiciels avec moins d'anomalies en utilisant XP, vous pouvez aussi ne pas créer de réelles améliorations dans votre processus de développement logiciel.

Quelques raisons essentielles:

- Ne pas savoir quand une story est terminée. Une story est terminée quand:&lt;ul&gt;&lt;li&gt;Vous avez des tests unitaires JUnit sur chaque classe créée&lt;/li&gt;&lt;li&gt;Un test d'intégration JUnit&lt;/li&gt;&lt;li&gt;Un code refactoré au fur et à mesure, meilleur design, meilleur lisibilité, gestion des erreurs, meilleure ergonomie de code (c.f. &lt;a href="http://en.wikipedia.org/wiki/Code_smell"&gt;Code smell&lt;/a&gt; de &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt;Des tests de recette automatiques qui passent au vert (Fitnesse, GreenPepper)&lt;/li&gt;&lt;/ul&gt;- Accumuler la dette technique
&lt;ul&gt;&lt;li&gt;Sans tests automatiques et sans refactoring régulier (amélioration du design), votre application accumule une dette technique qu'il faudra nettoyer sur 1 ou 2 itérations, sinon votre application ne sera pas différente d'une application développée en cascade, c'est à dire elle ne tiendra pas dans la durée, vous serez obligé de la refaire
&lt;/li&gt;&lt;/ul&gt;- Ne pas faire de rétrospectives ou ne pas respecter le plan d'actions
&lt;ul&gt;&lt;li&gt;Les retrospectives sont là pour améliorer le fonctionnement de l'équipe, elles ont généralement lieues après chaque itérations, elles permettent de ressortir un plan d'actions pour l'itération suivante. Ce qui peut arriver, c'est de ne pas faire de retrospectives, de faire des retrospectives où les vraies douleurs ne sont pas remontées pour x raisons ou de ne pas appliquer le plan d'actions satué pendant la rétrospective&lt;/li&gt;&lt;/ul&gt;- L'engagement de l'équipe n'est pas assez fort
&lt;ul&gt;&lt;li&gt;L'équipe n'est pas sous pression, n'est pas engagée collectivement vers un objectif. Si la qualité pour l'équipe n'est pas importante, du coup elle code à l'arrache des stories sans refactorer et même sans faire de tests afin de montrer qu'elle possède une bonne vélocité. Il vaut mieux avoir une vélocité plus faible. Dans un projet, la vélocité n'est qu'un indicateur pas une valeur à augmenter à tout prix, ..., ce qui est important c'est que la vélocité soit stable par rapport à une qualité de livrable constante. L'enjeu n'est parfois pas clair pour l'équipe mais aussi pour les managers de cette équipe, dans ces cas là, soit les managers viennent sur le plateau régulièrement (à la méthode Lean), soit l'équipe se fixe elle-même son propre enjeux&lt;/li&gt;&lt;/ul&gt;- Le client (XP) ou le product owner (Scrum) n'est pas clairement défini
&lt;ul&gt;&lt;li&gt;On se retrouve avec des priorisations / dépriorisations régulières qui font que le produit n'est plus stable fonctionnellement. Beaucoup de stress et de doutes se fait ressentir dans ces cas là, ça nuie à la motivation de l'équipe.&lt;/li&gt;&lt;/ul&gt;- Des stories non découpées en tâches (de moins d'une journée) qui ne sont pas suivies par un taskboard
&lt;ul&gt;&lt;li&gt;On perd beaucoup en focalisation de l'équipe. Si on n'a pas de taskboard, alors chacun travaille sur ce qu'il souhaite et pas sur ce qui est demandé et important. Rien de nouveau, chacun de nous est confronté à cela tous les jours dans sa gestion du temps, il faut faire des choix, dans une équipe XP, ces choix sont choisis en vue de l'atteinte de l'objectif que s'est fixé l'équipe&lt;/li&gt;&lt;/ul&gt;Qu'est ce qui est donc le plus important alors ? Qu'est ce qui fait qu'une équipe est agile ? Est ce que les membres doivent être tous des top guns ?

Ce qui fait la différence, c'est l'attitude des différents membres de l'équipe, non pas leurs compétences, mais plutôt leur volonté de vouloir s'améliorer collectivement, de vouloir aller plus loin, de vouloir partager quelque chose dans le respect des cinq valeurs fondamentales: communication, simplicité, feedback, courage et respect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5461646174427612864?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5461646174427612864/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5461646174427612864' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5461646174427612864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5461646174427612864'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/08/raisons-de-lchec-de-projets-agiles.html' title='Raisons de l&apos;échec de projets agiles'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-681522922743711150</id><published>2008-08-25T13:14:00.001-07:00</published><updated>2008-08-25T13:58:53.828-07:00</updated><title type='text'>Ecrire de vraies assertions dans vos tests avec Hamcrest</title><content type='html'>&lt;a href="http://code.google.com/p/hamcrest/"&gt;Hamcrest&lt;/a&gt; permet d'écrire des tests plus compréhensibles grâce à des assertions commençant par &lt;span style="font-weight: bold;"&gt;assertThat&lt;/span&gt;.

Quelques exemples:
&lt;pre&gt;String message = "hello world !";
      String message2 = "hello world !";
      assertThat(message, notNullValue());
      assertThat(message, equalTo("hello world !"));
      assertThat(message, is(message2));
      List&lt;string&gt; messages = new ArrayList&lt;string&gt;();
      messages.add(message);
      messages.add(message2);
      assertThat(messages.size(), greaterThan(0));
      assertThat(message, allOf(notNullValue(), not(equalTo("toto"))));
      assertThat(messages, hasItem(message));

&lt;/pre&gt;Hamcrest permet aussi d'écrire ses propres "Matcher", pour plus d'infos sur le sujet, je vous conseille de jeter un coup d'oeil au &lt;a href="http://code.google.com/p/hamcrest/wiki/Tutorial"&gt;tutorial&lt;/a&gt;.

Pour ajouter Hamcrest dans votre projet Maven 2:
&lt;pre&gt;&amp;lt;dependency&amp;gt;
      &amp;lt;groupid&amp;gt;org.hamcrest&amp;lt;/groupid&amp;gt;
      &amp;lt;artifactid&amp;gt;hamcrest-all&amp;lt;/artifactid&amp;gt;
      &amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
  &amp;lt;/dependency&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-681522922743711150?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/681522922743711150/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=681522922743711150' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/681522922743711150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/681522922743711150'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/08/ecrire-de-vraies-assertions-dans-vos.html' title='Ecrire de vraies assertions dans vos tests avec Hamcrest'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3477140734902987367</id><published>2008-08-25T13:08:00.000-07:00</published><updated>2008-08-25T13:12:19.067-07:00</updated><title type='text'>Couverture de tests dans Eclipse</title><content type='html'>&lt;p&gt;Vous voulez connaitre la couverture de code réalisée par vos tests dans Eclipse ? Connaître la couverture de vos tests ? Utiliser &lt;a href="http://www.eclemma.org"&gt;Eclemma&lt;/a&gt; !&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclemma.org/images/screen.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.eclemma.org/images/screen.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3477140734902987367?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3477140734902987367/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3477140734902987367' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3477140734902987367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3477140734902987367'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/08/couverture-de-tests-dans-eclipse.html' title='Couverture de tests dans Eclipse'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4484815816505480817</id><published>2008-07-23T06:06:00.001-07:00</published><updated>2008-07-23T06:10:59.379-07:00</updated><title type='text'>WTPMaven</title><content type='html'>&lt;p&gt;&lt;a href='http://www.eclipse.org/webtools/'&gt;Web Tool Platform&lt;/a&gt; est un plugin Eclipse qui permet de tester dans Eclipse des applications Web. Il est intéressant que le code soit redéployé à chaud sans avoir besoin de relancer le build Maven.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Dans le fichier &lt;strong&gt;pom.xml&lt;/strong&gt;, il suffit d&amp;rsquo;ajouter les lignes suivantes, puis lancer la commande &lt;strong&gt;mvn eclipse:eclipse&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt; &amp;lt;build&amp;gt;
  &amp;lt;pluginManagement&amp;gt;
   &amp;lt;plugins&amp;gt;
    &amp;lt;plugin&amp;gt;
     &amp;lt;artifactId&amp;gt;maven-eclipse-plugin&amp;lt;/artifactId&amp;gt;
     &amp;lt;configuration&amp;gt;
      &amp;lt;wtpversion&amp;gt;1.5&amp;lt;/wtpversion&amp;gt;
     &amp;lt;/configuration&amp;gt;
    &amp;lt;/plugin&amp;gt;
   &amp;lt;/plugins&amp;gt;
  &amp;lt;/pluginManagement&amp;gt;
 &amp;lt;/build&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Le projet Eclipse devient alors un projet Web&lt;/li&gt;
&lt;li&gt; Il faut ensuite faire &lt;strong&gt;Run As &amp;gt; Run On Server&lt;/strong&gt;&lt;/li&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SIcs9aXz8eI/AAAAAAAAAak/BoVQHYPlAzk/s1600-h/Image+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_I6qpNMiW2Ys/SIcs9aXz8eI/AAAAAAAAAak/BoVQHYPlAzk/s320/Image+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5226195326149587426" /&gt;&lt;/a&gt;
&lt;li&gt; Configurer le serveur qui vous convient, dans mon cas un Apache Tomcat 5.5&lt;/li&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_I6qpNMiW2Ys/SIctTyF_i1I/AAAAAAAAAas/MVVe_T67cA4/s1600-h/Image+2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_I6qpNMiW2Ys/SIctTyF_i1I/AAAAAAAAAas/MVVe_T67cA4/s320/Image+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5226195710474423122" /&gt;&lt;/a&gt;
&lt;li&gt; Par défaut le projet est ajouté&lt;/li&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_I6qpNMiW2Ys/SIctezdivhI/AAAAAAAAAa0/jlhUlajQ9uc/s1600-h/Image+3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_I6qpNMiW2Ys/SIctezdivhI/AAAAAAAAAa0/jlhUlajQ9uc/s320/Image+3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5226195899820195346" /&gt;&lt;/a&gt;
&lt;li&gt; Le nouveau serveur apparait dans la vue &lt;strong&gt;Servers&lt;/strong&gt;&lt;/li&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_I6qpNMiW2Ys/SIcttUOQT1I/AAAAAAAAAa8/rEPNViDRctA/s1600-h/Image+4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_I6qpNMiW2Ys/SIcttUOQT1I/AAAAAAAAAa8/rEPNViDRctA/s320/Image+4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5226196149132611410" /&gt;&lt;/a&gt;
&lt;li&gt; Le serveur peut être lancé en mode Debug pour permettre de débugger dans le code de l&amp;rsquo;application&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4484815816505480817?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4484815816505480817/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4484815816505480817' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4484815816505480817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4484815816505480817'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/07/wtpmaven.html' title='WTPMaven'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_I6qpNMiW2Ys/SIcs9aXz8eI/AAAAAAAAAak/BoVQHYPlAzk/s72-c/Image+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7906839133892340142</id><published>2008-07-21T10:43:00.000-07:00</published><updated>2008-07-21T11:03:52.264-07:00</updated><title type='text'>Spring 2.5 et Test Driven Development</title><content type='html'>&lt;p&gt;Cette année, j'ai présenté plusieurs fois comment faire du Test Driven Development (TDD) avec Spring 2.5, au &lt;a href="http://xp-france.net/index.php?option=com_content&amp;task=view&amp;id=48&amp;Itemid=120#S801"&gt;Xpdays France&lt;/a&gt;, au &lt;a href="http://parisjug.org/xwiki/bin/view/Blog/SoireeSpring"&gt;Paris Jug&lt;/a&gt; et à &lt;a href="http://www.universite-du-si.com/ParcoursLibre.aspx#architecture-java-agile"&gt;l'universite du SI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;L'objectif était de montrer à quel point les développements Java pouvaient être rapides tout en maitrisant la montée en complexité de l'application. C'est à travers un exemple d'application, un blog, que je souhaitais montrer qu'en 30 min, on pouvait réaliser une application web en TDD&lt;/p&gt;

&lt;p&gt;Ci dessous un PDF qui détaille l'écriture du blog
&lt;center&gt;
&lt;div style="width: 425px; text-align: left;" id="__ss_522429"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/jfhelie/test-driven-development-avec-spring-25?src=embed" title="Test Driven Development Avec Spring 2.5"&gt;Test Driven Development Avec Spring 2.5&lt;/a&gt;&lt;object style="margin: 0px;" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=test-driven-development-avec-spring-25-1216661675775638-8"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=test-driven-development-avec-spring-25-1216661675775638-8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;view &lt;a href="http://www.slideshare.net/jfhelie/test-driven-development-avec-spring-25?src=embed" title="View Test Driven Development Avec Spring 2.5 on SlideShare"&gt;presentation&lt;/a&gt; (tags: &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/spring"&gt;spring&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/2-5"&gt;2.5&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/hibernate"&gt;hibernate&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/test"&gt;test&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;
&lt;/center&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7906839133892340142?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7906839133892340142/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7906839133892340142' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7906839133892340142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7906839133892340142'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/07/ressources-spring-25-et-test-driven.html' title='Spring 2.5 et Test Driven Development'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5590422178038481644</id><published>2008-07-21T03:00:00.001-07:00</published><updated>2008-07-21T03:00:44.982-07:00</updated><title type='text'>JPdfUnit</title><content type='html'>&lt;p&gt;&lt;a href='http://jpdfunit.sourceforge.net'&gt;JPdfUnit&lt;/a&gt; permet de tester le rendu de documents pdf sous forme de tests &lt;a href='http://www.junit.org'&gt;JUnit&lt;/a&gt;.
Un exemple d&amp;rsquo;un code qui vérifie le contenu d&amp;rsquo;un document:&lt;/p&gt;
&lt;pre&gt;package jpdfunit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.oio.jpdfunit.DocumentTester;
import de.oio.jpdfunit.document.util.TextSearchType;
public class JPDFUnitTest {
	private DocumentTester tester;
	@Before
	public void loadPdfDocument() {
		tester = new DocumentTester(&amp;ldquo;src/main/resources/PDF1.pdf&amp;rdquo;);
	}
	@Test
	public void shouldHaveOrderNumber() {
		tester.assertContentContainsText(&amp;ldquo;200806270001&amp;rdquo;, TextSearchType.CONTAINS);
		tester.assertContentContainsText(&amp;ldquo;Numéro de la ligne fixe : 0145070546&amp;rdquo;, TextSearchType.CONTAINS);
	}
	@After
	public void closePdfDocument() {
		tester.close();
	}
}&lt;/pre&gt;
&lt;p&gt;Plusieurs types de validation sont possibles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; TextSearchType.STARTSWITH: le document commence par &amp;hellip;&lt;/li&gt;
&lt;li&gt; TextSearchType.CONTAINS: le document contient le texte &amp;hellip;&lt;/li&gt;
&lt;li&gt; TextSearchType.ENDSWITH: le document se termine par &amp;hellip;&lt;/li&gt;
&lt;li&gt; TextSearchType.REGEXP: le document respecte l&amp;rsquo;expression régulière suivante&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://88.178.232.8/site/jpdfunit-test.zip'&gt;Code source de l&amp;#x27;exemple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5590422178038481644?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5590422178038481644/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5590422178038481644' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5590422178038481644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5590422178038481644'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/07/jpdfunit.html' title='JPdfUnit'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8340627959435878013</id><published>2008-07-11T02:03:00.001-07:00</published><updated>2008-07-11T02:03:33.966-07:00</updated><title type='text'>LightWebServiceXStream</title><content type='html'>&lt;p&gt;Dans l&amp;rsquo;article précédent &lt;a href='http://jfhelie.blogspot.com/2008/07/lightwebservice.html'&gt;LightWebService&lt;/a&gt;, j&amp;rsquo;utilisais Spring MVC 2.5 et une vue JSON pour exposer les données en web service. Cet article consiste à présenter le même principe mais avec une vue de type XML avec &lt;a href='http://xstream.codehaus.org/'&gt;XStream&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le code est sensiblement le même que l&amp;rsquo;article précédent, ce qui diffère c&amp;rsquo;est la vue:&lt;/p&gt;
&lt;pre&gt;package xstreamview;
import java.io.Writer;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.View;
import com.thoughtworks.xstream.XStream;
public class XStreamView implements View {
	private String model;
	public XStreamView(String model) {
		this.model = model;
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public void render(Map map, HttpServletRequest request, HttpServletResponse response) throws Exception {
		Writer out = response.getWriter();
		XStream xstream = new XStream();
		xstream.alias(&amp;ldquo;user&amp;rdquo;, User.class);
		out.write(xstream.toXML(map.get(model)));
		out.flush();
	}
	public String getContentType() {
		return &amp;ldquo;text/xml&amp;rdquo;;
	}
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Pour tester votre projet, vous pouvez utiliser la commande &lt;strong&gt;mvn jetty:run&lt;/strong&gt; et ouvrir un navigateur sur &lt;strong&gt;http://localhost:8080/services/user/get&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://88.178.232.8/site/springmvc-xstreamview.zip'&gt;Code source de l&amp;#x27;exemple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8340627959435878013?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8340627959435878013/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8340627959435878013' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8340627959435878013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8340627959435878013'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/07/lightwebservicexstream.html' title='LightWebServiceXStream'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2321576180369984785</id><published>2008-07-09T13:53:00.001-07:00</published><updated>2008-07-09T13:53:29.069-07:00</updated><title type='text'>XStream</title><content type='html'>&lt;p&gt;&lt;a href='http://xstream.codehaus.org'&gt;XStream&lt;/a&gt; est un framework Java qui permet de convertir des objets Java en XML et inversement. L&amp;rsquo;avantage de XStream est la simplicité de son API.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; La sérialisation d&amp;rsquo;un objet se fait simplement de la façon suivante:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;public class XStreamTest {
	private static String EOL = System.getProperty(&amp;ldquo;line.separator&amp;rdquo;);
	@Test
	public void shouldSerializeUser() {
		XStream xstream = new XStream();
		xstream.alias(&amp;ldquo;user&amp;rdquo;, User.class);
		User user = new User(&amp;ldquo;Rod&amp;rdquo;, &amp;ldquo;Johnson&amp;rdquo;);
		String xml = xstream.toXML(user);
		Assert.assertEquals(&amp;ldquo;&amp;lt;user&amp;gt;&amp;rdquo; + EOL + &amp;ldquo;  &amp;lt;firstName&amp;gt;Rod&amp;lt;/firstName&amp;gt;&amp;rdquo; + EOL + &amp;ldquo;  &amp;lt;lastName&amp;gt;Johnson&amp;lt;/lastName&amp;gt;&amp;rdquo; + EOL + &amp;ldquo;&amp;lt;/user&amp;gt;&amp;rdquo;, xml);
	}
}&lt;/pre&gt;
&lt;pre&gt;public class User {
	private String firstName;
	private String lastName;
	public User(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getFirstName() {
		return firstName;
	}
	public String getLastName() {
		return lastName;
	}
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; La désérialisation se fait de la façon suivante:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;	@Test
	public void shouldUnSerialize() {
		XStream xstream = new XStream();
		xstream.alias(&amp;ldquo;user&amp;rdquo;, User.class);
		User u = (User) xstream.fromXML(&amp;ldquo;&amp;lt;user&amp;gt;&amp;lt;firstName&amp;gt;Rod&amp;lt;/firstName&amp;gt;&amp;lt;lastName&amp;gt;Johnson&amp;lt;/lastName&amp;gt;&amp;lt;/user&amp;gt;&amp;rdquo;);
		Assert.assertNotNull(u);
		Assert.assertEquals(&amp;ldquo;Rod&amp;rdquo;, u.getFirstName&amp;nbsp;);
		Assert.assertEquals(&amp;ldquo;Johnson&amp;rdquo;, u.getLastName&amp;nbsp;);
	}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Télécharger le projet maven du &lt;a href='http://88.178.232.8/site/xstream.zip'&gt;code source de l&amp;#x27;exemple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2321576180369984785?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2321576180369984785/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2321576180369984785' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2321576180369984785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2321576180369984785'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/07/xstream_09.html' title='XStream'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1668931135959641313</id><published>2008-07-08T08:12:00.001-07:00</published><updated>2008-07-11T01:56:40.515-07:00</updated><title type='text'>LightWebService</title><content type='html'>&lt;p&gt;Vous voulez faire des web services, c’est à dire des services sur le protocol HTTP, vous voulez aller vite, ne pas vous prendre la tête avec le modèle objet et du SOAP. Vous voulez générer des données au format &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt;.
Cet article vous propose une solution très light avec &lt;a href="http://www.springframework.org/"&gt;Spring MVC 2.5&lt;/a&gt; et vous indique comment tester avec &lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt; et &lt;a href="http://jwebunit.sourceforge.net/"&gt;JWebUnit&lt;/a&gt; votre web service.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Créer le test de votre web service:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;package lightwebservice;
import net.sf.json.spring.web.servlet.view.JsonView;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.web.servlet.ModelAndView;
public class LightWebServiceTest {
 private LightWebService service;
 @Before
 public void initService() {
  service = new LightWebService();
 }
 @Test
 public void shouldGetUser() {
  ModelAndView mav = service.getUser(“0”);
  User user = (User) mav.getModelMap .get(“user”);
  Assert.assertNotNull(user);
  Assert.assertEquals(“Rod”, user.getFirstName());
  Assert.assertEquals(“Johnson”, user.getLastName());
  Assert.assertEquals(JsonView.class, mav.getView().getClass());
 }
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Créer le code du web service qui passe le test:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;package lightwebservice;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.spring.web.servlet.view.JsonView;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
public class LightWebService {
 public ModelAndView getUser(String id) {
  Map&amp;lt;String, Object&amp;gt; map = new HashMap&amp;lt;String, Object&amp;gt;();
  User user = new User(“Rod”, “Johnson”);
  map.put(“user”, user);
  return new ModelAndView(new JsonView(), map);
 }
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Créer le test d’intégration de votre web service:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;package lightwebservice;
import net.sf.json.JSONObject;
import net.sourceforge.jwebunit.junit.WebTester;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mortbay.jetty.Server;
public class LightWebServiceIntegrationTest {
 private static Server server;
 private static WebTester webTester;
 @BeforeClass
 public static void initJettyServerAndWebTester() throws Exception {
  server = new Server(0);
  server.addHandler(new org.mortbay.jetty.webapp.WebAppContext(“src/main/webapp”, “/”));
  server.start();
  int actualPort = server.getConnectors()[0].getLocalPort();
  webTester = new WebTester();
  webTester.getTestContext().setBaseUrl(“http://localhost:” + actualPort + “/services/”);
 }
 @Test
 public void testGetUser() throws Exception {
  webTester.beginAt(“/user/get”);
  User user = new User(“Rod”,“Johnson”);
  webTester.assertTextPresent(JSONObject.fromObject(user).toString());
 }
 @AfterClass
 public static void stopJettyServer() throws Exception {
  server.stop();
 }
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Ajouter les annotations Controller et RequestMapping Spring 2.5:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@RequestMapping(method = RequestMethod.GET, value = “/user/get”)
public ModelAndView getUser(String id)&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Pour tester votre projet, vous pouvez utiliser la commande &lt;b&gt;mvn jetty:run&lt;/b&gt; et ouvrir un navigateur sur &lt;b&gt;http://localhost:8080/services/user/get&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;
&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt; Télécharger le &lt;a href="http://88.178.232.8/site/light-webservice.zip"&gt;code source du projet Maven&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1668931135959641313?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1668931135959641313/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1668931135959641313' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1668931135959641313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1668931135959641313'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/07/lightwebservice.html' title='LightWebService'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-391234683432460201</id><published>2008-06-05T05:25:00.000-07:00</published><updated>2008-07-10T08:06:00.682-07:00</updated><title type='text'>Soirée Spring au Paris JUG</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_I6qpNMiW2Ys/SEfnvaK1rwI/AAAAAAAAAZU/JADQIVNaYaI/s1600-h/parisJugRol.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_I6qpNMiW2Ys/SEfnvaK1rwI/AAAAAAAAAZU/JADQIVNaYaI/s320/parisJugRol.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5208386295741918978" /&gt;&lt;/a&gt;
&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;La &lt;a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20080610"&gt;prochaine soirée thématique&lt;/a&gt; au &lt;a href="http://www.parisjug.org/xwiki/bin/view/Main/WebHome"&gt;Paris JUG&lt;/a&gt; est sur &lt;a href="http://springframework.org/"&gt;Spring&lt;/a&gt;, elle a lieue le 10 juin au 30 rue cabanis dans le 14ème. Avec Christian Blavier, nous introduisons Spring par le TDD.&lt;div&gt;&lt;div&gt;&lt;p&gt;A travers le développement d'une application web, nous vous montrerons comment faire du TDD avec Spring et comment Spring 2.5 simplifie votre développement avec les annotations. Nous utiliserons les mockobjects pour nos tests unitaires. Vous découvrirez que J2ee à travers Spring n'a rien à envier à RubyOnRails ou Grails pour le développement d'applications Web.
&lt;/p&gt;&lt;p&gt;La soirée continuera avec les dernières nouveautés Spring «à la source» présentées par Julien Dubois et Michaël Isvy:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Présentation de Spring et des projets associés (Spring Security, Spring Webflow, Spring Batch, Spring WS, etc… et aussi Apache, Tomcat, ActiveMQ).&lt;/li&gt;&lt;li&gt;Spring Security 2.0&lt;/li&gt;&lt;li&gt;Présentation de S2AP&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;Venez nombreux !&lt;/div&gt;
&lt;p&gt;&lt;a href="http://88.178.232.8/site/springtdd-demo.zip"&gt;Code source&lt;/a&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-391234683432460201?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/391234683432460201/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=391234683432460201' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/391234683432460201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/391234683432460201'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/06/soire-spring-au-paris-jug.html' title='Soirée Spring au Paris JUG'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_I6qpNMiW2Ys/SEfnvaK1rwI/AAAAAAAAAZU/JADQIVNaYaI/s72-c/parisJugRol.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3687412174456603060</id><published>2008-05-29T04:50:00.001-07:00</published><updated>2008-05-29T04:50:31.270-07:00</updated><title type='text'>CoreProtocols</title><content type='html'>&lt;p&gt;J&amp;rsquo;ai suivi une première initiation aux &lt;a href='http://www.mccarthyshow.com/Portals/11/docs/TheCoreV3.pdf'&gt;Core Protocols&lt;/a&gt; de &lt;a href='http://www.mccarthyshow.com/'&gt;Jim et Michele McCarthy&lt;/a&gt; animée par &lt;a href='http://www.linkedin.com/in/YvesHanoulle'&gt;Yves Hanoulle&lt;/a&gt; et des Octos.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;expérience était enrichissante, j&amp;rsquo;ai senti la puissance des protocoles pour aligner une équipe, pour améliorer la confiance de l&amp;rsquo;équipe et donc son efficacité.&lt;/p&gt;
&lt;p&gt;Dans cet article, je vais vous présenter certains protocoles, tel que je les ai perçu, au travers d&amp;rsquo;une communication fictive entre deux personnes P1 et P2.&lt;/p&gt;
&lt;h2&gt; Check in&lt;/h2&gt;
&lt;p&gt;P1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Check In&lt;/li&gt;
&lt;li&gt; Je suis content de te voir car ça fait longtemps qu&amp;rsquo;on s&amp;rsquo;est pas vu&lt;/li&gt;
&lt;li&gt; Je suis énervé car je suis en retard à cause des bouchons&lt;/li&gt;
&lt;li&gt; Je suis là&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Bienvenue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Check In&lt;/li&gt;
&lt;li&gt; Je suis aussi content de te voir&lt;/li&gt;
&lt;li&gt; J&amp;rsquo;ai peur que l&amp;rsquo;on arrive pas à faire tout ce qu&amp;rsquo;on a prévu&lt;/li&gt;
&lt;li&gt; Je suis triste qu&amp;rsquo;on se voit pas plus souvent&lt;/li&gt;
&lt;li&gt; Je suis là&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Bienvenue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le check in permet d&amp;rsquo;exprimer ses émotions aux autres, ce qui permet aux autres de connaître notre état d&amp;rsquo;esprit. Le check in permet de vider ses émotions et de s&amp;rsquo;engager dans la communication: &amp;ldquo;Maintenant, c&amp;rsquo;est bon, je suis là, je suis prêt&amp;rdquo;.
Je trouve que le check in n&amp;rsquo;est pas humain et sectaire, par contre il est efficace, après un check in je suis prêt.&lt;/p&gt;
&lt;h2&gt; Perfection game&lt;/h2&gt;
&lt;p&gt;P1: Veux tu que je fasse un perfection game sur ta présentation ?&lt;/p&gt;
&lt;p&gt;P2: Oui&lt;/p&gt;
&lt;p&gt;P1:
Je mets 7/10
J&amp;rsquo;aime:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; le contenu est clair&lt;/li&gt;
&lt;li&gt; le contenu est concis&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour avoir 10:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; J&amp;rsquo;ajouterai des visuels&lt;/li&gt;
&lt;li&gt; Je diminuerai le nombre de slides&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P2: Merci&lt;/p&gt;
&lt;p&gt;Le perfection game permet d&amp;rsquo;améliorer les choses en disant ce qui va bien et comment on peut l&amp;rsquo;améliorer. C&amp;rsquo;est une démarche constructive. Il est important de ne pas blesser l&amp;rsquo;autre et que l&amp;rsquo;autre ne se sente pas blessé. Ma note correspond à ce que je peux apporter, plus elle est élevée, moins j&amp;rsquo;ai à apporter, plus elle basse, plus j&amp;rsquo;ai à apporter.&lt;/p&gt;
&lt;h2&gt; Pass&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;ai le droit de passer un protocole sans justification, sauf le Decider&lt;/p&gt;
&lt;h2&gt; Decider&lt;/h2&gt;
&lt;p&gt;P1: Je propose de changer le modèle de la présentation en mettant celui d&amp;rsquo;Octo&lt;/p&gt;
&lt;p&gt;P2: Pouce en bas&lt;/p&gt;
&lt;p&gt;P1: Qu&amp;rsquo;est ce qui te gène dans ma proposition ?&lt;/p&gt;
&lt;p&gt;P2: Le modèle doit être celui du client&lt;/p&gt;
&lt;p&gt;P1: OK, je propose alors d&amp;rsquo;ajouter le logo d&amp;rsquo;Octo dans le modèle&lt;/p&gt;
&lt;p&gt;P2: Pouce en haut&lt;/p&gt;
&lt;p&gt;Il existe aussi la main à plat quand on n&amp;rsquo;a pas d&amp;rsquo;avis. Le Decider permet à une équipe de prendre des décisions. Si j&amp;rsquo;ai une meilleure solution, je dois la proposer. Si je n&amp;rsquo;ai pas mieux, je suis d&amp;rsquo;accord.&lt;/p&gt;
&lt;h2&gt; Investigate&lt;/h2&gt;
&lt;p&gt;P1: Veux tu que je fasse un investigate sur l&amp;rsquo;objectif de ta présentation ?&lt;/p&gt;
&lt;p&gt;P2: Oui&lt;/p&gt;
&lt;p&gt;P1: Quel message souhaites tu faire passer ?&lt;/p&gt;
&lt;p&gt;P2: Le SOA , c&amp;rsquo;est de la merde&lt;/p&gt;
&lt;p&gt;P1: Quels sont tes interlocuteurs ?&lt;/p&gt;
&lt;p&gt;P2: Des pro SOA&lt;/p&gt;
&lt;p&gt;P1: Quel est ton objectif, leur faire découvrir autre chose ou les agresser ?&lt;/p&gt;
&lt;p&gt;P2: &amp;hellip;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Investigate permet à une personne de mieux comprendre les objectifs d&amp;rsquo;une autre personne, c&amp;rsquo;est une phase d&amp;rsquo;empathie, de volonté de comprendre l&amp;rsquo;autre. Cela permet aussi à la personne investiguée de clarifier ses objectifs.&lt;/p&gt;
&lt;h2&gt; Check out&lt;/h2&gt;
&lt;p&gt;P1: Check out&lt;/p&gt;
&lt;p&gt;Check out car je ne peux plus tenir mes engagements par rapport à l&amp;rsquo;équipe ou c&amp;rsquo;est mieux pour moi que je sois ailleurs. Je n&amp;rsquo;ai pas besoin de justifier.&lt;/p&gt;
&lt;h2&gt; Ask For Help&lt;/h2&gt;
&lt;p&gt;P1: Veux tu m&amp;rsquo;aider sur ma présentation ?&lt;/p&gt;
&lt;p&gt;P2: Oui&lt;/p&gt;
&lt;p&gt;P1: Je n&amp;rsquo;arrive pas à rendre la présentation sexy.&lt;/p&gt;
&lt;p&gt;P2: Montre là moi&amp;hellip; &lt;/p&gt;
&lt;h2&gt; Et d&amp;rsquo;autres&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Protocol check&lt;/li&gt;
&lt;li&gt; Intention Check&lt;/li&gt;
&lt;li&gt; Resolution&lt;/li&gt;
&lt;li&gt; Personal Alignment&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3687412174456603060?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3687412174456603060/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3687412174456603060' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3687412174456603060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3687412174456603060'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/coreprotocols.html' title='CoreProtocols'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4181292933173358879</id><published>2008-05-26T10:27:00.000-07:00</published><updated>2008-05-26T10:47:28.785-07:00</updated><title type='text'>UniversiteDuSI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.universite-du-si.com"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.universite-du-si.com/images/logo.gif" alt="" border="0" /&gt;&lt;/a&gt;Ne manquez pas cet évènement unique en France !

Vous découvrirez comment Neil Armstrong a pu marcher sur la lune, un projet réalisé en cascade ou en agile, à votre avis ?
Vous pourrez rencontrer des personnalités publiques comme le philosophe Michel Serre, Eliyahu Goldratt le père de la théorie des contraintes ou Bjarne Stroustrup inventeur du C++ et bien d'autres.

Et vous pourrez aussi suivre une session sur &lt;a href="http://www.universite-du-si.com/ParcoursLibre.aspx#architecture-java-agile"&gt;l'architecture et les méthodes agiles&lt;/a&gt; que j'animerai avec &lt;a href="http://www.notarianni.org/"&gt;Bernard Notarianni&lt;/a&gt;, vous y découvrirez les principes de conception émergente, les bienfaits du Domain Driven Development, l'architecture et la communication, les outils agiles et autres particularités des méthodes agiles qui font que l'architecture de votre application resiste aux années ... De quoi faire rêver bien des femmes ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4181292933173358879?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4181292933173358879/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4181292933173358879' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4181292933173358879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4181292933173358879'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/universitedusi.html' title='UniversiteDuSI'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5715489744557295326</id><published>2008-05-25T13:42:00.001-07:00</published><updated>2008-05-25T13:42:55.156-07:00</updated><title type='text'>Concordion</title><content type='html'>&lt;p&gt;On parle beaucoup de &lt;a href='http://www.fitnesse.org'&gt;Fitnesse&lt;/a&gt; et de &lt;a href='http://www.greenpeppersoftware.com/fr/'&gt;GreenPaper&lt;/a&gt; pour écrire des tests exécutables, on parle peu de &lt;a href='http://www.concordion.org/'&gt;Concordion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Par rapport à un Fitnesse ou un Greenpaper, Concordion a les avantages suivants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Il s&amp;rsquo;apparente à des spécifications exécutables plutôt que des tests exécutables&lt;/li&gt;
&lt;li&gt; Il n&amp;rsquo;est pas limité au format tableau&lt;/li&gt;
&lt;li&gt; Pas de difficulté avec le classpath&lt;/li&gt;
&lt;li&gt; Les fixtures sont sous forme de tests JUnit&lt;/li&gt;
&lt;li&gt; Pas de serveur à installer&lt;/li&gt;
&lt;li&gt; Pour le partage en équipe, on utilise le référentiel de code (Subversion, CVS)&lt;/li&gt;
&lt;li&gt; Il s&amp;rsquo;intègre aux rapports Maven Sunfire&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Exemple d&amp;rsquo;écriture de tests exécutables pour un blog&lt;/h2&gt;
&lt;p&gt;Un blog doit permettre de lister le titre et le contenu des articles, d&amp;rsquo;ajouter des articles et de supprimer des articles.&lt;/p&gt;
&lt;h3&gt; Test de la récupération des articles&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Ajouter la ligne suivante pour gérer les caractères spéciaux:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;meta http-equiv=&amp;ldquo;Content-Type&amp;rdquo; content=&amp;ldquo;text/html; charset=UTF-8&amp;rdquo; /&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Ajouter des données dans la base de données à partir d&amp;rsquo;un tableau:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;h3&amp;gt;Insertion d&amp;rsquo;articles en base de données&amp;lt;/h3&amp;gt;
&amp;lt;table concordion:execute=&amp;ldquo;addArticleInDatabase(#title,#content)&amp;rdquo;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;th concordion:set=&amp;ldquo;#title&amp;rdquo;&amp;gt;Titre&amp;lt;/th&amp;gt;&amp;lt;th concordion:set=&amp;ldquo;#content&amp;rdquo;&amp;gt;Contenu&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Titre 1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Contenu 1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Vérifier le contenu des articles&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;h3&amp;gt;Vérification de la liste des articles&amp;lt;/h3&amp;gt;
&amp;lt;table concordion:verifyRows=&amp;ldquo;#article : getArticles()&amp;rdquo;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;th concordion:assertEquals=&amp;ldquo;#article.getTitle()&amp;rdquo;&amp;gt;Titre&amp;lt;/th&amp;gt;&amp;lt;th concordion:assertEquals=&amp;ldquo;#article.getContent()&amp;rdquo;&amp;gt;Contenu&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;
   	&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Titre 1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Contenu 1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;
&lt;h3&gt; Test de l&amp;rsquo;ajout de l&amp;rsquo;article&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Ajouter un article&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;h2&amp;gt;Ajout d&amp;rsquo;un article&amp;lt;/h2&amp;gt;
&amp;lt;p&amp;gt;Ajout de l&amp;rsquo;article de titre &amp;lt;span concordion:set=&amp;ldquo;#title&amp;rdquo;&amp;gt;Titre 3&amp;lt;/span&amp;gt; et de contenu &amp;lt;span concordion:set=&amp;ldquo;#content&amp;rdquo;&amp;gt;Contenu 3&amp;lt;/span&amp;gt;&amp;lt;span concordion:execute=&amp;ldquo;addArticle(#title,#content)&amp;rdquo;/&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Vérifier l&amp;rsquo;ajout de l&amp;rsquo;article&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;table concordion:verifyRows=&amp;ldquo;#article : getArticlesInDatabase()&amp;rdquo;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;th concordion:assertEquals=&amp;ldquo;#article.getTitle()&amp;rdquo;&amp;gt;Titre&amp;lt;/th&amp;gt;&amp;lt;th concordion:assertEquals=&amp;ldquo;#article.getContent()&amp;rdquo;&amp;gt;Contenu&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;
   	&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Titre 1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Contenu 1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
   	&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Titre 3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Contenu 3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;
&lt;h3&gt; Suppression d&amp;rsquo;un article&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Suppression d&amp;rsquo;un article:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;h2&amp;gt;Suppression d&amp;rsquo;un article&amp;lt;/h2&amp;gt;
&amp;lt;p&amp;gt;Suppression de l&amp;rsquo;article d&amp;rsquo;id &amp;lt;span concordion:set=&amp;ldquo;#id&amp;rdquo;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span concordion:execute=&amp;ldquo;deleteFirstArticle(#id)&amp;rdquo;/&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Vérifier la suppression de l&amp;rsquo;article:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;table concordion:verifyRows=&amp;ldquo;#article : getArticlesInDatabase()&amp;rdquo;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;th concordion:assertEquals=&amp;ldquo;#article.getTitle()&amp;rdquo;&amp;gt;Titre&amp;lt;/th&amp;gt;&amp;lt;th concordion:assertEquals=&amp;ldquo;#article.getContent()&amp;rdquo;&amp;gt;Contenu&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;
   	&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Titre 3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Contenu 3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;
&lt;h2&gt; Création des fixtures&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Les fixtures sont des tests JUnit, il est possible de dériver sa classe de test de &lt;strong&gt;ConcordionTestCase&lt;/strong&gt; en JUnit 3, ou d&amp;rsquo;utiliser le runner CondordionRunner avec la déclaration: &lt;strong&gt;@RunWith(ConcordionRunner.class)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; Il est possible d&amp;rsquo;utiliser un autre runner dans le test comme le runner Spring qui permet de charger le contexte et d&amp;rsquo;initialiser les bean Spring automatiquement:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;	@Test
public void run&amp;nbsp; throws IOException {
	ResultSummary resultSummary = new ConcordionBuilder().build().process(
			this);
	resultSummary.print(System.out);
	resultSummary.assertIsSatisfied();
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Voici le code du test du blog:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { &amp;ldquo;classpath:applicationContext.xml&amp;rdquo; })
@Transactional
public class BlogTest {
	@Autowired
	private HibernateTemplate hibernateTemplate;
	@Autowired
	private BlogService blogService;
	public void addArticleInDatabase(String title, String content) {
		Article article = new Article(title, content);
		hibernateTemplate.save(article);
	}
	public Iterable&amp;lt;Article&amp;gt; getArticles() {
		return blogService.listArticles();
	}
	public void addArticle(String title, String content) {
		blogService.addArticle(new Article(title, content));
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public Iterable&amp;lt;Article&amp;gt; getArticlesInDatabase() {
		return hibernateTemplate.find(&amp;ldquo;from Article&amp;rdquo;);
	}
	public void deleteFirstArticle(Long id) {
		blogService.deleteArticle(id);
	}
	@Test
	public void run() throws IOException {
		ResultSummary resultSummary = new ConcordionBuilder().build().process(
				this);
		resultSummary.print(System.out);
		resultSummary.assertIsSatisfied();
	}
}&lt;/pre&gt;
&lt;h2&gt;  Utilisation avec Maven 2&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Ajouter la dépendance dans le fichier &lt;strong&gt;pom.xml&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.concordion&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;concordion&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;1.3.0&amp;lt;/version&amp;gt;
			&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Ajouter le plugin Concordion au plugin Surefire:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;		&amp;lt;plugins&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;systemProperties&amp;gt;
						&amp;lt;property&amp;gt;
							&amp;lt;name&amp;gt;concordion.output.dir&amp;lt;/name&amp;gt;
							&amp;lt;value&amp;gt;target/concordion&amp;lt;/value&amp;gt;
						&amp;lt;/property&amp;gt;
					&amp;lt;/systemProperties&amp;gt;
				&amp;lt;/configuration&amp;gt;
			&amp;lt;/plugin&amp;gt;
		&amp;lt;/plugins&amp;gt;&lt;/pre&gt;
&lt;h2&gt; Code de l&amp;rsquo;exemple&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='https://88.178.232.8/site/concordion.zip'&gt;Code source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Ressources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://www.concordion.org/'&gt;http://www.concordion.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://code.google.com/p/concordion/wiki/MavenizedSamples'&gt;http://code.google.com/p/concordion/wiki/MavenizedSamples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5715489744557295326?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5715489744557295326/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5715489744557295326' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5715489744557295326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5715489744557295326'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/concordion.html' title='Concordion'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7720427947826906278</id><published>2008-05-25T02:52:00.001-07:00</published><updated>2008-05-25T02:52:08.746-07:00</updated><title type='text'>DomainDrivenDesignMethodo</title><content type='html'>&lt;p&gt;Deux types d&amp;rsquo;approches sont possibles pour concevoir des produits logiciels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; l&amp;rsquo;approche cascade&lt;/li&gt;
&lt;li&gt; l&amp;rsquo;approche itérative&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;approche cascade consiste à demander aux experts métier de définir leurs besoins qui sont communiqués aux analystes qui construisent un modèle métier et donnent le résultat aux développeurs. Cette approche possède des limites dont la principale est qu&amp;rsquo;il n&amp;rsquo;y a pas assez de feedback des analystes vers les experts métiers ou des développeurs vers les analystes. Le design de l&amp;rsquo;application s&amp;rsquo;en ressent.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;approche itérative comme Extreme Programming prône la conception émergente, c&amp;rsquo;est à dire que la conception de l&amp;rsquo;application se fait au fur et à mesure grâce aux communications effectuées entre experts métiers et développeurs. Grâce à des tests de recette automatiques, il est possible de changer la conception du logiciel sans connaître de régressions. Un des problèmes avec les méthodes agiles est que la décision sur la conception de l&amp;rsquo;application est faite au plus tard et donc l&amp;rsquo;application ne progresse pas en terme de compréhension métier.&lt;/p&gt;
&lt;p&gt;Il est donc essentiel de faire ressortir le domaine métier de l&amp;rsquo;application pour que l&amp;rsquo;application puisse évoluer au cours du temps, c&amp;rsquo;est le principal objectif du Domain Driven Design.
Un bonne conception va faire accélérer le développement. Cette conception doit évoluer au cours du temps par rapport aux retours du code et des besoins métiers. Cette conception n&amp;rsquo;est pas figée, elle évolue. &lt;/p&gt;
&lt;p&gt;Je vous conseille l&amp;rsquo;ouvrage d&amp;rsquo;Eric Evans &lt;a href='http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215'&gt;Domain-Driven Design: Tackling Complexity in the Heart of Software&lt;/a&gt; ou de télécharger gratuitement le pdf &lt;a href='http://www.infoq.com/minibooks/domain-driven-design-quickly'&gt;Domain Driven Design quickly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans les projets agiles sur lesquels j&amp;rsquo;ai pu travailler, j&amp;rsquo;ai constaté qu&amp;rsquo;au début la vélocité de l&amp;rsquo;équipe était bonne et qu&amp;rsquo;à un moment elle chutait, ceci était du la plupart du temps à un problème de conception de l&amp;rsquo;application, le modèle existant ne permettait plus de gérer la complexité de l&amp;rsquo;application. Ce que j&amp;rsquo;aime faire pour résoudre ce problème est d&amp;rsquo;introduire le fonctionnement de l&amp;rsquo;application dans les tests de recette automatisés (Fitnesse / Concordion). Un exemple: &amp;ldquo;Une identité peut se connecter au portail grâce à un login et un mot de passe. Chaque identité possède un porte-feuille de contrats en fonction de ses abonnements. Ses contracts sont de type: &amp;hellip;. &amp;rdquo;, ceci permet de faire sortir les différentes entités de l&amp;rsquo;application et leurs relations. Ca a l&amp;rsquo;avantage d&amp;rsquo;être compréhensible par tous, développeurs, experts métiers ou exploitants.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Conclusion: Faites du Domain Driven Design même en Agile !!!&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7720427947826906278?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7720427947826906278/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7720427947826906278' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7720427947826906278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7720427947826906278'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/domaindrivendesignmethodo.html' title='DomainDrivenDesignMethodo'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1822164654841971095</id><published>2008-05-16T12:35:00.001-07:00</published><updated>2008-05-16T12:43:26.115-07:00</updated><title type='text'>CXF</title><content type='html'>&lt;p&gt;Qui n’a pas souffert sur Axis 1, puis Axis 2 avec le code verbeux et dégueulasse qui prend la moitié des packages de votre application quand vous avez osé généré un client ? &lt;/p&gt;
&lt;p&gt;Dans ma recherche du moteur SOAP le plus agile, j’ai essayé &lt;a href="http://cxf.apache.org/"&gt;CXF&lt;/a&gt; qui est la fusion du Ex Celtix et Ex XFire. Un &lt;a href="http://blog.loof.fr/2007/12/services-web-metro-vs-cxf-vs-axis2.html"&gt;article intéressant&lt;/a&gt; et des &lt;a href="http://cwiki.apache.org/CXF20DOC/why-cxf.html"&gt;arguments forts&lt;/a&gt; me mettent sur la voie. &lt;/p&gt;
&lt;p&gt;Mes objectifs sont:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; avoir un code léger&lt;/li&gt;
&lt;li&gt; utiliser les annotations des web services (@Webservice)&lt;/li&gt;
&lt;li&gt; intégrer &lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; pourvoir tester mon web service par un test JUnit simple&lt;/li&gt;
&lt;li&gt; faire émerger mon web service en TDD&lt;/li&gt;
&lt;li&gt; pouvoir utiliser Maven 2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; TDD sur mon web service&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Charger un serveur de web service en static&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@BeforeClass
public static void initJaxFactory() {
JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
sf.getServiceFactory().setDataBinding(new AegisDatabinding());
sf.setServiceClass(BlogService.class);
sf.setAddress(“http://localhost:8080/service”);
sf.create();
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Tester que c’est un web service&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@Test
public void shouldBeAWebService() throws Exception {
URL url = new URL(“http://localhost:8080/service/listArticles”);
URLConnection connection = url.openConnection();
Assert.assertNotNull(connection.getContent());
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Vérifier la génération automatique du WSDL&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@Test
public void shouldGenerateWsdl() throws Exception {
URL url = new URL(“http://localhost:8080/service?wsdl”);
URLConnection connection = url.openConnection();
Assert.assertNotNull(connection.getContent());
showResponse(connection);
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Tester la création d’un client&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@Test
public void shouldBeAWebServiceClient() {
createWebServiceClient();
}
private IBlogService createWebServiceClient() {
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(IBlogService.class);
factory.setAddress(“http://localhost:8080/service”);
IBlogService client = (IBlogService) factory.create();
return client;
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Tester l’appel de la méthode listArticles du web service à partir du client&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@Test
public void shouldListArticlesViaWebService() throws Exception {
IBlogService client = createWebServiceClient();
Assert.assertEquals(1, client.listArticles().size());
}&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Code du web service&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@WebService
public interface IBlogService {
 List&amp;lt;Article&amp;gt; listArticles();
}
@WebService
public class BlogService {
 public List&amp;lt;Article&amp;gt; listArticles() {
  List&amp;lt;Article&amp;gt; articles = new ArrayList&amp;lt;Article&amp;gt;();
  articles.add(new Article());
  return articles;
 }
}&lt;/pre&gt;
&lt;h2&gt; Créer un client avec Spring&lt;/h2&gt;
&lt;p&gt;Le fichier Spring:&lt;/p&gt;
&lt;pre&gt;&amp;lt;?xml version=“1.0” encoding=“UTF-8”?&amp;gt;
&amp;lt;beans xmlns=“http://www.springframework.org/schema/beans”
 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
 xmlns:context=“http://www.springframework.org/schema/context”
 xmlns:tx=“http://www.springframework.org/schema/tx”
 xmlns:p=“http://www.springframework.org/schema/p”
 xsi:schemaLocation=“http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
          http://cxf.apache.org/jaxws
          http://cxf.apache.org/schema/jaxws.xsd          
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-2.5.xsd”&amp;gt;
 &amp;lt;bean id=“client” class=“spike.cxf.IBlogService”
  factory-bean=“clientFactory” factory-method=“create” /&amp;gt;
 &amp;lt;bean id=“clientFactory”
  class=“org.apache.cxf.jaxws.JaxWsProxyFactoryBean”&amp;gt;
  &amp;lt;property name=“serviceClass” value=“spike.cxf.IBlogService” /&amp;gt;
  &amp;lt;property name=“address”
   value=“http://localhost:8080/service” /&amp;gt;
 &amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Le test avec Spring 2.5:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { “classpath:applicationContext.xml” })
public class BlogServiceSpringTest {
 @Autowired
 private IBlogService client;
 @BeforeClass
 public static void initJaxFactory() {
  JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
  sf.getServiceFactory().setDataBinding(new AegisDatabinding());
  sf.setServiceClass(BlogService.class);
  sf.setAddress(“http://localhost:8080/service”);
  sf.create();
 }
 @Test
 public void shouldListArticlesViaWebService() throws Exception {
  Assert.assertEquals(1, client.listArticles().size());
 }
}&lt;/pre&gt;
&lt;h2&gt; Conclusion&lt;/h2&gt;
&lt;p&gt;Le truc génial est que CXF fournit un serveur pour lancer le web service, on n’a donc pas besoin de déployer le web service sur un serveur d’application pour le tester dans un test JUnit. De plus, créer un client est super simple contrairement à un Axis 2. Le code est léger, l’utilisation avec Spring est simple et tout ça avec Maven 2. Ce framework permet aussi de faire du REST avec des annotations, un prochain post de blog.&lt;/p&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;* &lt;a href="http://88.178.232.8/site/cxf.zip"&gt;Code source&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt; Ressources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://wheelersoftware.com/articles/spring-cxf-web-services.html"&gt;http://wheelersoftware.com/articles/spring-cxf-web-services.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.mail-archive.com/cxf-user@incubator.apache.org/msg04413.html"&gt;http://www.mail-archive.com/cxf-user@incubator.apache.org/msg04413.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://cwiki.apache.org/CXF20DOC/maven-integration-and-plugin.html"&gt;http://cwiki.apache.org/CXF20DOC/maven-integration-and-plugin.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://cwiki.apache.org/CXF20DOC/http-binding.html"&gt;http://cwiki.apache.org/CXF20DOC/http-binding.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://cwiki.apache.org/CXF20DOC/xfire-migration-guide.html"&gt;http://cwiki.apache.org/CXF20DOC/xfire-migration-guide.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1822164654841971095?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1822164654841971095/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1822164654841971095' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1822164654841971095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1822164654841971095'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/cxf.html' title='CXF'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3958035858082145485</id><published>2008-05-11T08:43:00.001-07:00</published><updated>2008-07-10T08:05:10.998-07:00</updated><title type='text'>SpringTDD</title><content type='html'>&lt;p&gt;Pour ceux qui ont participé à ma session SpringTDD aux XPDays, voici les supports pour la démo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://88.178.232.8/site/SpringTDD-XPDayFR2008.pdf"&gt;La présentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://88.178.232.8/site/springtdd-demo.zip"&gt;Le code source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3958035858082145485?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3958035858082145485/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3958035858082145485' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3958035858082145485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3958035858082145485'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/springtdd_11.html' title='SpringTDD'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7944157649876245868</id><published>2008-05-01T08:45:00.001-07:00</published><updated>2008-05-01T08:45:35.966-07:00</updated><title type='text'>XpDay2008</title><content type='html'>&lt;p&gt;L&amp;rsquo;événement &lt;a href='http://www.xpday.fr'&gt;XP days 2008&lt;/a&gt; a lieu le 5 et 6 mai à Paris à partir de 9h00 à l&amp;rsquo;espace FIAP Jean Monnet, 30 rue Cabanis, Paris 14è, métro Glacière ou Saint-Jacques.&lt;/p&gt;
&lt;p&gt;Mon sujet de présentation est &lt;a href='http://xp-france.net/index.php?option=com_content&amp;task=view&amp;id=48&amp;Itemid=120&amp;PHPSESSID=564f9a8c8957caebc9e0aabe2c76d26f#S801'&gt;Spring TDD&lt;/a&gt;. Au cours de cette session, je montrerai comment on peut faire du vrai TDD avec Spring à partir d&amp;rsquo;un exemple. Je dis bien du vrai TDD et pas du test d&amp;rsquo;intégration car le fichier XML Spring sera couvert par les tests.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;introduirai Spring 2.5 qui permet de simplifier le développement grâce à l&amp;rsquo;ajout des annotations. Terminé les fichiers XML Spring où l&amp;rsquo;on ne retrouve pas où on a configuré l&amp;rsquo;injection de dépendances.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7944157649876245868?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7944157649876245868/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7944157649876245868' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7944157649876245868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7944157649876245868'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/05/xpday2008.html' title='XpDay2008'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8446204815845728105</id><published>2008-04-21T06:20:00.001-07:00</published><updated>2008-04-21T06:31:16.946-07:00</updated><title type='text'>SoapUIMock</title><content type='html'>&lt;p&gt;&lt;a href="http://www.soapui.org/"&gt;Soap UI&lt;/a&gt; est un outil qui permet de tester des web services sans avoir besoin de générer un client de web service. &lt;/p&gt;
&lt;p&gt;Quand vous développez une application qui se connecte à des web services, la plate-forme de test sur laquelle sont déployés ces web services n’est pas toujours disponible, vous avez donc besoin de vous abstraire de cette plate-forme. De plus vos tests peuvent avoir des actions d’écriture sur la plate-forme de test que vous ne souhaitez pas.&lt;/p&gt;
&lt;p&gt;Une solution possible est d’utiliser les mocks de soap ui, vous pouvez enregistrer des couples requête/réponse et créer des mocks avec ces enregistrements à partir de l’interface de soap ui.&lt;/p&gt;
&lt;p&gt;Pour utiliser ces mocks que vous avez créé sur un serveur d’intégration, vous avez besoin de pouvoir lancer ces mocks à partir d’un script; vous pouvez le faire à partir du script &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;mockservicerunner&lt;/span&gt; fournit par soapui dans le répertoire &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;bin&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;mockservicerunner.bat &amp;lt;chemin_projet_soap_ui&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8446204815845728105?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8446204815845728105/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8446204815845728105' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8446204815845728105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8446204815845728105'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/04/soapuimock_21.html' title='SoapUIMock'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-435329567369414271</id><published>2008-04-05T12:00:00.001-07:00</published><updated>2008-05-06T11:58:07.081-07:00</updated><title type='text'>Framework</title><content type='html'>&lt;p&gt;Dans un projet agile, on parle de conception dite émergente, c’est à dire que c’est à partir du moment où l’on a la barre verte sur notre tests unitaires que l’on fait du refactoring et donc l’application se construit petit à petit par le refactoring.
Certains agilistes sont contre l’utilisation de frameworks car pour eux cela complexifie le projet et crée une dépendance à celui-ci.&lt;/p&gt;
&lt;h3&gt; Pourquoi utiliser des frameworks dans un projet agile J2ee ?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Parce que J2ee est complexe: J2ee est une suite de spécifications et une multitude d’API, de quoi s’y perdre: Servlet, EJB, JMS, JDBC, JSF, JSP, …&lt;/li&gt;
&lt;li&gt; Parce que c’est plus simple avec un framework: l’utilisation de iBatis pour communiquer avec une base de données est plus simple à écrire  que d’utiliser l’API JDBC qui est lourde et rend le code illisible&lt;/li&gt;
&lt;li&gt; Parce que c’est plus léger avec un framework: Moins de code avec un framework&lt;/li&gt;
&lt;li&gt; Parce que c’est plus rapide  avec un framework: Moins de code, donc on code plus vite&lt;/li&gt;
&lt;li&gt; Parce que ça permet de s’appuyer sur des bonnes pratiques de développement: Les frameworks sont souvent issus de projets et pour certains sont énormément sollicités, un framework comme Hibernate est un framework qui a fait ses preuves&lt;/li&gt;
&lt;li&gt; Parce que ça aligne d'une certaine façon l’équipe en standardisant le code: Combien d’offres d’emploi voit-on demandant comme compétences: Spring, Hibernate, Struts ?&lt;/li&gt;
&lt;li&gt; Parce que c’est plus performant: Votre code est il performant ? Etes vous sûr de ne pas avoir de fuites mémoire ou des dead locks ? Un framework open source très sollicité n’aura pas ce genre de problèmes.&lt;/li&gt;
&lt;li&gt; Parce que c’est plus évolutif: lorsque vous utilisez un framework comme IBatis pour la persistance en base de données, vous externalisez vos requêtes SQL dans un fichier XML, est ce que vous feriez la même chose avec votre code émergent ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Quels frameworks choisir ?&lt;/h3&gt;
&lt;p&gt;Choisissez des frameworks réputés de préférences open source car le code de ces frameworks est regardé par beaucoup de personnes. Personnellement, j’aime bien que le framework soit sous license Apache 2.0.
Mes choix de prédilection pour le développement d’applications J2ee sont Hibernate, Spring, Wicket.&lt;/p&gt;
&lt;h3&gt; Attention de ne pas mal utiliser le framework&lt;/h3&gt;
&lt;p&gt;Il y a des inconvénients à utiliser des frameworks dans un projet, c’est qu’il faut les maîtriser. Il m’est arrivé souvent de voir une mauvaise utilisation des frameworks et parfois la méconnaissance du framework entraîne une baisse de productivité de l’équipe. Alors qu’est ce qu’il faut faire ? Il faut choisir des frameworks avec lesquels l’équipe est à l’aise. Il faut que l’équipe s’aligne sur comment elle va utiliser le framework, soit par des scéances de Dojo randori type code sur les murs, soit par des phases de refactoring régulières. Par exemple quand on utilise Spring et que l’équipe ne se parle pas, on arrive très vite à des fichiers de configuration dans tous les sens où il devient difficile de trouver ses petits. On revient à la phrase magique: "Team = Product", c'est la communication de votre équipe qui fera que votre produit sera le meilleur.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-435329567369414271?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/435329567369414271/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=435329567369414271' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/435329567369414271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/435329567369414271'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/04/framework.html' title='Framework'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1293143646373996278</id><published>2008-03-25T14:21:00.001-07:00</published><updated>2008-03-25T14:21:06.157-07:00</updated><title type='text'>Spring2.5</title><content type='html'>&lt;p&gt;Le &lt;a href='http://www.springframework.org/'&gt;framework Spring&lt;/a&gt; est un framework complet qui permet de réaliser des applications de qualité rapidement. Dès que l&amp;rsquo;application grossit, il peut être fastidieux de gérer les fichiers de configuration au cours du temps, même avec la séparation entre plusieus fichiers d&amp;rsquo;import ou grâce à la navigation simplifiée avec le plugin &lt;a href='http://springide.org/project'&gt;Eclipse Spring IDE&lt;/a&gt;.
Spring 2.5 introduit les annotations pour notre plus grand plaisir. Grâce à ces annotations, on s&amp;rsquo;abstient de l&amp;rsquo;écriture verbeuse de fichiers XML. De plus, les annotations permettent de rester dans le code, c&amp;rsquo;est beaucoup mieux pour faire du TDD.&lt;/p&gt;
&lt;p&gt;Cet article décrit comment utiliser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Les annotations Spring 2.5&lt;/li&gt;
&lt;li&gt; Les annotations &lt;a href='http://www.unitils.org/summary.html'&gt;Unitils&lt;/a&gt; pour les tests unitaires des objets services&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Exemple de TDD sur la couche DAO&lt;/h3&gt;
&lt;p&gt;Code du test du DAO&lt;/p&gt;
&lt;pre&gt;@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@TransactionConfiguration(transactionManager=&amp;ldquo;txManager&amp;rdquo;)
@ContextConfiguration(locations={&amp;ldquo;classpath:applicationContext.xml&amp;rdquo;})
public class UserDaoTest {
	private UserDao userDao;
	@Autowired
	public void setRepository(UserDao userDao) {
		this.userDao = userDao;
	}
	@Test
	public void shouldSaveNewUser() {
		User user = newUser();
		Assert.assertNotNull(user.getId());
	}
	@Test
	public void shouldGetUsers() {
		newUser();
		List&amp;lt;User&amp;gt; users = userDao.getUsers();
		Assert.assertEquals(1,users.size());
	}
	@Test
	public void shouldGetUser() {
		User u = newUser();
		User user = userDao.getUser(u.getId());
		Assert.assertSame(u, user);
	}
	@Test
	public void shouldDeleteUser() {
		User u = newUser();
		userDao.removeUser(u.getId());
	}
	private User newUser() {
		User user = new User();
		user.setFirstName(&amp;ldquo;Jeff&amp;rdquo;);
		user.setLastName(&amp;ldquo;Helie&amp;rdquo;);
		userDao.saveUser(user);
		return user;
	}
}&lt;/pre&gt;
&lt;p&gt;Code du DAO:&lt;/p&gt;
&lt;pre&gt;@Repository
public class UserDaoJpa implements UserDao {
 	protected EntityManager entityManager;
 @PersistenceContext
	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}	
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public User getUser(Long userId) {
       return entityManager.find(User.class, userId);
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public List&amp;lt;User&amp;gt; getUsers() {
		return entityManager.createQuery(&amp;ldquo;Select u from User u&amp;rdquo;).getResultList();
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public void removeUser(Long userId) {
		entityManager.remove(getUser(userId));
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public void saveUser(User user) {
		entityManager.persist(user);
	}
}&lt;/pre&gt;
&lt;h3&gt; Exemple de TDD sur la couche Service&lt;/h3&gt;
&lt;p&gt;Les tests unitaires sur la couche Service font souvent appel à des mockobjects, deux principalement JMock et EasyMock. J&amp;rsquo;ai découvert récemment Uintils qui permet de simplifier l&amp;rsquo;implémentation de mockobject de type EasyMock, Unitils vient avec des annotations pour siplifier l&amp;rsquo;écriture de test.&lt;/p&gt;
&lt;p&gt;Code du test du Service:&lt;/p&gt;
&lt;pre&gt;public class UserServiceTest extends UnitilsJUnit4 {
	@TestedObject
	private UserServiceImpl userService;
	@Mock
	@InjectIntoByType
	private UserDao userDao;
	@Test
	public void shouldGetUser() {
		User u = new User();
		EasyMock.expect(userDao.getUser(new Long(0))).andReturn(u);
		EasyMockUnitils.replay();
		User user = userService.getUser(&amp;ldquo;0&amp;rdquo;);
		Assert.assertSame(u,user);
	}
	@Test
	public void shouldGetUsers() {
		List&amp;lt;User&amp;gt; l = new ArrayList&amp;lt;User&amp;gt;();
		EasyMock.expect(userDao.getUsers()).andReturn(l);
		EasyMockUnitils.replay();
		List&amp;lt;User&amp;gt; users = userService.getUsers();
		Assert.assertSame(l, users);
	}
	@Test
	public void shouldRemoveUser() {
		userDao.removeUser(new Long(0));
		EasyMockUnitils.replay();
		userService.removeUser(&amp;ldquo;0&amp;rdquo;);
	}
	@Test
	public void shouldSaveUser() {
		User u = new User();
		userDao.saveUser(u);
		EasyMockUnitils.replay();
		userService.saveUser(u);
	}
}&lt;/pre&gt;
&lt;p&gt;Code du Service:&lt;/p&gt;
&lt;pre&gt;@Service
public class UserServiceImpl implements UserService {
	private UserDao userDao;
	@Autowired
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	public User getUser(String userId) {
		return userDao.getUser(Long.parseLong(userId));
	}
	public List&amp;lt;User&amp;gt; getUsers() {
		return userDao.getUsers();
	}
	public void removeUser(String userId) {
		userDao.removeUser(Long.parseLong(userId));
	}
	public void saveUser(User user) {
		userDao.saveUser(user);
	}
}&lt;/pre&gt;
&lt;h3&gt; Ressources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://88.178.232.8/site/spring-annotation.zip'&gt;Code de l&amp;#x27;article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.developpez.net/forums/showthread.php?t=504823'&gt;http://www.developpez.net/forums/showthread.php?t=504823&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://cagataycivici.wordpress.com/2008/03/04/annotation-driven-jsf-spring-jpa/'&gt;http://cagataycivici.wordpress.com/2008/03/04/annotation-driven-jsf-spring-jpa/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.jroller.com/habuma/entry/unit_testing_spring_mvc_it'&gt;http://www.jroller.com/habuma/entry/unit_testing_spring_mvc_it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://code.google.com/p/generic-dao/wiki/SpringJpaHibernate'&gt;http://code.google.com/p/generic-dao/wiki/SpringJpaHibernate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1293143646373996278?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1293143646373996278/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1293143646373996278' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1293143646373996278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1293143646373996278'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/spring25.html' title='Spring2.5'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4332646996815724137</id><published>2008-03-22T10:43:00.001-07:00</published><updated>2008-03-22T12:41:35.754-07:00</updated><title type='text'>FitnesseSpringTransactionRollback</title><content type='html'>&lt;p style="text-align: center;"&gt;&lt;img src="http://fitnesse.org/files/images/FitNesseLogo.gif" /&gt;
&lt;/p&gt;&lt;p&gt;Quand on utilise &lt;a href="http://fitnesse.org/"&gt;Fitnesse&lt;/a&gt; pour faire des tests de recette sur une base de données, on est obligé d’injecter des données de test dans la page SetUp et de les supprimer dans la page TearDown. Parfois si le test ne passe pas, ce n’est pas à cause du code mais parce que les données de test ont été mal supprimées dans la page TearDown. Pour remédier à ce problème, il est possible de faire un rollback de la transaction une fois que le test est fini, cela permet de ne pas à avoir à supprimer les données de test dans la page TearDown. Pour cela, on peut utiliser l’annotation &lt;strong&gt;@Transactionnal&lt;/strong&gt; de Spring. J’ai implémenté le code de l’&lt;a href="http://gojko.net/2008/01/22/spring-rollback/"&gt;article sur gojko&lt;/a&gt;, voici le &lt;a href="http://88.178.232.8/site/fitnesse-spring.zip"&gt;code du résultat&lt;/a&gt; avec un exemple simple repris d’&lt;a href="http://appfuse.org/display/APF/Home"&gt;Appfuse&lt;/a&gt;. Dans l’exemple je teste un Service qui appelle un DAO&lt;/p&gt;
&lt;p&gt;Il est important d’ajouter la directive suivante dans la page Fitnesse:&lt;/p&gt;
&lt;pre&gt;!define TEST_RUNNER {fitnesse.spring.RollbackServer}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4332646996815724137?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4332646996815724137/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4332646996815724137' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4332646996815724137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4332646996815724137'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/fitnessespringtransactionrollback.html' title='FitnesseSpringTransactionRollback'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7208455124621946668</id><published>2008-03-20T14:56:00.001-07:00</published><updated>2008-03-23T06:40:49.131-07:00</updated><title type='text'>VisionUtilisateur</title><content type='html'>&lt;p&gt;Le départ dans un projet quelqu’il soit est essentiel car une fois que la machine est lancée il est difficile de la remettre dans le droit chemin. Ceci est valable pour des projets cycle en V ou des projets agiles. Il est essentiel de constituer l’équipe rapidement et que celle-ci partage les enjeux du projet. A cause d’un système hiérarchique très ancré dans l’esprit des gens (surtout en France), il est rare de voir un développeur assister aux réunions de lancement… C’est une erreur, car cela permet de le responsabiliser, de lui permettre comprendre les enjeux du projet et de le motiver… Arrêtons de croire qu’un développeur est un imbécile, il comprend les objectifs d’un projet et est capable d’être critique sur des décisions “high level” (beurk) et oui … le code ça développe l’esprit d’analyse et de synthèse.&lt;/p&gt;
&lt;p&gt;Dans un projet agile, une des personnes essentielle est le product owner ou le sponsor, si cette personne n’est pas motivée à bloc pour le projet, si elle n’est pas compétente ou si le rôle de product owner est portée par plusieurs personnes en même temps qui ne sont pas alignées alors le projet a peu de chance de réussir. C’est donc une des premières choses à régler dans un projet. Souvent le projet est porté par un chef de projet MOE qui s’est involontairement acquitté du rôle car personne de la MOA n’est disponible car trop prise par des réunions ou parce que personne ne veut prendre la responsabilité du projet. La MOA pense qu’il lui suffit de gérer le délais et le budget, or dans les méthodes agiles, elle a un rôle plus vaste et plus intéressant intellectuellement. Elle valorise les fonctionnalités qu’elle souhaite avoir, elle améliore de manière itérative ses processus métier et donc maîtrise mieux son métier. De plus elle intervient dans un monde où la communication et l’échange est valorisé, elle devient donc plus humaine et peut avoir une vue d’ensemble du métier de l’entreprise.&lt;/p&gt;
&lt;p&gt;Je me suis rendu compte que l’équipe met du temps à s’aligner car chaque membre ne parle pas le même langage. Le MOE parle modèle, architecture, web services, frameworks, …; la MOA parle souvent processus métiers complexes, …, ce qui réunit les deux c’est le langage de l’utilisateur, c’est à dire celui qui va utiliser l’application. C’est ce langage qui est mis en avant par l’écriture de user stories. L’écriture de user stories est difficile mais peu drôlement être facilité par un travail d’identification à l’utilisateur. On le voit sur les sites internet quand cette identification a été faite ou non, par exemple on peut observer à quel point un site comme &lt;a href="http://www.vente-privee.com/vp3/vpLogin_fr.aspx"&gt;Vente privée&lt;/a&gt; est simple et facile d’utilisation, un vrai bonheur et aussi un vrai succès.&lt;/p&gt;
&lt;p&gt;Pour les sites Internet, on est un peu obligé de faire des sites orientés utilisateurs car sinon personne ne vient. Dans les portail de gestion type intranet, il arrive souvent que les utilisateurs souffrent… Souvent parce que ces sites ont été faits par des informaticiens et que personne n’a pris le temps de se mettre à leur place.
&lt;/p&gt;
&lt;p&gt;Alors au lieu de commencer à taper des powerpoint ou des diagrammes visio, il peut être intéressant de se mettre dans une salle ensemble et d’écrire sur papier / carton / post it pour réfléchir. C’est ce qui marche le mieux, c’est ce qui favorise le plus l’échange. Une fois qu’on s’est mis d’accord, pourquoi ne pas faire un visio et l’afficher dans l’openspace. A partir de la vue utilisateurs, il est facile de voir les processus métier, d’en déduire les services de la couche service, d’en imaginer l’IHM, …, tout coule de source et l’équipe est alignée et parle le même langage.&lt;/p&gt;
&lt;p&gt;Même si on parle de conception émergeante en agile, cela ne veut pas dire qu’on ne fait pas de conception au départ, c’est une conception des processus métiers vus de l’utilisateur et pas une conception vue des applications faite par l’architecte SI ou l’urbanisme (cartographies, modèle générique, bla, bla). La vision utilisateur garantit la simplicité de l’application et l’alignement de l’équipe. Attention donc de ne diverger vers de la conception UML orientée systèmes accompagnée de tonne de documentations inutiles car elles ne parlent pas un langage universel, celui de l’utilisateur, celui de notre quotidien, celui de notre vie. Toute la réussite des projets repose sur cette capacité de l’équipe à intégrer au plus tôt la vision de l’utilisateur...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7208455124621946668?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7208455124621946668/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7208455124621946668' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7208455124621946668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7208455124621946668'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/visionutilisateur.html' title='VisionUtilisateur'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3092070517319646078</id><published>2008-03-15T03:20:00.001-07:00</published><updated>2008-03-15T03:22:22.253-07:00</updated><title type='text'>Dance Heads</title><content type='html'>&lt;center&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/l1U2JB8CT_k&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/l1U2JB8CT_k&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3092070517319646078?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3092070517319646078/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3092070517319646078' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3092070517319646078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3092070517319646078'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/dance-heads.html' title='Dance Heads'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3972175074542818746</id><published>2008-03-13T14:36:00.001-07:00</published><updated>2008-03-13T14:36:49.750-07:00</updated><title type='text'>CoachingDifficultes</title><content type='html'>&lt;h3&gt; Pourquoi le coaching est si difficile ?&lt;/h3&gt;
&lt;p&gt;Parce que le coaching, c&amp;rsquo;est: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; écouter et comprendre les autres, c&amp;rsquo;est mettre son savoir dans sa poche&lt;/li&gt;
&lt;li&gt; arrêter de s&amp;rsquo;écouter parler&lt;/li&gt;
&lt;li&gt; aider les gens à changer par eux mêmes&lt;/li&gt;
&lt;li&gt; ne jamais faire à la place des autres mais avec les autres&lt;/li&gt;
&lt;li&gt; devoir être toujours au top de sa forme, avoir confiance en soi, être indestructible&lt;/li&gt;
&lt;li&gt; se sentir seul et inutile&lt;/li&gt;
&lt;li&gt; perdre parfois la vision de la réalité&lt;/li&gt;
&lt;li&gt; savoir être discret dans l&amp;rsquo;équipe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un bon coach est un bon leader et inversement&amp;hellip; Ça en étonne sans doute plus d&amp;rsquo;un mais tout ça est plein de contradictions&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pour ceux que ça intéresse, j&amp;rsquo;aime bien la &lt;a href='http://88.178.232.8/site/Leadership-KentBeck.pdf'&gt;réflexion de Kent Beck sur le leadership&lt;/a&gt; et la vision du leader de &lt;a href='http://www.amazon.com/Habits-Highly-Effective-People/dp/0671708635'&gt;Stephen Covey&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3972175074542818746?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3972175074542818746/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3972175074542818746' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3972175074542818746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3972175074542818746'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/coachingdifficultes.html' title='CoachingDifficultes'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-8550489676392932957</id><published>2008-03-12T14:29:00.001-07:00</published><updated>2008-03-23T11:25:21.845-07:00</updated><title type='text'>VisMaVie</title><content type='html'>&lt;p&gt;Une histoire un peu dingue:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p&gt;“Je suis chef de projet dans un grand groupe, j’ai rejoins un projet depuis 3 mois. Le projet a commencé il y a 2 ans et 1/2, j’ai remplacé un ancien chef de projet qui était prestataire. Le projet n’a rien livré en production depuis 2 ans et 1/2. J’hallucine: il n’y a pas de documentation, j’ai des pages de code qui font 5000 lignes !! &lt;st1:personname productid="La MOA" st="on"&gt;La  MOA&lt;/st1:personname&gt; et l’ancien chef de projet n’ont jamais communiqué ensemble. L’ancien chef de projet me dit qu’il savait pas ce que son équipe devait faire et donc il a fait un truc… Et ça dure depuis 2 ans et 1/2. L’ancien chef de projet faisait le code de l’application, il a fait 90% de l’application. En plus, il a développé un framework maison que personne dans l’équipe ne connaît. Maintenant, il est parti et c’est moi qui prends sa place… Je l’appelle mais ça le saoule de me répondre et donc il me donne les informations au compte goutte. L’équipe actuelle est constituée de jeunes développeurs sortis d’école qui ont besoin d’être cadrés. En plus, on développe dans une technologie de scripting qui vient récemment de passer à l’objet. J’ai quand même réussi à avoir un mec pas mauvais techniquement mais rapidement il en peut plus car il doit comprendre comment fonctionne l’application et résoudre les bugs du prototype qui est présenté par les grands chefs lors de conférences internationales de vente. L’application est complètement instable, de plus le terminal utilisé pour l’application est un écran tactile. Le marketing demande des fonctionnalités de drag and drop de type web 2.0 qui ne fonctionnent pas très bien sur le terminal en question. Ma mission est d’industrialiser le prototype dans 3 mois car bon ça fait deux ans qu’on est en phase de prototypage, on dépensé un budget colossal et maintenant il faut mettre en production. &lt;st1:personname productid="La MOA" st="on"&gt;La MOA&lt;/st1:personname&gt; quand elle a regardé l’application, elle ne correspondait pas du tout à ses besoins. De même le centre de recherche intervient sur mon projet pour donner son avis sur l’application. &lt;st1:personname productid="La MOA" st="on"&gt;La MOA&lt;/st1:personname&gt; n’est pas disponible et ne se trouve pas dans le même bâtiment que moi. Le centre de recherche se trouve dans l’ouest de &lt;st1:personname productid="la France. Le" st="on"&gt;la France. Le&lt;/st1:personname&gt; service que rend l’application qui doit être faite est complètement innovant, ça n’a jamais été fait dans le groupe. La direction des achats a serré les prix au maximum pour la facturation des prestataires, d’ailleurs je ne peux avoir que des jeunes sortis d’école qui n’ont aucune expérience technique ou projet. L’équipe que je manage est démotivée car elle ne sait pas où allait, elle comprend bien que le code est pourri et en plus l’ancien chef de projet faisait à la place des jeunes. Le terminal sur lequel doit fonctionner l’application est fait par un partenaire à qui on demandait de donner des produits d’essai gratuitement et donc pour le rentabiliser le nombre de ventes que l’on doit faire doit être suffisamment important pour qu’ils puissent rentabiliser l’investissement. Hors ce qu’ils ne savent pas c’est que le marketing a revu ses objectifs à la baisse de vente pour l’année étant donné la situation actuelle du projet. J’oubliai… Y’a pas longtemps j’ai assisté à une réunion avec le marketing, des gens du centre de recherche, ils se sont tous tournés vers moi en me demandant si j’avais rempli le formulaire 512, 214 et 265… Il cherche un coupable… Mon responsable qui était convié à la réunion n’est pas venu, me laissant seul à répondre d’une situation que je n’ai pas vécu car arrivé depuis 3 mois. La cerise sur le gâteau, c’est qu’on n’a fait venir un indien dans le but d’externaliser les développements de l’application en Inde et puis… aussi la gestion de projet !!! Et moi je deviens quoi dans l’affaire, je vais m’inscrire à l’ANPE &lt;cite&gt;?”&lt;/cite&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p&gt;Ce que vit ce chef de projet, c’est un des pires scénarios possibles imaginables:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Son équipe est instable et      payée au lance-pierre: les gens qui ont la connaissance sont partis&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Son équipe est      inexpérimentée&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Son équipe est démotivée&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;&lt;st1:personname productid="La MOA" st="on"&gt;La MOA&lt;/st1:personname&gt; n’est pas présente sur le plateau et ne prend pas ses responsabilités, ses besoins sont changeants (ça c’est pas nouveau)&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;L’application actuelle a déjà été présentée lors de sessions de marketing, l’offre sera lancée prochainement, la pression est énorme&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;L’application est instable,      code spaghetti, aucun test, un framework maison non documenté&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;La plate-forme technique      est instable, pas de plate-forme de recette, pas de test&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;La technologie utilisée est      souple (pas de compilation) et industrielle depuis peu&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Pas de documentation&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Pas de suivi de      l’application pendant 2 ans et 1/2&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Beaucoup d’interlocuteurs:      10 personnes pour le centre de recherche, n personnes pour le marketing,      ….&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Une technologie nouvelle      non maîtrisée (terminal spécifique)&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Des délais courts&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Un budget plus que faible      car on a déjà dépensé 2 ans et 1/2&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Un projet d’essai pour      externaliser en Inde&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Une volonté du marketing de      continuer à faire évoluer le prototype actuel&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p&gt;Si on part du postulat “Team=Product”, on arrive à un produit instable (équipe instable), un produit inutile (MOA peu présente), un produit en miette (équipe décentralisée)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p&gt;L’agilité permettra t-elle de sauver le projet ? L’équipe (avec le marketing) arrivera t-elle à se focaliser sur l’essentiel ? Trouvera t-elle la motivation nécessaire pour atteindre ses objectifs ? A suivre …&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-8550489676392932957?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/8550489676392932957/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=8550489676392932957' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8550489676392932957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/8550489676392932957'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/vismavie.html' title='VisMaVie'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1162193688560414957</id><published>2008-03-12T09:40:00.001-07:00</published><updated>2008-03-12T09:40:29.859-07:00</updated><title type='text'>CrystalAgile</title><content type='html'>&lt;p&gt;Un petit résumé d&amp;rsquo;une conférence &lt;a href='http://xp-france.net/'&gt;XP France&lt;/a&gt; à laquelle j&amp;rsquo;ai pu assister. Cette conférence était présentée par Gery Derbier sur &lt;a href='http://fr.wikipedia.org/wiki/Crystal_clear'&gt;Crystal Clear&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La méthodologie est centrée sur les individus plutôt que sur les processus: &lt;strong&gt;Team=Product&lt;/strong&gt;.
Le principe de Crystal Clear est qu&amp;rsquo;il n&amp;rsquo;y a pas qu&amp;rsquo;une seule solution, pas une méthode unique. Crystal Clear définit des conventions qu&amp;rsquo;adapte une équipe en fonction de son environnement.&lt;/p&gt;
&lt;p&gt;Le logiciel consiste à concrétiser les idées d&amp;rsquo;une équipe. &lt;/p&gt;
&lt;p&gt;Comme dans les méthodes agiles, on retrouve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Le Sponsor du projet qui a la vision du projet, qui finance, qui prend les décisions (il a besoin de visibilité)&lt;/li&gt;
&lt;li&gt; Le groupe lié par des connections et de la communication&lt;/li&gt;
&lt;li&gt; La focalisation: priorités connues, temps utile &lt;/li&gt;
&lt;li&gt; Les personnes qui ont un savoir-faire et des motivations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Crystal Clear définit 3 propriétés fondamentales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Des livraisons fréquentes aux utilisateurs réels au moins 2 fois pendant les 6 derniers mois. L&amp;rsquo;idée est d&amp;rsquo;avoir effectuer toute la chaîne de livraison jusqu&amp;rsquo;à la production&lt;/li&gt;
&lt;li&gt; Une communication de proximité: moins de 30s pour recueillir l&amp;rsquo;information, capter l&amp;rsquo;information utile en entendant quelqu&amp;rsquo;un discuter d&amp;rsquo;un sujet (format openspace rapproché)&lt;/li&gt;
&lt;li&gt; Une réflexion qui correspond à de l&amp;rsquo;aide au changement qui dure entre 1h et 1 demi journée pour améliorer les habitudes de travail. Il est intéressant de revenir aux valeurs partagées de l&amp;rsquo;équipe. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;D&amp;rsquo;autres propriétés:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Sécurité du projet&lt;/li&gt;
&lt;li&gt; Focalisation&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt; Est ce qu&amp;rsquo;on a un accès facile aux utilisateurs experts ?&lt;/li&gt;
&lt;li&gt; Est ce que l&amp;rsquo;équipe est focalisée ? Equipe dédiée au projet au moins 2 jours de suite ? Est ce que chaque membre de l&amp;rsquo;équipe peut travailler 2 heures de suite par jour efficacement ?&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt; Sécurité personnelle&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt; Est ce que je peux tout dire ? En XP, ça se traduit par ma note de confiance avant de commencer la rétrospective&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt; Environnement technique&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La méthode définit quelques rôles, un peu plus que ceux de Scrum. Les actions faites sur le projet dépendent du niveau d&amp;rsquo;incertitude et de la complexité de l&amp;rsquo;application.&lt;/p&gt;
&lt;p&gt;Gery utilise un tableau de bord avec les différentes propriétés Crystal Clear comme support à la rétrospective, j&amp;rsquo;ai trouvé ça interessant car ça permet de focaliser l&amp;rsquo;équipe et de la motiver à changer. Car sinon le risque est de se retrouver avec les mêmes problèmes à chaque rétrospective.&lt;/p&gt;
&lt;p&gt;Gery a soulevé une expérience intéressante qui peut nous amener à s&amp;rsquo;interroger sur les tests automatiques: Il a eu une expérience sur un projet de deux ans avec un métier difficile qui se termine avec 0 défaut et ceci sans test automatique ! Pourquoi ? Parce que les intégrateurs systèmes ont travaillé dès le début avec l&amp;rsquo;équipe et ont donc une connaissance projet forte qui leur permet de tester l&amp;rsquo;application manuelle rapidement !&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;important, c&amp;rsquo;est &lt;strong&gt;Team=Product&lt;/strong&gt;, Gery nous a donné des exemples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Un DBA discute avec un développeur Java, ils ne se mettent pas d&amp;rsquo;accord et alors on se retrouve avec une architecture instable, des procédures stockées avec des règles métiers.&lt;/li&gt;
&lt;li&gt; Une distance géographique créée une distance conceptuelle du produit&lt;/li&gt;
&lt;li&gt; Une MOA et une MOE qui ne se mettent pas d&amp;rsquo;accord, ça fait une application qui n&amp;rsquo;est pas utilisable par les utilisateurs finaux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deux références de bouquins que Gery nous donne:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://www.amazon.com/Agile-Software-Development/dp/0201699699'&gt;Agile Software Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.amazon.com/Crystal-Clear-Human-Powered-Methodology-Development/dp/0201699478'&gt;Crystal Clear&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1162193688560414957?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1162193688560414957/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1162193688560414957' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1162193688560414957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1162193688560414957'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/crystalagile.html' title='CrystalAgile'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5554757949477459481</id><published>2008-03-12T00:11:00.001-07:00</published><updated>2008-03-12T00:11:04.784-07:00</updated><title type='text'>LaFractureViaUML</title><content type='html'>&lt;p&gt;&lt;a href='http://fr.wikipedia.org/wiki/Unified_Modeling_Language'&gt;UML&lt;/a&gt; est un langage créé par des chercheurs pour essayer de modéliser le monde objet. Ce langage est destiné essentiellement à des techniques issus de la maîtrise d&amp;rsquo;oeuvre qui ont appris à utiliser un langage de programmation objet. Ce langage est complet et abouti, je le comprends mais laissez moi conter une histoire récente que j&amp;rsquo;ai vécue dernièrement et que se reproduit de manière cyclique presque maladive:&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;assiste à une réunion où une personne de la maîtrise d&amp;rsquo;oeuvre explique l&amp;rsquo;enchaînement des écrans  d&amp;rsquo;une application web à une personne de la maîtrise d&amp;rsquo;ouvrage à l&amp;rsquo;aide d&amp;rsquo;un diagramme à état. La personne de la maîtrise d&amp;rsquo;ouvrage ne comprends pas et ne cherche pas à comprendre ce diagramme car c&amp;rsquo;est compliqué pour elle. Elle assiste à une réunion, la vingtième de la semaine où on li dit &amp;ldquo;tu comprends rien !&amp;rdquo; parce qu&amp;rsquo;elle ne sait pas lire de l&amp;rsquo;UML. Cette personne explique qu&amp;rsquo;elle souhaiterait voir apparaître des copies d&amp;rsquo;écran affichées sur le mur, un peu comme une sorte de frise et en dessous voir les applications métiers du SI avec lesquelles on communique en sous jacent, une idée géniale, créative, ludique, &amp;hellip;, forcément elle n&amp;rsquo;est pas écoutée.&lt;/p&gt;
&lt;p&gt;On le sait bien, pour qu&amp;rsquo;un projet réussisse, il faut intégrer la MOA dans l&amp;rsquo;équipe, c&amp;rsquo;est ce que Scrum appelle le &amp;ldquo;Product Owner&amp;rdquo;, &amp;hellip;, ouais mais cette MOA qui est submergée de réunions, parce que leur chef leur a demandé de gérer plusieurs projets en même temps et à qui on dit: &amp;ldquo;Mais attends, c&amp;rsquo;est de la technique, la modélisation de mon modèle générique c&amp;rsquo;est super important, j&amp;rsquo;ai besoin de cette story à complexité élevée pour avancer&amp;rdquo;, elle ne peut que se dire &amp;ldquo;Ils se foutent de ma gueule, c&amp;rsquo;est bon faites ce que vous voulez, de toute façon je vous dis un truc, vous vous en foutez !&amp;rdquo;, et ils ont raison&amp;hellip;&lt;/p&gt;
&lt;p&gt;Avec UML, comment je rassure la MOA sur mon suivi ? Comment j&amp;rsquo;intéresse la MOA ?&lt;/p&gt;
&lt;p&gt;Sur quoi la MOA peut intervenir de façon concrète ? Sur l&amp;rsquo;intégration avec les applications du SI, sur les écrans de l&amp;rsquo;application de gestion et sur la récupération des besoins des utilisateurs finaux.&lt;/p&gt;
&lt;p&gt;Il vaut mieux s&amp;rsquo;intéresser à faire fonctionner son équipe projet plutôt que d&amp;rsquo;essayer de passer son temps à modéliser des concepts: &amp;ldquo;Team=Product&amp;rdquo;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5554757949477459481?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5554757949477459481/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5554757949477459481' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5554757949477459481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5554757949477459481'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/lafractureviauml.html' title='LaFractureViaUML'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5807525921472144928</id><published>2008-03-11T02:30:00.001-07:00</published><updated>2008-03-11T02:30:04.124-07:00</updated><title type='text'>TestsIHM</title><content type='html'>&lt;p&gt;Les tests des interfaces web sont très volatiles et demandent beaucoup d&amp;rsquo;efforts, néanmoins ces tests parlent plus aux gens du métier. Tester les règles métier à partir des interfaces graphiques n&amp;rsquo;est pas une bonne idée, il est difficile de tester de manière précise les règles métier si l&amp;rsquo;on teste à partir de l&amp;rsquo;interface. Les tests d&amp;rsquo;IHM ne sont pas les tests où l&amp;rsquo;effort doit être fournit, de plus il est nécessaire d&amp;rsquo;avoir une IHM stable pour envisager de pouvoir écrire les tests.&lt;/p&gt;
&lt;p&gt;Certains tests d&amp;rsquo;IHM font sens à être automatisés:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Les tests de navigation (ou de workflow) et de contrôle de session&lt;/li&gt;
&lt;li&gt; Les tests de contrôle d&amp;rsquo;accès&lt;/li&gt;
&lt;li&gt; Les tests d&amp;rsquo;intégration avant livraison&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Les tests de navigation et de session&lt;/h3&gt;
&lt;p&gt;Les tests de navigation permettent de vérifier L&amp;rsquo;enchaînement des pages dans l&amp;rsquo;ordre souhaité par l&amp;rsquo;utilisateur. Les tests de contrôle de session permettent de valider que l&amp;rsquo;enrichissement de la session au cours d&amp;rsquo;un enchaînement de pages, par exemple l&amp;rsquo;enrichissement du panier d&amp;rsquo;un utilisateur au cours d&amp;rsquo;une prise de commande. &lt;/p&gt;
&lt;h3&gt; Les tests de contrôle d&amp;rsquo;accès&lt;/h3&gt;
&lt;p&gt;Les tests automatisés peuvent servir aussi à vérifier les droits d&amp;rsquo;accès aux pages de manière automatique; les droits d&amp;rsquo;accès sont souvent positionnés au niveau de la couche contrôleur et non au niveau des services métiers.&lt;/p&gt;
&lt;h3&gt; Les tests d&amp;rsquo;intégration&lt;/h3&gt;
&lt;p&gt;Les tests d&amp;rsquo;intégration avant livraison sont des tests qui permettent d&amp;rsquo;effectuer un premier niveau de validation avant la release de l&amp;rsquo;application. Ces tests servent de non-régression, ils permettent de se couvrir du désenchantement éventuel causé par un problème de syntaxe dans une JSP, un formulaire rempli avec une mauvaise URL. Ils permettent d&amp;rsquo;éviter des bugs de dernière minute engendrés par l&amp;rsquo;équipe juste avant livraison. &lt;/p&gt;
&lt;h3&gt; Conclusion&lt;/h3&gt;
&lt;p&gt;Dans la pratique, la couche interface utilisateur n&amp;rsquo;est pas sujette à beaucoup de tests, néanmoins il est possible de tester quelques parties de manière localisée. De même il est interessant d&amp;rsquo;avoir une baterie de tests automatisés qui permettent de valider une partie de l&amp;rsquo;application avant mise en production; même si ça peut être corrigé rapidement, c&amp;rsquo;est embarrassant d&amp;rsquo;avoir un problème de compilation d&amp;rsquo;une JSP. Ces tests ne doivent pas prendre beaucoup de temps à être écrit, car ils ne sont pas essentiels, ils sont là pour aider à se prévenir de désagrément. Un outil comme &lt;a href='http://selenium.openqa.org/'&gt;Selenium&lt;/a&gt; pour les interface web simplifie grandement l&amp;rsquo;écriture de ces tests. &lt;strong&gt;Attention&lt;/strong&gt; ces tests automatisés ne remplacent pas des tests manuels avant mise en qualification ou en production.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5807525921472144928?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5807525921472144928/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5807525921472144928' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5807525921472144928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5807525921472144928'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/testsihm_11.html' title='TestsIHM'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6226126200220680527</id><published>2008-03-03T15:00:00.001-08:00</published><updated>2008-03-03T15:00:55.462-08:00</updated><title type='text'>Testing</title><content type='html'>&lt;p&gt;Une des clés d&amp;rsquo;&lt;a href='http://fr.wikipedia.org/wiki/Extreme_programming'&gt;XP&lt;/a&gt; est les tests automatisés, les tests peuvent être séparés en deux catégories: les tests unitaires et les tests d&amp;rsquo;intégration.&lt;/p&gt;
&lt;p&gt;Pour pouvoir tester de manière automatique une application sans trop d&amp;rsquo;efforts, il est recommandé dans la plupart des cas de mettre en place une conception qui simplifiera les tests. Les patterns forts sont l&amp;rsquo;&lt;a href='http://en.wikipedia.org/wiki/Inversion_of_control'&gt;injection de dépendances&lt;/a&gt; , la séparation en couches applicatives et le pattern &lt;a href='http://en.wikipedia.org/wiki/Separation_of_concerns'&gt;separation of concerns&lt;/a&gt;. L&amp;rsquo;intérêt d&amp;rsquo;implémenter l&amp;rsquo;injection de dépendances est qu&amp;rsquo;il est possible de tester unitairement son code indépendamment d&amp;rsquo;un conteneur ou framework d&amp;rsquo;injection de dépendances. Il est possible d&amp;rsquo;utiliser les &lt;a href='http://en.wikipedia.org/wiki/Mock_object'&gt;mocks objets&lt;/a&gt; pour tester son code de manière isolée. La séparation en couches applicatives est une bonne pratique de développement d&amp;rsquo;application d&amp;rsquo;entreprise qui permet de bien faciliter les tests unitaires, par exemple il est plus facile de tester la couche service indépendamment de la couche &lt;a href='http://en.wikipedia.org/wiki/Data_Access_Object'&gt;DAO&lt;/a&gt; sans avoir besoin de données de tests persistantes. Les tests unitaires s&amp;rsquo;exécutent très rapidement, ils n&amp;rsquo;ont pas besoin d&amp;rsquo;éléments d&amp;rsquo;infrastructure comme une base de données, un serveur d&amp;rsquo;applications, &amp;hellip;
Les tests unitaires apportent beaucoup en terme de productivité car ils ne nécessitent pas d&amp;rsquo;avoir à débugger manuellement l&amp;rsquo;application. De plus, ils sont les garants d&amp;rsquo;une non-régression de l&amp;rsquo;application. S&amp;rsquo;ils sont écrits avant le code, ils ont en plus l&amp;rsquo;avantage d&amp;rsquo;orienter le code et d&amp;rsquo;éviter d&amp;rsquo;avoir du code mort dans l&amp;rsquo;application (c&amp;rsquo;est à dire non testé). Une des mauvaises habitudes des développeurs lorsqu&amp;rsquo;ils font des tests unitaires est de croire qu&amp;rsquo;ils n&amp;rsquo;ont pas besoin de faire de tests unitaires pour une petite partie de code, or c&amp;rsquo;est l&amp;rsquo;inverse, une bonne pratique du &lt;a href='http://en.wikipedia.org/wiki/Test-driven_development'&gt;TDD&lt;/a&gt; consiste à écrire un peu de test, puis un peu de code et ainsi de suite pour avoir une qualité maitriser et éviter d&amp;rsquo;avoir à comprendre pourquoi le code ne passe pas le test et d&amp;rsquo;éviter d&amp;rsquo;utiliser le debugger. 
Les tests d&amp;rsquo;intégration sont des tests avec tout le système, c&amp;rsquo;est à dire avec la vraie base de données, avec le vrai web service installé, avec l&amp;rsquo;application web. Ces tests sont des tests plus grosse maille qui testent le comportement général de l&amp;rsquo;application. Ces tests permettent de détecter une erreur mais ne permettent pas de savoir où elle se situe. Ce sont les tests unitaires qui permettent de savoir où est l&amp;rsquo;anomalie de manière précise. Il est donc indispensable de coupler les tests unitaires avec les tests d&amp;rsquo;intégration pour garantir une bonne qualité de l&amp;rsquo;application.&lt;/p&gt;
&lt;p&gt;Il est coutume de parler de deux autres catégories de tests: les &lt;a href='http://fr.wikipedia.org/wiki/Test_(informatique)'&gt;test fonctionnels&lt;/a&gt; et les &lt;a href='http://fr.wikipedia.org/wiki/Test_de_recette'&gt;tests de recette&lt;/a&gt;.
Les tests fonctionnels sont des tests d&amp;rsquo;intégration dont l&amp;rsquo;objectif est de tester une fonctionnalité métier, ce sont des tests à destination de la &lt;a href='http://fr.wikipedia.org/wiki/Ma%eetrise_d'ouvrage'&gt;MOA&lt;/a&gt; ou des &lt;a href='http://fr.wikipedia.org/wiki/Analyse_fonctionnelle_(conception)'&gt;analystes fonctionnels&lt;/a&gt;. Ces tests à la différence des tests de recette ne communiquent pas avec le vrai système, c&amp;rsquo;est à dire que les systèmes externes comme une base de données, un web service, un legacy sont bouchonnés faute d&amp;rsquo;environnement pour les tester. Les tests de recette sont des tests bout en bout qui testent l&amp;rsquo;application dans son véritable environnement, en général sur la plate-forme de pré-production. Ces tests sont aussi ceux qui permettent au client de dire &amp;ldquo;GO&amp;rdquo; à la mise en production.&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;autres tests sont détaillés dans l&amp;rsquo;article suivant &lt;a href='http://fr.wikipedia.org/wiki/Test_(informatique)'&gt;http://fr.wikipedia.org/wiki/Test_(informatique)&lt;/a&gt;, parmis eux les tests de performance, les tests de non-régression, les tests de robustesse et les tests de vulnérabilité.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6226126200220680527?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6226126200220680527/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6226126200220680527' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6226126200220680527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6226126200220680527'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/testing_03.html' title='Testing'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7341181622603819921</id><published>2008-03-02T07:08:00.001-08:00</published><updated>2008-03-02T07:12:22.905-08:00</updated><title type='text'>Tantric</title><content type='html'>J'ai découvert ce groupe par hasard, un petit bijou entre &lt;a href="http://en.wikipedia.org/wiki/Lifehouse_%28band%29"&gt;Lifehouse&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Nickelback"&gt;NickelBack&lt;/a&gt; et &lt;a href="http://en.wikipedia.org/wiki/Creed_(band)"&gt;Creed&lt;/a&gt;
&lt;br/&gt;
&lt;center&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3l_Z-9TfDuQ"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/3l_Z-9TfDuQ" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7341181622603819921?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7341181622603819921/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7341181622603819921' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7341181622603819921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7341181622603819921'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/03/tantric.html' title='Tantric'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2683047023344211814</id><published>2008-02-29T04:52:00.001-08:00</published><updated>2008-02-29T04:52:34.408-08:00</updated><title type='text'>FitnesseMaven</title><content type='html'>&lt;p&gt;Toujours dans la problématique d&amp;rsquo;avoir qu&amp;rsquo;un seul référentiel de fixtures &lt;a href='http://fitnesse.org'&gt;Fitnesse&lt;/a&gt; testables avec plusieurs version du code, c&amp;rsquo;est à dire avec une version stable pour les rédacteurs de tests et snapshot sur les postes de dev, il existe une solution si votre code est &lt;a href='http://maven.apache.org/'&gt;mavenisé&lt;/a&gt; grâce au &lt;a href='http://mojo.codehaus.org/fitnesse-maven-plugin/run-mojo.html'&gt;plugin fitnesse&lt;/a&gt; développé par Antoine Veret et Philippe Kernevez.
C&amp;rsquo;est du très bon plugin, pas besoin d&amp;rsquo;installer un fitnesse local !!&lt;/p&gt;
&lt;p&gt;Imaginons que vous ayez un serveur central Fitnesse sur lequel travaille la MOA, que vous êtes développeur et que vous souhaitez développer des fixtures Fitnesse en local, voici un exemple de &lt;strong&gt;pom.xml&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&amp;lt;project&amp;gt;
&amp;hellip;
&amp;lt;repositories&amp;gt;
&amp;lt;repository&amp;gt;
&amp;lt;id&amp;gt;codehaus-mojo&amp;lt;/id&amp;gt;
&amp;lt;url&amp;gt;http://repository.codehaus.org&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;/repositories&amp;gt;
&amp;lt;build&amp;gt;
&amp;lt;plugins&amp;gt;
&amp;lt;plugin&amp;gt;
	&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;
	&amp;lt;artifactId&amp;gt;fitnesse-maven-plugin&amp;lt;/artifactId&amp;gt;
	&amp;lt;version&amp;gt;1.0-beta-2&amp;lt;/version&amp;gt;
	&amp;lt;configuration&amp;gt;
		&amp;lt;fitnesses&amp;gt;
			&amp;lt;fitnesse&amp;gt;
				&amp;lt;hostName&amp;gt;fitnesse-server&amp;lt;/hostName&amp;gt;
				&amp;lt;port&amp;gt;8085&amp;lt;/port&amp;gt;
				&amp;lt;pageName&amp;gt;
					JavaExamples.PlainSeleniumTest.ClickTest
				&amp;lt;/pageName&amp;gt;
			&amp;lt;/fitnesse&amp;gt;
		&amp;lt;/fitnesses&amp;gt;
		&amp;lt;failOnError&amp;gt;true&amp;lt;/failOnError&amp;gt;
		&amp;lt;classPathSubstitutions&amp;gt;
		&amp;lt;classPathSubstitution&amp;gt;
	                &amp;lt;search&amp;gt;/etc/udd/m2_repository&amp;lt;/search&amp;gt;
	                &amp;lt;replaceWith&amp;gt;c:/documents and settings/&amp;hellip;/repository&amp;lt;/replaceWith&amp;gt;
	            &amp;lt;/classPathSubstitution&amp;gt;
	            &amp;lt;classPathSubstitution&amp;gt;
	                &amp;lt;search&amp;gt;/&amp;lt;/search&amp;gt;
	                &amp;lt;replaceWith&amp;gt;&amp;#x3c;/replaceWith&amp;gt;
	            &amp;lt;/classPathSubstitution&amp;gt;
            	&amp;lt;/classPathSubstitutions&amp;gt;
	&amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;
&amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&amp;hellip;
&amp;lt;/project&amp;gt;&lt;/pre&gt;
&lt;p&gt;La suite &lt;strong&gt;JavaExamples.PlainSeleniumTest.ClickTest&lt;/strong&gt; est lancée sur le serveur &lt;strong&gt;fitnesse-server&lt;/strong&gt; de port &lt;strong&gt;8085&lt;/strong&gt; avec un classpath dont les chemins composés de &lt;strong&gt;/etc/udd/m2_repository&lt;/strong&gt; sont remplacés par &lt;strong&gt;c:/documents and settings/&amp;hellip;/repository&lt;/strong&gt; et &lt;strong&gt;/&lt;/strong&gt; par &lt;strong&gt;\&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour la suite, il suffit de lancer la commande suivante:&lt;/p&gt;
&lt;pre&gt;mvn fitnesse:run&lt;/pre&gt;
&lt;p&gt;Le résultat de la page Fitnesse est positionné dans le répertoire &lt;strong&gt;target&lt;/strong&gt;, un fichier de type &lt;strong&gt;output&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez remarquer que j&amp;rsquo;ai ajouté la ligne &lt;strong&gt;&amp;lt;failOnError&amp;gt;true&amp;lt;/failOnError&amp;gt;&lt;/strong&gt; pour faire échouer le build quand le(s) test(s) ne passe(nt) pas au vert.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2683047023344211814?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2683047023344211814/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2683047023344211814' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2683047023344211814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2683047023344211814'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/fitnessemaven_29.html' title='FitnesseMaven'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5700852172858170126</id><published>2008-02-28T09:39:00.001-08:00</published><updated>2008-02-28T09:39:23.775-08:00</updated><title type='text'>FitnesseTeam</title><content type='html'>&lt;p&gt;Plusieurs solutions sont possibles comme utilisation de &lt;a href='http://fitnesse.org'&gt;Fitnesse&lt;/a&gt; en équipe:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Utilisation d&amp;rsquo;un serveur central&lt;/li&gt;
&lt;li&gt; Importer les tests à partir du wiki central&lt;/li&gt;
&lt;li&gt; Mettre les tests dans un référentiel de code&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Utilisation d&amp;rsquo;un serveur central&lt;/h3&gt;
&lt;p&gt;L&amp;rsquo;utilisation d&amp;rsquo;un serveur central implique la mise en place d&amp;rsquo;un serveur d&amp;rsquo;intégration continue qui se charge de compiler le code régulièrement et de le rendre disponible pour Fitnesse. L&amp;rsquo;avantage de cette solution est que les tests sont enregistrés à un seul endroit et donc permet à la MOA et à l&amp;rsquo;équipe de dev de ne pas avoir besoin d&amp;rsquo;installer un outil. L&amp;rsquo;inconvénient est qu&amp;rsquo;il faut attendre que le build est fini pour pouvoir profiter des modifications sur les fixtures ou sur le code.&lt;/p&gt;
&lt;h3&gt; Importer les tests à partir du wiki central&lt;/h3&gt;
&lt;p&gt;La deuxième solution est d&amp;rsquo;utiliser un serveur central pour le stockage des pages wiki de tests et d&amp;rsquo;exécuter les tests sur le poste des développeurs. Dans cette solution, les tests ne sont jamais exécutés sur le serveur et donc les problèmes de build n&amp;rsquo;ont pas de conséquences sur le développement et la mise à jour des fixtures Fitnesse.
Il est impossible d&amp;rsquo;importer les tests à partir du wiki du serveur central Fitnesse. Pour importer les tests distants, il suffit de créer la page sur le serveur local qui servira de root pour la hiérarchie d&amp;rsquo;imports, ensuite mettre &lt;strong&gt;!contents -R&lt;/strong&gt; en tant que contenu de cette page. Ensuite il faut aller dans les &lt;strong&gt;Properties&lt;/strong&gt; Fitnesse de la page, entrer l&amp;rsquo;URL dans le champ &lt;strong&gt;Import Wiki&lt;/strong&gt; et cliquer sur le bouton &lt;strong&gt;Import&lt;/strong&gt;. Le serveur local importe la version distante du wiki. Dès que vous lancer les tests à partir du bouton &lt;strong&gt;Test&lt;/strong&gt;, il est possible de voir le contenu du test importé.
L&amp;rsquo;option &lt;strong&gt;Automatically update imported content when executing tests&lt;/strong&gt; peut être coché pour permettre la mise à jour du wiki du test avant chaque lancement de test. Cette méthode est une bonne approche même si elle peut entraîner des problèmes de synchronisation entre les versions du wiki central et le wiki local.&lt;/p&gt;
&lt;h3&gt; Mettre les tests dans un référentiel de code&lt;/h3&gt;
&lt;p&gt;La dernière solution consiste à positionner les tests dans un référentiel de code de type subversion.
C&amp;rsquo;est sans doute la meilleure solution car tout est stocké au niveau du subversion. Il est plus facile de faire un différentiel entre les versions. Attention, le mode de stockage actuel de Fitnesse entraîne une pollution du référentiel de code avec des fichiers de zip. Néanmoins, ce mode de stockage peut être désactivé en ajoutant l&amp;rsquo;option &lt;strong&gt;-e 0&lt;/strong&gt; dans le script de lancement de Fitnesse.&lt;/p&gt;
&lt;h3&gt; Organisation des fichiers&lt;/h3&gt;
&lt;p&gt;L&amp;rsquo;utilisation de chemin absolu peut être problématique dans le cas d&amp;rsquo;une utilisation locale puis serveur. Pour cela, il est possible d&amp;rsquo;utiliser des variables qui varie en fonction de l&amp;rsquo;environnement.&lt;/p&gt;
&lt;pre&gt;!define M2_REPO {blabla}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5700852172858170126?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5700852172858170126/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5700852172858170126' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5700852172858170126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5700852172858170126'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/fitnesseteam.html' title='FitnesseTeam'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7895199047108125086</id><published>2008-02-27T13:54:00.003-08:00</published><updated>2008-02-27T13:54:50.487-08:00</updated><title type='text'>Coaching</title><content type='html'>&lt;h3&gt; Qu&amp;rsquo;est ce que le coaching ?&lt;/h3&gt;
&lt;p&gt;Le terme &lt;strong&gt;coaching&lt;/strong&gt; vient du sport, de &lt;a href='http://www.amazon.fr/Inner-Game-Tennis-W-Timothy-Gallwey/dp/0330295136'&gt;Timothy Gallway&lt;/a&gt; , ça me fait super rire car j&amp;rsquo;ai lu ce bouquin quand j&amp;rsquo;avais 15 ans pour améliorer mon mental au tennis, il me reste toujours des progrès à faire de ce côté là (y&amp;rsquo;a que les tennismen qui peuvent comprendre) ;)&lt;/p&gt;
&lt;p&gt;Le coaching s&amp;rsquo;est développé dans l&amp;rsquo;entreprise pour toutes les professions qui comportent une relation d&amp;rsquo;accompagnement et pour tous ceux qui:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; veulent mener un projet à son terme&lt;/li&gt;
&lt;li&gt; aspirent à mieux vivre mais n&amp;rsquo;ont pas l&amp;rsquo;envie ou ne ressentent pas le besoin d&amp;rsquo;un travail de thérapie ou de développement personnel&lt;/li&gt;
&lt;li&gt; souhaitent supprimer une gêne ou un handicap.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le coaching a fait ses preuves dans la &lt;strong&gt;dynamisation des groupes&lt;/strong&gt; et l&amp;rsquo;&lt;strong&gt;optimisation des équipes&lt;/strong&gt;; il entre fréquement dans le domaine des performances et des comportements individuels&lt;/p&gt;
&lt;h3&gt; Réalité du coaching&lt;/h3&gt;
&lt;p&gt;Le coaching consiste en l&amp;rsquo;accompagnement sur mesure d&amp;rsquo;une personne dans une démarche de changement, à un moment clé de sa vie, à partir des besoins qu&amp;rsquo;elle exprime, jusqu&amp;rsquo;à l&amp;rsquo;atteinte complète de ses objectifs précis. Le coaching l&amp;rsquo;amène durablement à plus de performances et de succès, d&amp;rsquo;autonomie et de réalisation de soi, grâce au développement concomitant de son potentiel et de son savoir-faire.&lt;/p&gt;
&lt;h3&gt; Questions&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;Quoi ?&lt;/strong&gt; Accompagnement sur mesure&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Qui ?&lt;/strong&gt; Une personne par le coach&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Quand ?&lt;/strong&gt; A un moment clé de sa vie&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;D&amp;rsquo;où ?&lt;/strong&gt; Des besoins qu&amp;rsquo;elle exprime&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Pour quoi ?&lt;/strong&gt; Jusqu&amp;rsquo;à l&amp;rsquo;atteinte complète d&amp;rsquo;objectifs précis&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Comment ?&lt;/strong&gt; Dans une démarche de changement, impliquant le développement de son potentiel et de son savoir-faire&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Pourquoi ?&lt;/strong&gt; Pour l&amp;rsquo;amener durablement vers plus de performance, de succés, d&amp;rsquo;autonomie et de réalisation de soi&lt;/p&gt;
&lt;p style='padding-top:20px;text-align:center'&gt; &lt;em&gt;Extraits de Coaching Mode d&amp;rsquo;emploi au édition marabout&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7895199047108125086?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7895199047108125086/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7895199047108125086' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7895199047108125086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7895199047108125086'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/coaching_27.html' title='Coaching'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1028582356884470590</id><published>2008-02-27T06:42:00.001-08:00</published><updated>2008-02-27T06:42:16.948-08:00</updated><title type='text'>FitnesseSelenium</title><content type='html'>&lt;p&gt;&lt;a href='http://fitnesse.info/webtest/'&gt;WebTest&lt;/a&gt; est une extension Fitnesse qui permet d&amp;rsquo;utiliser le wiki Fitnesse pour exécuter des tests Selenium.&lt;/p&gt;
&lt;h3&gt; Installation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Télécharger la dernière version packagée avec Fitnesse et Selenium sur &lt;a href='http://fitnesse.info/webtest'&gt;http://fitnesse.info/webtest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; Déziper le fichier&lt;/li&gt;
&lt;li&gt; Lancer les scripts &lt;strong&gt;startFitnesse.bat(.sh)&lt;/strong&gt; et &lt;strong&gt;startSeleniumRC.bat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; L&amp;rsquo;url de Fitnesse est accessible en &lt;a href='http://localhost:8085'&gt;http://localhost:8085&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Tests&lt;/h3&gt;
&lt;p&gt;Des exemples Java sont disponibles sur &lt;a href='http://localhost:8085/JavaExamples'&gt;http://localhost:8085/JavaExamples&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;webtest fournit deux types de tests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; PlainSeleniumTest: correspond à des tests reprenant la syntaxe générée par le plugin Firefox &lt;a href='http://selenium-ide.openqa.org/'&gt;Selenium IDE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; WebTest: correspond à une syntaxe plus orientée utilisateur: user Opens URL, destinée à des utilisateurs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Premiers tests&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; J&amp;rsquo;ai utilisé le plugin firefox Selenium IDE pour générer des tests de vérification de navigation, j&amp;rsquo;ai ajouté des assertions de type &lt;strong&gt;verifyTextPresent&lt;/strong&gt; à partir du bouton droit de la souris.&lt;/li&gt;
&lt;li&gt; Ensuite j&amp;rsquo;ai cliqué sur le bouton &lt;strong&gt;Selenium Test Runner&lt;/strong&gt; pour pouvoir récupérer les tests Selenium sous forme de tableau Excel&lt;/li&gt;
&lt;li&gt; Ensuite sous Fitnesse, j&amp;rsquo;ai cliqué sur le bouton &lt;strong&gt;FitNesse To SpreadSheat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; J&amp;rsquo;ai collé les tests Fitnesse que j&amp;rsquo;ai positionné dans le presse papier&lt;/li&gt;
&lt;li&gt; J&amp;rsquo;ai sauvé et lancé le test&lt;/li&gt;
&lt;li&gt; Les tests ne fonctionnaient pas car webtest ne connait pas la directive &lt;strong&gt;clickAndWait&lt;/strong&gt;, j&amp;rsquo;ai donc remplacer cette directive &lt;strong&gt;clickAndWait&lt;/strong&gt; par &lt;strong&gt;click&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; Du coup les tests ne passaient plus à cause des temps de réponse du serveur (serveur JONAS :))&lt;/li&gt;
&lt;li&gt; J&amp;rsquo;ai dû remplacer &lt;strong&gt;verifyTextPresent&lt;/strong&gt; par &lt;strong&gt;waitForTextPresent&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; Et hops la barre verte !&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Astuces&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Il arrive que vous n&amp;rsquo;avez pas de terminal X sur le serveur où fonctionne Fitnesse ou vous n&amp;rsquo;avez le navigateur que vous souhaitez, genre Internet Explorer que vous ne trouvez que sur Windows, c&amp;rsquo;est pas grave vous pouvez lancer le serveur Selenium sur votre poste local (qui a les bons navigateur) et faire pointer le test du serveur Fitnesse sur ce serveur.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voici un exemple de SetUp:&lt;/p&gt;
&lt;pre&gt;!include -c .VariableDefinitions
!|com.neuri.webfixture.PlainSeleniumTest|
!|start browser|${browser}|&amp;lt;ip_serveur_selenium&amp;gt;|4444|http://&amp;lt;ip_serveur_fitnesse&amp;gt;:8085|
!|open|http://&amp;lt;ip_serveur_fitnesse&amp;gt;:8085/HtmlElements|&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1028582356884470590?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1028582356884470590/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1028582356884470590' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1028582356884470590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1028582356884470590'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/fitnesseselenium_27.html' title='FitnesseSelenium'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6723578337805553488</id><published>2008-02-26T12:04:00.001-08:00</published><updated>2008-02-26T12:07:23.212-08:00</updated><title type='text'>Smoothie</title><content type='html'>C’est quoi Smoothie, un nouveau framework qui déchire !! En quelque sorte, mais c’est un framework pour vous ;)
&lt;p&gt;Vous avez besoin de fruits, de vrais fruits, vous en avez marre de boire du concentré, et bien Smoothie c’est ce qu’il vous faut.
Dixit sur la boîte…&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/R8Rw9VTlshI/AAAAAAAAATc/gYQV30UwAdA/s1600-h/smoothie.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/R8Rw9VTlshI/AAAAAAAAATc/gYQV30UwAdA/s320/smoothie.jpg" alt="" id="BLOGGER_PHOTO_ID_5171382471121809938" border="0" /&gt;&lt;/a&gt;&lt;h3&gt; un smoothie, c’est quoi ?&lt;/h3&gt;
&lt;p&gt;Un smoothie, c’est du fruit à boire: un mélange de fruits entiers et de jus de fruits. C’est tout.&lt;/p&gt;
&lt;h3&gt; la promesse innocent&lt;/h3&gt;
&lt;p&gt;Nous vous promettons que tout ce qui est &lt;strong&gt;innocent&lt;/strong&gt; &lt;em&gt;TM&lt;/em&gt; (Tintin et Milou) sera toujours beau, bon et vous fera du bien.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Pas de concentré&lt;/li&gt;
&lt;li&gt; Pas d’additif bizarre&lt;/li&gt;
&lt;li&gt; Pas de colorant&lt;/li&gt;
&lt;li&gt; Pas d’OGM&lt;/li&gt;
&lt;li&gt; Pas de conservateur&lt;/li&gt;
&lt;li&gt; Pas de sucre ajouté&lt;/li&gt;
&lt;li&gt; Pas de E machin chose&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et en plus, on ne trichera jamais au Monopoly.&lt;/p&gt;
&lt;h3&gt; Et d’autres&lt;/h3&gt;
&lt;p&gt;En plus d’être drôle, d’avoir un packaging sympa, c’est &lt;strong&gt;bon&lt;/strong&gt; et moi qui ne mange pas forcément beaucoup de fruits, forcément vu ce qu’on nous propose au supermarché, j’adopte ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6723578337805553488?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6723578337805553488/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6723578337805553488' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6723578337805553488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6723578337805553488'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/smoothie_26.html' title='Smoothie'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_I6qpNMiW2Ys/R8Rw9VTlshI/AAAAAAAAATc/gYQV30UwAdA/s72-c/smoothie.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-5932089508924877405</id><published>2008-02-25T13:01:00.001-08:00</published><updated>2008-02-25T13:01:37.374-08:00</updated><title type='text'>StrategieDeTests</title><content type='html'>&lt;p&gt;Tester de manière automatique une application n&amp;rsquo;est pas facile. Pourquoi souhaite t-on faire des tests automatiques ? Quels sont les différents types de tests ? Cet article tente de répondre à ces questions par rapport aux usages que j&amp;rsquo;ai pu en faire sur les projets et aux réflexions que j&amp;rsquo;ai pu partager avec d&amp;rsquo;autres.&lt;/p&gt;
&lt;h3&gt; Les différents types de tests&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Les tests de recette: ces tests sont des tests de bout en bout qui permettent de tester l&amp;rsquo;application dans son ensemble, dans son contexte d&amp;rsquo;exécution. Par exemple, le test d&amp;rsquo;une IHM avec sa base de données et des appels de web services entre dans cette catégorie. Ces tests sont destinés à la MOA qui valide l&amp;rsquo;application par rapport à ses besoins.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; Les tests unitaires: ces tests sont destinés à aider les développeurs et à les rassurer sur le comportement du bout de code qu&amp;rsquo;ils ont écrit. Ils leur permettent de refactoriser leur code sans crainte d&amp;rsquo;une non-régression, de plus ils permettent d&amp;rsquo;éviter d&amp;rsquo;utiliser le débuggeur qui permet beaucoup de temps dans le débuggage d&amp;rsquo;une application. Ces tests sont souvent accompagnés de frameworks mockobjects qui permettent de simplifier la création d&amp;rsquo;objets mocks et permettent de tester la logique d&amp;rsquo;une classe indépendamment de ses dépendances.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; Les tests d&amp;rsquo;intégration ou système: ces tests permettent de valider la connectique de toute l&amp;rsquo;application mais ne teste pas fonctionnellement l&amp;rsquo;application comme peuvent le faire les tests de recette.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; Remarques&lt;/h3&gt;
&lt;p&gt;Les tests de recette sont écrits par la MOA par l&amp;rsquo;intermédiaire d&amp;rsquo;une documentation testable comme Fitnesse ou Green pepper. Ces tests ne tiennent pas compte de l&amp;rsquo;infrastructure de l&amp;rsquo;application. Par exemple, une application de type Web qui permet de souscrire à un abonnement ne s&amp;rsquo;intéresse pas aux appels effectués sur le SI. Par contre, la compagne de tests doit permettre de valider l&amp;rsquo;ensemble des besoins applicatifs et donc pouvoir valider que l&amp;rsquo;information a bien été transmise au SI.
Ces tests automatiques de recette peuvent être lancés à partir d&amp;rsquo;un selenium embarqué dans Fitnesse avec une base de données mémoire type HSQL et des mocks au niveau des web services.&lt;/p&gt;
&lt;p&gt;Les tests unitaires ne sont pas nécessaires partout surtout sur la couche Controller qui est difficile à tester. Il est préférable d&amp;rsquo;utiliser des tests Selenium dans ce cas sur l&amp;rsquo;interface graphique. Par contre, pour la couche service et dao, il est nécessaire de faire des tests unitaires qui permettent de valider la logique métier de l&amp;rsquo;application. L&amp;rsquo;important est d&amp;rsquo;écrire des tests où les développeurs ont le plus de crainte. L&amp;rsquo;effort doit être sur la partie la plus risquée et la plus difficile à débugger.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-5932089508924877405?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/5932089508924877405/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=5932089508924877405' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5932089508924877405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/5932089508924877405'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/strategiedetests.html' title='StrategieDeTests'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-83036281266516384</id><published>2008-02-25T08:38:00.001-08:00</published><updated>2008-02-25T08:38:00.243-08:00</updated><title type='text'>JUnit4</title><content type='html'>&lt;p&gt;&lt;a href='http://www.junit.org'&gt;JUnit4&lt;/a&gt; est la nouvelle version de JUnit. JUnit4 apporte les annotations qui permettent de simplifier l&amp;rsquo;écriture des tests, il est possible de dire qu&amp;rsquo;une méthode est testable avec &lt;strong&gt;@Test&lt;/strong&gt;, de plus les exceptions sont gérées avec la directive &lt;strong&gt;expected=true&lt;/strong&gt; et vérifier le temps d&amp;rsquo;exécution avec la directive &lt;strong&gt;timeout=500&lt;/strong&gt;. Petit reproche, on ne peut pas tester le message de retour d&amp;rsquo;une exception avec les annotations :(&lt;/p&gt;
&lt;h4&gt; Méthodes de tests&lt;/h4&gt;
&lt;p&gt;Avant:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
public void testHelloWorld() {
}&lt;/pre&gt;
&lt;p&gt;JUnit4:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
@Test
public void helloWorld() {
}&lt;/pre&gt;
&lt;h4&gt; Assertions&lt;/h4&gt;
&lt;p&gt;Avant:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
public class HelloWorldTest extends TestCase {
  public void testHelloWorld() {
    assertEquals(&amp;ldquo;hello world&amp;rdquo;,helloWorld.getMessage());
  }
}&lt;/pre&gt;
&lt;p&gt;En JUnit4:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
public class HelloWorldTest extends TestCase {
  @Test
  public void helloWorld() {
    Assert.assertEquals(&amp;ldquo;hello world&amp;rdquo;,helloWorld.getMessage());
  }
}&lt;/pre&gt;
&lt;h4&gt; Les exceptions&lt;/h4&gt;
&lt;p&gt;Avant:&lt;/p&gt;
&lt;pre&gt;public void test02() {
    try {
        testenechec();
        fail&amp;nbsp;;
    }
    catch (TypedException e) {
        assertEquals(&amp;ldquo;Toto&amp;rdquo;,e.getMessage());
    }
}&lt;/pre&gt;
&lt;p&gt;JUnit4:&lt;/p&gt;
&lt;pre&gt;@Test(expected=TypedException.class) 
  public void 01() {
    testenechec();
}&lt;/pre&gt;
&lt;h4&gt; Les timeout&lt;/h4&gt;
&lt;pre&gt;@Test(timeout=500) public void 03() {
    traitement();
} &lt;/pre&gt;
&lt;h4&gt; Une nouvelle méthode de test&lt;/h4&gt;
&lt;p&gt;Tester les tableaux d&amp;rsquo;objets:&lt;/p&gt;
&lt;pre&gt;assertEquals(Object[] expected, Object[] actual)&lt;/pre&gt;
&lt;h4&gt; SetUp / tearDown&lt;/h4&gt;
&lt;p&gt;Avant:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
protected void setUp() {
}&lt;/pre&gt;
&lt;p&gt;JUnit4:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
@Before
protected void init() {
}&lt;/pre&gt;
&lt;p&gt;Avant:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
protected void tearDown() {
}&lt;/pre&gt;
&lt;p&gt;JUnit4:&lt;/p&gt;
&lt;pre&gt; &amp;hellip;
@After
protected void close() {
}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-83036281266516384?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/83036281266516384/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=83036281266516384' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/83036281266516384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/83036281266516384'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/junit4.html' title='JUnit4'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2818947664855651912</id><published>2008-02-18T15:11:00.001-08:00</published><updated>2008-02-18T15:11:41.124-08:00</updated><title type='text'>Unitils</title><content type='html'>&lt;p&gt;&lt;a href='http://www.unitils.org'&gt;Unitils&lt;/a&gt; est un framework qui permet de simplifier grandement les tests unitaires. Il fournit des fonctionnalités permettant de tester simplement la base de données à l&amp;rsquo;aide de &lt;a href='http://www.dbunit.org/'&gt;DBUnit&lt;/a&gt;, il permet de simplifier l&amp;rsquo;écriture de mocks dynamique et s&amp;rsquo;intègre avec &lt;a href='http://www.springframework.org/'&gt;Spring&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cet article présente comment tester la couche service et dao d&amp;rsquo;une application web Spring 2 / Hibernate 3 avec Unitils&lt;/p&gt;
&lt;h3&gt; Tester la couche de persistance&lt;/h3&gt;
&lt;p&gt;Le test: &lt;/p&gt;
&lt;pre&gt;import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.unitils.UnitilsJUnit4;
import org.unitils.dbunit.annotation.DataSet;
import org.unitils.reflectionassert.ReflectionAssert;
import org.unitils.spring.annotation.SpringApplicationContext;
import org.unitils.spring.annotation.SpringBean;
@SpringApplicationContext(&amp;ldquo;applicationContext.xml&amp;rdquo;)
public class UserDaoTest extends UnitilsJUnit4 {
	@SpringBean(&amp;ldquo;userDao&amp;rdquo;)
	IUserDao userDao;
	@DataSet
	@Test
	public void listUsers() {
		List&amp;lt;User&amp;gt; users = userDao.listUsers();
        ReflectionAssert.assertPropertyLenEquals(
                &amp;ldquo;firstName&amp;rdquo;,
                Arrays.asList(&amp;ldquo;rod&amp;rdquo;),
                users);
        ReflectionAssert.assertPropertyLenEquals(
                &amp;ldquo;lastName&amp;rdquo;,
                Arrays.asList(&amp;ldquo;johnson&amp;rdquo;),
                users);
	}
	@DataSet
	@Test
	public void getUser() {
		User user = userDao.getUser(1L);
		ReflectionAssert.assertPropertyLenEquals(&amp;ldquo;firstName&amp;rdquo;,&amp;ldquo;rod&amp;rdquo;,user);
		ReflectionAssert.assertPropertyLenEquals(&amp;ldquo;lastName&amp;rdquo;,&amp;ldquo;johnson&amp;rdquo;,user);
	}
	@DataSet
	@Test
	public void deleteUser() {
		userDao.deleteUser(1L);
		ReflectionAssert.assertLenEquals(userDao.getUser(1L),null);
	}
	@DataSet
	@Test
	public void saveUser() {
		User u = new User(&amp;ldquo;mat&amp;rdquo;,&amp;ldquo;raible&amp;rdquo;);
		userDao.saveUser(u);
		List&amp;lt;User&amp;gt; users = userDao.listUsers();
		ReflectionAssert.assertLenEquals(2,users.size());
		u.setFirstName(&amp;ldquo;Jeff&amp;rdquo;);
		userDao.saveUser(u);
		users = userDao.listUsers();
		ReflectionAssert.assertLenEquals(2,users.size());
	}
}&lt;/pre&gt;
&lt;p&gt;Le code du DAO:&lt;/p&gt;
&lt;pre&gt;import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
public class UserDao extends HibernateDaoSupport implements IUserDao {
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public List&amp;lt;User&amp;gt; listUsers() {
		return getHibernateTemplate().find(&amp;ldquo;from User&amp;rdquo;);
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public void deleteUser(Long id) {
		getHibernateTemplate().delete(id);
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public User getUser(Long id) {
		return (User) getHibernateTemplate().get(User.class, id);
	}
	@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
	public void saveUser(User u) {
		getHibernateTemplate().saveOrUpdate(u);
	}
}&lt;/pre&gt;
&lt;h3&gt; Tester la couche service:&lt;/h3&gt;
&lt;p&gt;Le test:&lt;/p&gt;
&lt;pre&gt;import java.util.ArrayList;
import java.util.List;
import org.easymock.EasyMock;
import org.junit.Test;
import org.unitils.UnitilsJUnit4;
import org.unitils.easymock.EasyMockUnitils;
import org.unitils.easymock.annotation.Mock;
import org.unitils.inject.annotation.InjectIntoByType;
import org.unitils.inject.annotation.TestedObject;
import org.unitils.reflectionassert.ReflectionAssert;
public class UserServiceUnitils extends UnitilsJUnit4 {
	@Mock
	@InjectIntoByType
	private IUserDao userDao;
	@TestedObject
	private UserService userService;
	@Test
	public void listUsers() throws Exception {
		List&amp;lt;User&amp;gt; l = new ArrayList&amp;lt;User&amp;gt;();
		EasyMock.expect(userDao.listUsers()).andReturn(l).once();
		EasyMockUnitils.replay();
		List&amp;lt;User&amp;gt; users = userService.listUsers();
		ReflectionAssert.assertRefEquals(l, users);
	}
	@Test
	public void getUser() throws Exception {
		User u = new User(&amp;ldquo;rod&amp;rdquo;, &amp;ldquo;johnson&amp;rdquo;);
		EasyMock.expect(userDao.getUser(0L)).andReturn(u).once();
		EasyMockUnitils.replay();
		User user = userService.getUser(0L);
		ReflectionAssert.assertRefEquals(u, user);
	}
	@Test
	public void deleteUser() throws Exception {
		userDao.deleteUser(0L);
		EasyMockUnitils.replay();
		userService.deleteUser(0L);
	}
	@Test
	public void saveUser() throws Exception {
		User u = new User(&amp;ldquo;rod&amp;rdquo;, &amp;ldquo;johnson&amp;rdquo;);
		userDao.saveUser(u);
		EasyMockUnitils.replay();
		userService.saveUser(u);
	}
}&lt;/pre&gt;
&lt;p&gt;Le code:&lt;/p&gt;
&lt;pre&gt;import java.util.List;
import org.springframework.stereotype.Service;
@Service(&amp;ldquo;userService&amp;rdquo;)
public class UserService implements IUserService {
	private IUserDao userDao;
	public List&amp;lt;User&amp;gt; listUsers() {
		return userDao.listUsers();
	}
	public User getUser(Long id) {
		return userDao.getUser(id);
	}
	public void saveUser(User user) {
		userDao.saveUser(user);
	}
	public void deleteUser(Long id) {
		userDao.deleteUser(userDao.getUser(id));
	}
	public void setUserDao(IUserDao userDao) {
		this.userDao = userDao;
	}
}&lt;/pre&gt;
&lt;h3&gt; Le contexte Spring&lt;/h3&gt;
&lt;pre&gt;&amp;lt;?xml version=&amp;ldquo;1.0&amp;rdquo; encoding=&amp;ldquo;UTF-8&amp;rdquo;?&amp;gt;
&amp;lt;beans xmlns=&amp;ldquo;http://www.springframework.org/schema/beans&amp;rdquo;
       xmlns:xsi=&amp;ldquo;http://www.w3.org/2001/XMLSchema-instance&amp;rdquo;
       xmlns:context=&amp;ldquo;http://www.springframework.org/schema/context&amp;rdquo;
       xsi:schemaLocation=&amp;ldquo;
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
       &amp;rdquo;&amp;gt;
    &amp;lt;context:annotation-config/&amp;gt;
    &amp;lt;context:component-scan base-package=&amp;ldquo;mypackage&amp;rdquo;/&amp;gt;
    &amp;lt;bean id=&amp;ldquo;dataSource&amp;rdquo; class=&amp;ldquo;org.apache.commons.dbcp.BasicDataSource&amp;rdquo;
          destroy-method=&amp;ldquo;close&amp;rdquo;&amp;gt;
        &amp;lt;property name=&amp;ldquo;driverClassName&amp;rdquo; value=&amp;ldquo;org.hsqldb.jdbcDriver&amp;rdquo;/&amp;gt;
        &amp;lt;property name=&amp;ldquo;url&amp;rdquo; value=&amp;ldquo;jdbc:hsqldb:mem:aname&amp;rdquo;/&amp;gt;
        &amp;lt;property name=&amp;ldquo;username&amp;rdquo; value=&amp;ldquo;sa&amp;rdquo;/&amp;gt;
        &amp;lt;property name=&amp;ldquo;password&amp;rdquo; value=&amp;ldquo;&amp;rdquo;/&amp;gt;
    &amp;lt;/bean&amp;gt;
    &amp;lt;bean id=&amp;ldquo;sessionFactory&amp;rdquo;
          class=&amp;ldquo;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean&amp;rdquo;&amp;gt;
        &amp;lt;property name=&amp;ldquo;dataSource&amp;rdquo; ref=&amp;ldquo;dataSource&amp;rdquo;/&amp;gt;
        &amp;lt;property name=&amp;ldquo;hibernateProperties&amp;rdquo;&amp;gt;
            &amp;lt;value&amp;gt;
                hibernate.dialect=org.hibernate.dialect.HSQLDialect
                hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
                hibernate.show_sql=false
                hibernate.use_sql_comments=false
                hibernate.jdbc.batch_size=0
                hibernate.hbm2ddl.auto=update
            &amp;lt;/value&amp;gt;
        &amp;lt;/property&amp;gt;
        &amp;lt;property name=&amp;ldquo;annotatedClasses&amp;rdquo;&amp;gt;
            &amp;lt;list&amp;gt;
                &amp;lt;value&amp;gt;mypackage.User&amp;lt;/value&amp;gt;
            &amp;lt;/list&amp;gt;
        &amp;lt;/property&amp;gt;
    &amp;lt;/bean&amp;gt;
    &amp;lt;bean id=&amp;ldquo;userService&amp;rdquo; class=&amp;ldquo;mypackage.UserService&amp;rdquo;&amp;gt;
    	&amp;lt;property name=&amp;ldquo;userDao&amp;rdquo; ref=&amp;ldquo;userDao&amp;rdquo;/&amp;gt;
    &amp;lt;/bean&amp;gt;
    &amp;lt;bean id=&amp;ldquo;userDao&amp;rdquo; class=&amp;ldquo;mypackage.UserDao&amp;rdquo;&amp;gt;
    	&amp;lt;property name=&amp;ldquo;sessionFactory&amp;rdquo; ref=&amp;ldquo;sessionFactory&amp;rdquo;/&amp;gt;
    &amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;&lt;/pre&gt;
&lt;h3&gt; Le modele&lt;/h3&gt;
&lt;pre&gt;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User extends BaseObject {
	@Id 
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	private String firstName;
	private String lastName;
	public User(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}
	public User() {
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
}&lt;/pre&gt;
&lt;h3&gt; Le fichier DataSet de Dbunit&lt;/h3&gt;
&lt;p&gt;Au même endroit que la classe &lt;strong&gt;UserDaoTest&lt;/strong&gt;, créer un fichier &lt;strong&gt;UserDaoTest.xml&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&amp;lt;?xml version=&amp;rsquo;1.0&amp;rsquo; encoding=&amp;rsquo;UTF-8&amp;rsquo;?&amp;gt;
&amp;lt;dataset xmlns:xsi=&amp;ldquo;http://www.w3.org/2001/XMLSchema-instance&amp;rdquo; xsi:noNamespaceSchemaLocation=&amp;ldquo;dataset.xsd&amp;rdquo;&amp;gt;
    &amp;lt;User id=&amp;ldquo;1&amp;rdquo; firstName=&amp;ldquo;rod&amp;rdquo; lastName=&amp;ldquo;johnson&amp;rdquo;/&amp;gt;
&amp;lt;/dataset&amp;gt;&lt;/pre&gt;
&lt;p&gt;et créer le fichier &lt;strong&gt;unitils.properties&lt;/strong&gt; dans le CLASSPATH:&lt;/p&gt;
&lt;pre&gt;database.dialect=hsqldb
database.url=jdbc:hsqldb:mem:aname
database.userName=sa
database.driverClassName=org.hsqldb.jdbcDriver
database.schemaNames=public&lt;/pre&gt;
&lt;p&gt;Et voilà !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2818947664855651912?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2818947664855651912/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2818947664855651912' title='6 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2818947664855651912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2818947664855651912'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/unitils.html' title='Unitils'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6772220240646296370</id><published>2008-02-10T11:55:00.001-08:00</published><updated>2008-02-10T11:55:33.492-08:00</updated><title type='text'>EclipsePlugin</title><content type='html'>&lt;p&gt;Deux plugins Eclipse sympa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Easy Explorer&lt;/strong&gt;: permet d&amp;rsquo;ouvrir un explorateur de fichiers sur le projet eclipse à l&amp;rsquo;aide du bouton droit de la souris&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Easy Shell&lt;/strong&gt;: permet d&amp;rsquo;ouvrir un terminal sur le projet eclipse à l&amp;rsquo;aide du bouton droit de la souris&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour les installer, copier les fichiers présents dans le fichier zip suivant &lt;a href='https://88.178.232.8/site/eclipseplugins.zip'&gt;eclipseplugins.zip&lt;/a&gt; dans le répertoire plugins d&amp;rsquo;eclipse&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6772220240646296370?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6772220240646296370/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6772220240646296370' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6772220240646296370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6772220240646296370'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/eclipseplugin.html' title='EclipsePlugin'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-4943219173069116841</id><published>2008-02-05T01:04:00.002-08:00</published><updated>2008-02-05T01:05:04.487-08:00</updated><title type='text'>PHP et Test Driven Development</title><content type='html'>&lt;a href="http://fr.wikipedia.org/wiki/PHP"&gt;PHP&lt;/a&gt; est un langage de script permettant de générer dynamiquement des pages web sur un serveur HTTP. Depuis la version 4, PHP est objet et tend à devenir de plus en plus professionnel en particulier au niveau de la version 5 qui utilise le moteur Zend.

De même qu’il existe des outils pour faire du &lt;a href="http://fr.wikipedia.org/wiki/TDD"&gt;Test Driven Development&lt;/a&gt; en Java, il existe des outils pour faire du TDD en PHP. Des tests unitaires peuvent être écrits en &lt;a href="http://sourceforge.net/projects/phpunit/"&gt;PHPUnit&lt;/a&gt;, des IDE comme &lt;a href="http://www.zend.com/fr/store/software/studio/"&gt;Zend Studio for Eclipse&lt;/a&gt; intégre directement une vue de lancement de tests (barre verte) comme le fait Eclipse.

De même, des tests peuvent être sous la forme d’une syntaxe wiki avec &lt;a href="http://fitnesse.org/"&gt;Fitnesse&lt;/a&gt; et &lt;a href="http://phpfit.berlios.de/"&gt;PHPFit&lt;/a&gt;.

Un système d’intégration continue peut être mis en place facilement avec &lt;a href="http://phing.info/trac/"&gt;Phing&lt;/a&gt; un équivalent à &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; mais en PHP.

Un seul manque pour le moment, c’est un &lt;a href="http://phpmock.googlecode.com/"&gt;PHPMock&lt;/a&gt; comme &lt;a href="http://www.jmock.org/"&gt;JMock&lt;/a&gt; en version stable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-4943219173069116841?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/4943219173069116841/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=4943219173069116841' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4943219173069116841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/4943219173069116841'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/php-et-test-driven-development.html' title='PHP et Test Driven Development'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6492291451056498812</id><published>2008-02-05T00:38:00.000-08:00</published><updated>2008-02-05T00:44:29.410-08:00</updated><title type='text'>eXtreme Programming et phase d’exploration</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_I6qpNMiW2Ys/R6gg3tugOeI/AAAAAAAAARE/qiDZvZOngrc/s1600-h/lifecycleXPProjectBeck.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_I6qpNMiW2Ys/R6gg3tugOeI/AAAAAAAAARE/qiDZvZOngrc/s320/lifecycleXPProjectBeck.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5163413114319813090" /&gt;&lt;/a&gt;
&lt;em&gt;(Extrait de http://agilemodeling.com/essays/agileModelingXPLifecycle.htm)&lt;/em&gt;
&lt;br/&gt;&lt;br/&gt;
Quand on commence son projet XP, on fait un XP Game pour familiariser l’équipe au pratique de gestion de projet XP. Ensuite on commence le backlog. 
Et puis après, on met nos stories sur le storyboard: A faire / En cours / Terminé et c’est parti pour le développement. Chaque membre de l’équipe installe son Eclipse, on se télécharge un Fitnesse local ou GreenPepper, on écrit des tests, on code quelques tests unitaires, c’est une accumulation de barre verte, et là … On regarde le code pour essayer de l’intégrer et c’est le bordel, on arrive à la fin de l’itération de quinze jours et on ne peut pas livrer, … qu’est ce qui s’est passé ?
&lt;br/&gt;&lt;br/&gt;
Ce qui s’est passé c’est que l’on a négligé la &lt;strong&gt;phase d’exploration&lt;/strong&gt;. Cette phase est très importante car elle permet d’aligner l’équipe sur une conception de l’application et permet d’avoir une certaine cohérence du code au niveau de l’équipe et des outils déjà tout prêt.
&lt;br/&gt;&lt;br/&gt;
Un certain nombre d’actions sont nécessaires durant cette phase :
&lt;br/&gt;
• Mise en place des outils : Subversion / CVS, l’IDE, serveur de tests (Fitnesse serveur ou GreenPeper), plate-forme d’intégration continue
&lt;br/&gt;
• Définir le « Domain Model », c'est-à-dire définir les relations entre les différentes entités métiers
&lt;br/&gt;
• Réaliser une maquette de l’interface avec enchaînement des écrans
&lt;br/&gt;
• Réaliser un spike d’une application minimale similaire à la future application prennant en compte l’arborescence du code, les tests, la répartition en couches, la gestion des logs, la gestion de la configuration, les conventions de codage, l’utilisation des frameworks et les tests au niveau du serveur de tests
&lt;br/&gt;&lt;br/&gt;
Si vous négligez cette phase alors votre équipe ne sera pas alignée, ne produira pas du code de qualité et ne sera pas efficace. Imaginer une équipe qui veut utiliser Hibernate et Spring avec les annotations pour simplifier la configuration, combien de personnes de l’équipe savent les utiliser ? Quel est le niveau des différents membres de l’équipe ? Si vous avez un spike en place alors l’équipe se basera sur les exemples qui lui sont donnés. Pour le spike, il est conseillé de le réaliser à plusieurs et pas par une seule personne qui risque d’imposer une solution qui ne sera pas partagée par l’équipe.
&lt;br/&gt;&lt;br/&gt;
Si votre plate-forme d’intégration continue est déjà en place, vous pouvez être rassuré sur l’intégration du code en fin d’itération sinon bon courage …&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6492291451056498812?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6492291451056498812/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6492291451056498812' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6492291451056498812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6492291451056498812'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/02/extreme-programming-et-phase.html' title='eXtreme Programming et phase d’exploration'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_I6qpNMiW2Ys/R6gg3tugOeI/AAAAAAAAARE/qiDZvZOngrc/s72-c/lifecycleXPProjectBeck.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-3659982112248478286</id><published>2008-01-04T05:40:00.001-08:00</published><updated>2008-01-04T05:40:06.929-08:00</updated><title type='text'>ZenMacitude</title><content type='html'>&lt;p&gt;Le monde Mac est bien différent du monde PC, c&amp;rsquo;est du luxe, du design, c&amp;rsquo;est zen&amp;hellip; Mais attention, il faut tout réapprendre.&lt;/p&gt;
&lt;h3&gt; Première rencontre&lt;/h3&gt;
&lt;h4&gt; La machine&lt;/h4&gt;
&lt;p&gt;Une fois mon mac book pro sortit de son carton, la premier constat est sa sobriété, un peu le style d&amp;rsquo;une Maserati ou une Aston martin, un gris métalisé, une faible épaisseur, des enceintes de chaque côté du clavier, un bouton power luisant et la petite pomme sur le dessus. Ce que j&amp;rsquo;aime c&amp;rsquo;est l&amp;rsquo;alimentation qui se branche par aimantation, c&amp;rsquo;est le clavier qui s&amp;rsquo;illumine quand la luminosité est trop faible et la petite télécommande faisant penser à un ipod, idéal pour les prez.&lt;/p&gt;
&lt;h4&gt; L&amp;rsquo;installation de Leopard&lt;/h4&gt;
&lt;p&gt;Rien de bien difficile, tout se fait tout seul&amp;hellip; 
Pour éteindre l&amp;rsquo;ordi ou redémarrer, bouton power, logique non ?&lt;/p&gt;
&lt;h4&gt; Le clavier&lt;/h4&gt;
&lt;p&gt;Là ça se corse surtout si vous avez fait le choix comme moi d&amp;rsquo;un clavier Azerty, &amp;hellip;, un peu perdu, elles sont où les touches [,],|,&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Voici un petit guide des caractères spéciaux sous Mac qui ne sont pas visibles sur le clavier:&lt;/li&gt;
&lt;li&gt; Shift+Espace: Supprimer vers la droite&lt;/li&gt;
&lt;li&gt; Pom+Flèche gauche: Début de ligne&lt;/li&gt;
&lt;li&gt; Pom+Flèche droite: Fin de ligne&lt;/li&gt;
&lt;li&gt; Pom+Flèche bas: Fin de page&lt;/li&gt;
&lt;li&gt; Pom+Flèche haut: Début de page&lt;/li&gt;
&lt;li&gt; Alt+N: ~ la tilde&lt;/li&gt;
&lt;li&gt; Alt+(: { l&amp;rsquo;accolade&lt;/li&gt;
&lt;li&gt; Alt+shift+(: [ le crochet&lt;/li&gt;
&lt;li&gt; Alt+shift+/: l&amp;rsquo;antislash \ &lt;/li&gt;
&lt;li&gt; Alt+shift+L: la barre |&lt;/li&gt;
&lt;li&gt; Ne cherchez pas les touches Home et Suppr, y&amp;rsquo;a pas !&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Les applications&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt; En bas, par défaut vous avez le dock, un beau petit menu applicatif qui permet de lancer rapidement des applications&lt;/li&gt;
&lt;li&gt; Ce qui peut choquer la première fois que vous lancer une application est: &amp;ldquo;Mais où est le menu de l&amp;rsquo;application ?&amp;rdquo;. Hé bien, pas dans la fenêtre mais au dessus de la fenêtre.&lt;/li&gt;
&lt;li&gt; Application intéressante c&amp;rsquo;est Spotlight qui est un moteur d&amp;rsquo;indexation de tout se qu&amp;rsquo;on fait, a fait, &amp;hellip;, il recense les applications, les liens html, les fichiers, &amp;hellip;, bref tout, un pur bonheur ! Et cerise sur le gâteau vous avez un raccourci clavier Ctrl+Espace&lt;/li&gt;
&lt;li&gt; Y&amp;rsquo;a les widgets du Dashboard, juste histoire d&amp;rsquo;avoir la calculatrice, des photos, l&amp;rsquo;heure et quelques post-it, on peut l&amp;rsquo;activer avec la touche F12&lt;/li&gt;
&lt;li&gt; Time Machine, pas encore testé, je suis pas trop pour, ça consomme de la place&lt;/li&gt;
&lt;li&gt; Plein d&amp;rsquo;autres, mais je vais me focaliser sur les outils professionnels&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Raccourcis usuels&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt; Pom+N: Nouveau&lt;/li&gt;
&lt;li&gt; Pom+O: Ouvrir&lt;/li&gt;
&lt;li&gt; Pom+C: Copier&lt;/li&gt;
&lt;li&gt; Pom+V: Coller&lt;/li&gt;
&lt;li&gt; Pom+Z: Annuler&lt;/li&gt;
&lt;li&gt; Pom+W: Fermer la fenêtre&lt;/li&gt;
&lt;li&gt; Pom+Q: Quitter l&amp;rsquo;application&lt;/li&gt;
&lt;li&gt; Pom+M: Réduire l&amp;rsquo;application dans le dock&lt;/li&gt;
&lt;li&gt; F11: Affichage du bureau&lt;/li&gt;
&lt;li&gt; F12: Dashboard&lt;/li&gt;
&lt;li&gt; Pom+Suppr: Suppression d&amp;rsquo;un élément, fichier, mail, &amp;hellip;&lt;/li&gt;
&lt;li&gt; Ctrl++: Affichage de Spotlight&lt;/li&gt;
&lt;li&gt; A compléter&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Safari&lt;/h4&gt;
&lt;p&gt;Ce qui est sympa dans Safari, c&amp;rsquo;est qu&amp;rsquo;il prend la taille de la page en taille maximale, y&amp;rsquo;en a qui n&amp;rsquo;aime pas, moi j&amp;rsquo;aime bien. il permet d&amp;rsquo;illuminer les liens permettant une tabulation entre les liens. Les accesskey sont Ctrl+accesskey, c&amp;rsquo;est plus rapide qu&amp;rsquo;un Ctrl+Shift+key sous Moz ou Ctrl+Shift+key+Entrée sur IE. Sinon vous avez un correcteur orthographique intégré aux textarea.&lt;/p&gt;
&lt;p&gt;Encore des raccourcis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Espace: défilement de page vers le bas&lt;/li&gt;
&lt;li&gt; Shift+Espace:  défilement de page vers le haut&lt;/li&gt;
&lt;li&gt; Pom+T: Nouvel Onglet&lt;/li&gt;
&lt;li&gt; Pom+Click: Ouverture du lien dans un nouvel onglet&lt;/li&gt;
&lt;li&gt; Pom+Opt+F: Pour faire une recherche google&lt;/li&gt;
&lt;li&gt; Pom+L: Aller dans la barre de navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Mail&lt;/h4&gt;
&lt;p&gt;Pratique, simple, gestion des filtres, gestion des tâches, des notes, des events&lt;/p&gt;
&lt;p&gt;Encore des raccourcis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Shift+Pom+N: Relever&lt;/li&gt;
&lt;li&gt; Pom+N: New Mail&lt;/li&gt;
&lt;li&gt; Pom+R: Répondre&lt;/li&gt;
&lt;li&gt; Shift+Pom+R: Répondre à tous&lt;/li&gt;
&lt;li&gt; Shift+Pom+F: Réexpédier&lt;/li&gt;
&lt;li&gt; Shift+Pom+D: Envoyer&lt;/li&gt;
&lt;li&gt; Pom+Del: Supprimer&lt;/li&gt;
&lt;li&gt; Shift+Pom+Y: Ajouter l&amp;rsquo;expéditeur dans le carnet d&amp;rsquo;adresses&lt;/li&gt;
&lt;li&gt; Opt+Pom+A: Carnet d&amp;rsquo;adresses &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Lire des fichiers CHM&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt; J&amp;rsquo;utilise &lt;a href='http://chmox.sourceforge.net/'&gt;Chmox&lt;/a&gt;, peut être utile pour lire des ebooks&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; MSN sous Mac&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt; Il est possible d&amp;rsquo;avoir MSN sous Mac, il semble être possible de chater en MSN avec IChat via Jabber, à essayer&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Rotation d&amp;rsquo;image&lt;/h4&gt;
&lt;p&gt;Un petit point sur comment faire de la rotation d&amp;rsquo;images d&amp;rsquo;une image prise par un appareil photo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; les images sont automatiquement retournées par une application qui supporte les images au format EXIF: &lt;a href='http://docs.info.apple.com/article.html?artnum=302669-fr'&gt;http://docs.info.apple.com/article.html?artnum=302669-fr&lt;/a&gt; et donc pour que l&amp;rsquo;image soit visible dans le bon sens pour toutes les applications, il faut utiliser une application qui ne supporte pas le format EXIF. Pour faire une rotation d&amp;rsquo;une image prise par un appareil photo, j&amp;rsquo;ai utilisé le freeware &lt;a href='http://xtralean.com/IWDownload.html'&gt;ImageWell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; Locker le desktop&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt; Locker le desktop avec &lt;a href='http://chriscook.info/?p=8%2523more-8'&gt;LockDesktop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Ressources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://www.debutersurmac.com'&gt;http://www.debutersurmac.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://docs.info.apple.com/article.html?artnum=302669-fr'&gt;http://docs.info.apple.com/article.html?artnum=302669-fr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.ville-frejus.fr/hermes/fichiers/raccourcis_mac.htm'&gt;http://www.ville-frejus.fr/hermes/fichiers/raccourcis_mac.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.microsoft.com/france/mac/msn/default.mspx'&gt;http://www.microsoft.com/france/mac/msn/default.mspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.microsoft.com/downloads/details.aspx?FamilyId=2FCB0152-CAEA-49A5-8BDC-DB3D9FD2F006&amp;displaylang=fr'&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=2FCB0152-CAEA-49A5-8BDC-DB3D9FD2F006&amp;#x26;displaylang=fr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-3659982112248478286?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/3659982112248478286/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=3659982112248478286' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3659982112248478286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/3659982112248478286'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2008/01/zenmacitude_04.html' title='ZenMacitude'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-1460884450579968479</id><published>2007-12-20T11:26:00.001-08:00</published><updated>2007-12-20T11:26:12.676-08:00</updated><title type='text'>RencontresAgiles2007</title><content type='html'>&lt;p&gt;Mardi 18 décembre se tenait l&amp;rsquo;événement &lt;a href='http://www.rencontresagiles2007.com/'&gt;Rencontres agiles 2007&lt;/a&gt; à la défense organisé par &lt;a href='http://blog.dgirard.eu/'&gt;Didier Girard&lt;/a&gt; et &lt;a href='http://www.notarianni.org/'&gt;Bernard Notarianni&lt;/a&gt;. Merci aux organisateurs et aux intervenants.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;objectif était de présenter les méthodes agiles sous différents aspects par des sessions de 20 minutes.&lt;/p&gt;
&lt;h3&gt;Introduction à l&amp;rsquo;Agilité&lt;/h3&gt;
&lt;p&gt;Didier Girard et Bernard Notarianni nous ont introduit l&amp;rsquo;agilité, histoire de se mettre en douceur dans le rythme de la conférence, surtout qu&amp;rsquo;il était relativement tôt dans la matinée&lt;/p&gt;
&lt;h3&gt; Agilité, à monter soi même&lt;/h3&gt;
&lt;p&gt;&lt;a href='http://www.bossavit.com/'&gt;Laurent Bossavit&lt;/a&gt; nous a montré comment monter soi-même son agilité en partant d&amp;rsquo;une situation actuelle et en réfléchissant en équipe. L&amp;rsquo;avantage de cette solution est qu&amp;rsquo;il y a une prise de conscience collective des problèmes qui s&amp;rsquo;accompagne de changements profonds des individus et du travail en équipe. J&amp;rsquo;aime beaucoup cette approche car on ne peut pas changer une personne, c&amp;rsquo;est la personne qui prend conscience elle même du besoin de changer et qui fait le choix de changer. Le &amp;ldquo;coach agile&amp;rdquo; est alors un guide plus qu&amp;rsquo;une personne essayant d&amp;rsquo;imposer une méthodologie qui même si elle a fait ses preuves dans certains cas, n&amp;rsquo;est pas adaptée à tous les cas. L&amp;rsquo;homme a souvent ce réflexe de changer brutalement d&amp;rsquo;un extrême à l&amp;rsquo;autre alors que tout ce qu&amp;rsquo;il faisait avant n&amp;rsquo;était pas mauvais. Laurent encourage la réflexion d&amp;rsquo;équipe et l&amp;rsquo;apprentissage par elle même propre aux organisations apprenantes et à la &lt;a href='http://fr.wikipedia.org/wiki/Syst%25C3%25A9mique'&gt;systémique&lt;/a&gt;. Il est important pour lui de changer un point fondamental plutôt que l&amp;rsquo;ensemble pour augmenter l&amp;rsquo;efficacité de l&amp;rsquo;équipe.&lt;/p&gt;
&lt;h3&gt; L&amp;rsquo;Agile : la nouvelle star des méthodes de développement&lt;/h3&gt;
&lt;p&gt;Eric Hennetier, DSI Adjoint de M6, nous a présenté son retour d&amp;rsquo;expériences sur plusieurs projets agiles réalisés sur M6. Avec &lt;a href='http://www.octo.com/'&gt;Octo Technology&lt;/a&gt; et &lt;a href='http://www.sfeir.com'&gt;Sfeir&lt;/a&gt;, ils ont pu mettre en production un projet en 2 mois dans un contexte difficile car très changeant fonctionnellement. L&amp;rsquo;agilité se prête bien pour des faibles délais, des petites équipes et un périmêtre changeant. Il nous montre les bienfaits sur le moral de l&amp;rsquo;équipe des projets agiles, avec des chefs de projets qui sont fiers du produit et heureux de venir travailler. La motivation n&amp;rsquo;est elle pas l&amp;rsquo;élément essentiel de réussite d&amp;rsquo;un projet ? Dans un cadre où l&amp;rsquo;initiative est acceptée ou chacun est libre de communiquer, n&amp;rsquo;est ce pas là que l&amp;rsquo;équipe donne le meilleur d&amp;rsquo;elle même ? Il est intéressant de noter que le cadre contractuel change par rapport à un projet au forfait classique, le client peut choisir d&amp;rsquo;interrompre le travail avec le prestataire après chaque itération (de 15 jours), pas conditions sur le périmêtre fonctionnel car il n&amp;rsquo;est pas défini à l&amp;rsquo;avance. Le contrat part sur une relation de confiance. Certaines interrogations restent néanmoins, c&amp;rsquo;est comment fait on de l&amp;rsquo;agile en phase de maintenance ? De même, on parle beaucoup d&amp;rsquo;agilité pour le développement logiciel, qu&amp;rsquo;en est il de l&amp;rsquo;intégration ou de l&amp;rsquo;urbanisation de type SOA ?&lt;/p&gt;
&lt;h3&gt;ADDM : Des équipes agiles distribuées&lt;/h3&gt;
&lt;p&gt;Guillaume Bodet, directeur technique chez &lt;a href='http://www.xebia.fr/'&gt;Xebia&lt;/a&gt; nous a présenté le fonctionnement agile en mode distribué chez Xebia qui est présent dans trois pays: France, Pays Bas et Inde. Pour réussir un projet, il faut mettre tout le monde dans la même direction en partageant la même vision d&amp;rsquo;entreprise même si les cultures, l&amp;rsquo;environnement sont différents. Cela passe par un recrutement sélectif, des séances de formations. Ils ont utilisés des systèmes collaboratifs, wiki, vidéo conférence, web cam, tableau életronique et adaptés les horaires de travail en fonction du décalage horaire. De plus, ils commencent toujours les 2 premières itérations avec des personnes distantes qui viennent sur place. Les équipes sont en général en mode 50-50: européen / indien pour permettre un meilleur équilibre, un intervenant indien bilingue en Inde pour éviter une perte d&amp;rsquo;information due à la traduction. Tout ça pour dire que ça marche en s&amp;rsquo;adaptant un peu et que ce n&amp;rsquo;est pas facile, ça leur a couté un projet mais bon 5 réussites ensuite, l&amp;rsquo;investissement vaut le coup car l&amp;rsquo;Inde possède de très bons experts techniques contrairement à la France qui souffre de plus en plus car le développeur n&amp;rsquo;est pas considéré en France.&lt;/p&gt;
&lt;h3&gt; Les challenges de la conception incrémentale&lt;/h3&gt;
&lt;p&gt;&lt;a href='http://www.regismedina.com/'&gt;Regis Medina&lt;/a&gt; nous a présenté &amp;ldquo;Les challenges de la conception incrémentale&amp;rdquo; en nous mettant en garde contre la conception émergeante une des valeurs fortes d&amp;rsquo;XP. En effet, selon lui il est de plus en plus nécessaire d&amp;rsquo;avoir des bases de conception pour permettre d&amp;rsquo;avoir un code évolutif sur plusieurs années. Avec du 100% TDD avec +90% de couverture de code par les tests, on pourrait se dire que l&amp;rsquo;application va bien évoluer, hors ce n&amp;rsquo;est pas si sûr car par manque de temps, par flème, on a oublié de faire du refactoring de code et donc du redesign d&amp;rsquo;application. De plus, les tests aussi de leur côté doivent être refactorisés pour rester maintenable. A partir du postulat que moins de lignes de code, moins de bugs, il est clair qu&amp;rsquo;un ajout de fonctionnalité ne doit pas entrainer trop de croissance du code, Régis Medina parle alors de &amp;ldquo;Compression&amp;rdquo;. Une bonne gestion des dépendances entre les composants des applications permet d&amp;rsquo;avoir un code plus évolutif (Separation Of Concern, Dependencies Injection)&lt;/p&gt;
&lt;h3&gt;Retours d&amp;rsquo;expérience sur l&amp;rsquo;introduction de Scrum&lt;/h3&gt;
&lt;p&gt;&lt;a href='http://www.aubryconseil.com/'&gt;Claude Aubry&lt;/a&gt; nous a présenté son retour d&amp;rsquo;expérience sur l&amp;rsquo;introduction de Scrum, il préconise d&amp;rsquo;appliquer la méthode totalement et d&amp;rsquo;utiliser les termes Scrum,éviter les termes MOA, MOE. Ses interventions ont eu lieu pour des grands comptes sur des projets pilotes. Scrum s&amp;rsquo;adapte à tous types de projets de développement voir d&amp;rsquo;intégration. c.f &lt;a href='http://jfhelie.blogspot.com/2007/07/methodesagiles_6858.html'&gt;Introduction sur Scrum&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Retour d’Expérience Vidal&lt;/h3&gt;
&lt;p&gt;Christophe Addinquy nous a présenté son retour d&amp;rsquo;expérience agile sur les projets Vidal, c&amp;rsquo;est sans doute la présentation qui m&amp;rsquo;a le plus ébloui, à tel point que je ne m&amp;rsquo;en souviens pas bien ;) Pour Christophe, l&amp;rsquo;agilité apporte surtout sur le plan humain, elle favorise l&amp;rsquo;esprit d&amp;rsquo;intiative, la stimulation d&amp;rsquo;équipe et le développement de valeurs humaines fortes qui permettent à l&amp;rsquo;individu de mieux vivre son projet et probablement sa vie. J&amp;rsquo;avais l&amp;rsquo;impression de voir en grandeur nature l&amp;rsquo;application des &lt;a href='http://jfhelie.blogspot.com/2007/08/methodesagiles7habits.html'&gt;7 habitudes des gens efficaces&lt;/a&gt;, faut croire que bien que j&amp;rsquo;ai peu d&amp;rsquo;expérience en méthodes agiles, j&amp;rsquo;avais vu juste sur l&amp;rsquo;effet des méthodes agiles sur les individus et l&amp;rsquo;équipe. Attention toutefois, il faut éviter de rentrer dans un mode autoritaire d&amp;rsquo;application des méthodes agiles, il faut permettre aux autres de prendre conscience de l&amp;rsquo;apport des méthodes agiles. N&amp;rsquo;oublions pas que l&amp;rsquo;homme se différencie de l&amp;rsquo;animal car il possède une conscience et est donc capable de choisir comment il va réagir à un stimulus. Cela signifie entre autre, qu&amp;rsquo;il est capable d&amp;rsquo;aller plus loin que son modèle éducatif et donc capable de se changer lui-même. Le changement est donc au niveau de l&amp;rsquo;individu car il l&amp;rsquo;accepte et non parce qu&amp;rsquo;on lui impose.&lt;/p&gt;
&lt;h3&gt;Scrum in the trenches &lt;/h3&gt;
&lt;p&gt;La présentation d&amp;rsquo;&lt;a href='http://www.pyxis-tech.com/'&gt;Eric Mignot&lt;/a&gt; s&amp;rsquo;est faite à la façon d&amp;rsquo;un dojo où la salle présente quels sujets elle veut qu&amp;rsquo;on aborde ensemble. On a parlé de la mise en production, à priori ils ont mis une journée pour la recette, car ils livraient régulièrement au client un produit fini que le client recettait sur une plateforme de recette. Il conseillait de prendre une itération pour mettre en production une version intermédiaire toutes les 4 itérations. Je suppose que Pyxis utilisait un intégrateur continue qui déposait en live le produit sur la plate-forme de recette. Une question que je me pose, est il possible d&amp;rsquo;utiliser l&amp;rsquo;intégrateur continue pour déployer en production ? Et puis, vu que les tests de recette sont faits par le client tous les 15 jours, les bugs sont corrigés en ajoutant des tests unitaires (principes TDD), est il envisageable de supprimer les tests automatiques end-user (de bout en bout) qui sont très couteux ?&lt;/p&gt;
&lt;h3&gt; Et les autres&lt;/h3&gt;
&lt;p&gt;je n&amp;rsquo;y ai pas assisté&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-1460884450579968479?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/1460884450579968479/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=1460884450579968479' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1460884450579968479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/1460884450579968479'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2007/12/rencontresagiles2007_20.html' title='RencontresAgiles2007'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-7459028192556788717</id><published>2007-12-06T05:52:00.001-08:00</published><updated>2007-12-06T05:52:31.804-08:00</updated><title type='text'>Axis2ValidationShema</title><content type='html'>&lt;p&gt;Axis2 utilise AXIOM comme modele Object pour XML. De manière native, AXIOM ne permet pas de valider le XML par rapport à un schéma, par contre il est possible de valider le XML grâce au package &lt;strong&gt;javax.xml.validation&lt;/strong&gt; fournit par le JDK 5. Il est nécessaire d&amp;rsquo;être en version &lt;strong&gt;1.2+&lt;/strong&gt; d&amp;rsquo;AXIOM.
Cet article reprend le tutorial publié sur &lt;a href='http://wso2.org/library/2905'&gt;wso2.org&lt;/a&gt;, la solution qu&amp;rsquo;il propose permet d&amp;rsquo;éviter de consommer trop de mémoire lors de la validation.&lt;/p&gt;
&lt;h2&gt; Validation du XML à partir d&amp;rsquo;un schéma avec AXIOM&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Prenons par exemple le fichier XML suivant:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;ns1:UserInfo xmlns:ns1=&amp;ldquo;http://jfhelie/axiomtest&amp;rdquo;&amp;gt;
	&amp;lt;ns1:User&amp;gt;
		&amp;lt;ns1:Name&amp;gt;Rod Johnson&amp;lt;/ns1:Name&amp;gt;
		&amp;lt;ns1:Address type=&amp;ldquo;Home&amp;rdquo;&amp;gt;
			&amp;lt;ns1:City&amp;gt;New York&amp;lt;/ns1:City&amp;gt;
			&amp;lt;ns1:Country&amp;gt;USA&amp;lt;/ns1:Country&amp;gt;
		&amp;lt;/ns1:Address&amp;gt;
	&amp;lt;/ns1:User&amp;gt;
	&amp;lt;ns1:User&amp;gt;
		&amp;lt;ns1:Name&amp;gt;Matt Raible&amp;lt;/ns1:Name&amp;gt;
		&amp;lt;ns1:Address type=&amp;ldquo;Home&amp;rdquo;&amp;gt;
			&amp;lt;ns1:City&amp;gt;Denver&amp;lt;/ns1:City&amp;gt;
			&amp;lt;ns1:Country&amp;gt;USA&amp;lt;/ns1:Country&amp;gt;
		&amp;lt;/ns1:Address&amp;gt;
	&amp;lt;/ns1:User&amp;gt;	
&amp;lt;/ns1:UserInfo&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Avec le schéma suivant:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;lt;?xml version=&amp;ldquo;1.0&amp;rdquo;?&amp;gt;
&amp;lt;xs:schema xmlns:xs=&amp;ldquo;http://www.w3.org/2001/XMLSchema&amp;rdquo;
	targetNamespace=&amp;ldquo;http://jfhelie/axiomtest&amp;rdquo;
	xmlns=&amp;ldquo;http://jfhelie/axiomtest&amp;rdquo; elementFormDefault=&amp;ldquo;qualified&amp;rdquo;&amp;gt;
	&amp;lt;xs:element name=&amp;ldquo;UserInfo&amp;rdquo;&amp;gt;
		&amp;lt;xs:complexType&amp;gt;
			&amp;lt;xs:sequence&amp;gt;
				&amp;lt;xs:element name=&amp;ldquo;User&amp;rdquo; maxOccurs=&amp;ldquo;unbounded&amp;rdquo;&amp;gt;
					&amp;lt;xs:complexType&amp;gt;
						&amp;lt;xs:sequence&amp;gt;
							&amp;lt;xs:element name=&amp;ldquo;Name&amp;rdquo; type=&amp;ldquo;xs:string&amp;rdquo; /&amp;gt;
							&amp;lt;xs:element name=&amp;ldquo;Address&amp;rdquo;&amp;gt;
								&amp;lt;xs:complexType&amp;gt;
									&amp;lt;xs:sequence&amp;gt;
										&amp;lt;xs:element name=&amp;ldquo;City&amp;rdquo; type=&amp;ldquo;xs:string&amp;rdquo;/&amp;gt;
										&amp;lt;xs:element name=&amp;ldquo;Country&amp;rdquo; type=&amp;ldquo;xs:string&amp;rdquo;/&amp;gt;
									&amp;lt;/xs:sequence&amp;gt;
									&amp;lt;xs:attribute name=&amp;ldquo;type&amp;rdquo; use=&amp;ldquo;required&amp;rdquo;&amp;gt;
									&amp;lt;xs:simpleType&amp;gt;
										&amp;lt;xs:restriction base=&amp;ldquo;xs:string&amp;rdquo;&amp;gt;
											&amp;lt;xs:pattern value=&amp;ldquo;Home|Work&amp;rdquo; /&amp;gt;
										&amp;lt;/xs:restriction&amp;gt;
									&amp;lt;/xs:simpleType&amp;gt;
									&amp;lt;/xs:attribute&amp;gt;
								&amp;lt;/xs:complexType&amp;gt;					
							&amp;lt;/xs:element&amp;gt;
						&amp;lt;/xs:sequence&amp;gt;
					&amp;lt;/xs:complexType&amp;gt;
				&amp;lt;/xs:element&amp;gt;
			&amp;lt;/xs:sequence&amp;gt;
		&amp;lt;/xs:complexType&amp;gt;
	&amp;lt;/xs:element&amp;gt;	
&amp;lt;/xs:schema&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; La méthode &lt;strong&gt;validate&lt;/strong&gt; suivante permet de valider un object AXIOM (OMElement) par rapport à un schéma:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;public void validate(OMElement omElement, File schemaFile) throws Exception {
	Element sourceElement; // if the OMElement is created using DOM
	// implementation use it
	if (omElement instanceof ElementImpl) {
		// si omElement est en créé en DOM
		sourceElement = (Element) omElement;
	} else {
		// sinon on le convertit en DOM
		sourceElement = getDOMElement(omElement);
	} 
	// On crée une fabrique de schéma
	SchemaFactory factory = SchemaFactory
			.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
	// on charge le schéma
	Source source = new StreamSource(schemaFile);
	Schema schema = factory.newSchema(source);
	// on crée un validator
	Validator validator = schema.newValidator();
	// on valide l&amp;rsquo;arbre DOM par rapport au schéma
	validator.validate(new DOMSource(sourceElement));
}
private Element getDOMElement(OMElement element) throws Exception {
	ByteArrayOutputStream baos = new ByteArrayOutputStream();
	element.serialize(baos);
	ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	factory.setNamespaceAware(true);
	return factory.newDocumentBuilder().parse(bais).getDocumentElement();
}
public OMElement getAXIOM(String file) throws Exception {
	StAXOMBuilder builder = new StAXOMBuilder(getClass()
			.getResourceAsStream(file));
	return builder.getDocumentElement();
}&lt;/pre&gt;
&lt;h2&gt; Ressources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='https://88.178.232.8/site/axis2schemavalidation.zip'&gt;axis2schemavalidation.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://www.w3schools.com/schema/schema_intro.asp'&gt;http://www.w3schools.com/schema/schema_intro.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href='http://wso2.org/library/2905'&gt;http://wso2.org/library/2905&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-7459028192556788717?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/7459028192556788717/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=7459028192556788717' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7459028192556788717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/7459028192556788717'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2007/12/axis2validationshema.html' title='Axis2ValidationShema'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-2528853741662401160</id><published>2007-12-05T05:57:00.001-08:00</published><updated>2007-12-05T05:57:37.135-08:00</updated><title type='text'>OpenSSL</title><content type='html'>&lt;p&gt;Cet article a pour objectif de montrer comment utiliser openssl pour créer des clés et des certificats.&lt;/p&gt;
&lt;h2&gt; Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Sur Windows:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt; Télécharger &lt;a href='http://www.slproweb.com/download/Win32OpenSSL_Light-0_9_8g.exe'&gt;Win 32 Open SSL&lt;/a&gt; et l&amp;rsquo;installer&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt; Sur Ubuntu:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt; Lancer la commande &lt;strong&gt;sudo apt-get install openssl&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt; Génération de clés asymétriques&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Générer une clé privée &lt;a href='http://en.wikipedia.org/wiki/RSA'&gt;RSA&lt;/a&gt; en 1024 bits:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;openssl genrsa -out server.key 1024&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Générer une clé publique à partir de la clé privée:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;openssl rsa -in server.key -pubout&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Générer un certificat Certificate Signing Request qui correspond à une requête de certification par une autorité, la clé privée n&amp;rsquo;est pas incluse dans le certificat mais est utilisée pour signer la requête:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;openssl req -new -key server.key -out server.csr&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Signer son propre certificat (les fichiers portent soit l&amp;rsquo;extension pem ou crt):&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt; Afficher le contenu du certificat:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;openssl x509 -text -in server.crt&lt;/pre&gt;
&lt;h2&gt; Extensions des certificats&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(extrait wikipedia)&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; .CER - CER certificat encodé&lt;/li&gt;
&lt;li&gt; .DER - DER certificat encodé&lt;/li&gt;
&lt;li&gt; .PEM - (Privacy Enhanced Mail)  certificat DER encodé en Base64, contenu dans &amp;ldquo;-BEGIN CERTIFICATE-&amp;rdquo; and &amp;ldquo;-END CERTIFICATE-&amp;rdquo;&lt;/li&gt;
&lt;li&gt; .P7B - Voir .p7c&lt;/li&gt;
&lt;li&gt; .P7C - PKCS#7 structure signée sans données&lt;/li&gt;
&lt;li&gt; .PFX - Voir .p12&lt;/li&gt;
&lt;li&gt; .P12 - PKCS#12, contient les clés publiques et privées protégées par un mot de passe (symétrique)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PKCS #12 est utilisé pour exchanger dans un seul fichier des clés publiques et privées.&lt;/p&gt;
&lt;p&gt;Un fichier .PEM peut contenir des certificats ou des clés privées, encapsulé entre les lignes BEGIN/END appropriées (CERTIFICATE ou RSA PRIVATE KEY)&lt;/p&gt;
&lt;h2&gt; Ressources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://www.slproweb.com/products/Win32OpenSSL.html'&gt;http://www.slproweb.com/products/Win32OpenSSL.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-2528853741662401160?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/2528853741662401160/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=2528853741662401160' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2528853741662401160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/2528853741662401160'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2007/12/openssl_9467.html' title='OpenSSL'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4024540416729506999.post-6533362306193232654</id><published>2007-11-29T07:06:00.001-08:00</published><updated>2007-11-29T07:06:04.886-08:00</updated><title type='text'>ActiveMQ</title><content type='html'>&lt;p&gt;&lt;a href='http://activemq.apache.org'&gt;ActiveMQ&lt;/a&gt; est un &lt;a href='http://en.wikipedia.org/wiki/Message_broker'&gt;broker de messages&lt;/a&gt; open source qui peut se présenter comme une bonne solution alternative à &lt;a href='http://www-306.ibm.com/software/integration/wmq'&gt;WebSphere MQ&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; Télécharger la dernière version &lt;a href='http://activemq.apache.org/download.html'&gt;http://activemq.apache.org/download.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; Diziper dans le répertoire de votre choix &lt;strong&gt;%ACTIVEMQ_HOME%&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; Démarrer le script &lt;strong&gt;%ACTIVEMQ_HOME%/bin/activemq.bat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; Vérifier l&amp;rsquo;ouverture du port d&amp;rsquo;écoute:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;netstat -an|find &amp;ldquo;61616&amp;rdquo; (sous Windows)&lt;/pre&gt;
&lt;h2&gt; Création d&amp;rsquo;un consommateur de messages&lt;/h2&gt;
&lt;p&gt;Deux types de consommation de messages sont possibles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; le mode &lt;a href='http://en.wikipedia.org/wiki/Publish/subscribe'&gt;publication / abonnement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; le mode &lt;a href='http://en.wikipedia.org/wiki/Message_queue'&gt;queue de messages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; Dans cet exemple, je présente le mode publication / abonnement, le consommateur ne recoit qu&amp;rsquo;un message et se ferme:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;package com.jfhelie.activemq;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class SimpleConsumer implements MessageListener, ExceptionListener {
	private String user = ActiveMQConnection.DEFAULT_USER;
	private String password = ActiveMQConnection.DEFAULT_PASSWORD;
	private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
	private String subject = &amp;ldquo;TOOL.DEFAULT&amp;rdquo;;
	private boolean transacted = false;
	private Connection connection;
	private Session session;
	private MessageConsumer consumer;
	public static void main(String[] args) throws Exception {
		SimpleConsumer simpleConsumer = new SimpleConsumer();
		simpleConsumer.run();
	}
	public void run() throws Exception {
		// Create the connection
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
				user, password, url);
		connection = connectionFactory.createConnection();
		connection.setExceptionListener(this);
		connection.start();
		// Create the session
		session = connection
				.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
		Destination destination = session.createTopic(subject);
		// Create the consumer
		consumer = session.createConsumer(destination);
		consumer.setMessageListener(this);
		System.out.println(&amp;ldquo;Consommateur de messages démarré&amp;rdquo;);
	}
	public void onMessage(Message message) {
		if (message instanceof TextMessage) {
			TextMessage txtMsg = (TextMessage) message;
			try {
				System.out.println(txtMsg.getText());
				consumer.close();
				session.close();
				connection.close();
			} catch (JMSException e) {
				e.printStackTrace();
			}
		}
	}
	public void onException(JMSException exception) {
		System.out.println(exception.getMessage());
	}
}&lt;/pre&gt;
&lt;h2&gt; Création d&amp;rsquo;un producteur de messages&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; voici un exemple de producteur simple:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;package com.jfhelie.activemq;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class SimpleProducer {
	private String user = ActiveMQConnection.DEFAULT_USER;
	private String password = ActiveMQConnection.DEFAULT_PASSWORD;
	private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
	private String subject = &amp;ldquo;TOOL.DEFAULT&amp;rdquo;;
	private boolean transacted = false;
	private Destination destination;
	public static void main(String[] args) throws Exception {
		SimpleProducer producer = new SimpleProducer();
		producer.run();
	}
	public void run() throws Exception {
		// Create the connection
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);			
		Connection connection = connectionFactory.createConnection();
		connection.start();
		// Create the session
		Session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
		destination = session.createTopic(subject);
		// Create the producer
		MessageProducer producer = session.createProducer(destination);
		producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
		// Create the message
		TextMessage message = session.createTextMessage(&amp;ldquo;Hello world&amp;rdquo;);
		// Send the message
		producer.send(message);
		System.out.println(&amp;ldquo;Message envoyé par le producteur&amp;rdquo;);
		producer.close();
		session.close();
		connection.close();
	}
}&lt;/pre&gt;
&lt;h2&gt; Ressources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href='http://activemq.apache.org'&gt;http://activemq.apache.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4024540416729506999-6533362306193232654?l=jfhelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jfhelie.blogspot.com/feeds/6533362306193232654/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4024540416729506999&amp;postID=6533362306193232654' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6533362306193232654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4024540416729506999/posts/default/6533362306193232654'/><link rel='alternate' type='text/html' href='http://jfhelie.blogspot.com/2007/11/activemq.html' title='ActiveMQ'/><author><name>Jeff Helie</name><uri>http://www.blogger.com/profile/09210070237980962994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
