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

<channel>
	<title>Quand N@t communique... &#187; java</title>
	<atom:link href="http://www.richand.info/blog/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richand.info/blog</link>
	<description>Développement personnel, personal MBA et tout ce qui touche à la vie d'un consultant logiciel.</description>
	<lastBuildDate>Sat, 29 Oct 2011 11:07:07 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>How to be an expert &#8211; Préparation de mon régime protéiné.</title>
		<link>http://www.richand.info/blog/2009/04/how-to-be-an-expert-preparation-de-mon-regime-proteine/</link>
		<comments>http://www.richand.info/blog/2009/04/how-to-be-an-expert-preparation-de-mon-regime-proteine/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 08:09:57 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Veille techno]]></category>
		<category><![CDATA[expert]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=22</guid>
		<description><![CDATA[Cette semaine j&#8217;ai été pas mal inspiré par la lecture de cette article (how to become an expert). Ce que l&#8217;on peut retenir de cet article, c&#8217;est que tout le monde peut devenir un expert. Pour cela il faut : de la détermination, de la rigueur et du travail. A force de travail tous le [...]]]></description>
			<content:encoded><![CDATA[<p>Cette semaine j&#8217;ai été pas mal inspiré par la lecture de cette article (<a href="http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/"title="How to become an expert"  target="_blank" onclick="javascript:pageTracker._trackPageview('/outbound/article/softwarecreation.org');">how to become an expert</a>). Ce que l&#8217;on peut retenir de cet article, c&#8217;est que <strong>tout le monde peut devenir un expert</strong>. Pour cela il faut : de la <strong>détermination, de la rigueur et du travail</strong>. A force de travail tous le monde peut devenir expert au bout de quelques années (contrairement à devenir un champion ce qui requiert en plus des aptitudes particulières).</p>
<p>De plus, l&#8217;article propose une méthode pour aller vers cet objectif. La méthode proposée et je trouve très interessante, elle propose de définir les domaines à travailler, d&#8217;identifier le but de tavailler ce domaine, puis de définir un ensemble d&#8217;actions concrètes. Rien de bien nouveau, cependant, j&#8217;ai trouvé intéressant la méthode qui est de travailler de manière incrémental, plutôt que de travailler full time un sujet. <span style="text-decoration: underline;">Mieux vaux travailler un ensemble de sujet et d&#8217;itérer dessus pour monter en compétence</span>. Cela donne plus de recul et une meilleure vision d&#8217;ensemble. A titre d&#8217;exemple, l&#8217;année dernière en travaillant Spring,  je travaillais en parallèle les design pattern, le fait de comprendre des design pattern comme le &laquo;&nbsp;template&nbsp;&raquo; ou le &laquo;&nbsp;stategy&nbsp;&raquo; m&#8217;ont aidé à avoir une meilleure compréhension de Spring et de son utilisation.</p>
<p>Après avoir lu l&#8217;article j&#8217;ai créé mon propre tableau d&#8217;objectif, je vous le livre dans sa version alpha :</p>
<p><span id="more-22"></span></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th width="144" valign="top">
<p align="center"><strong>Domaine</strong></p>
</th>
<th width="180" valign="top">
<p align="center"><strong>Importance/But</strong></p>
</th>
<th width="312" valign="top">
<p align="center"><strong>Objectifs/Sujets   couverts</strong></p>
</th>
<th width="384" valign="top">
<p align="center"><strong>Actions</strong></p>
</th>
</tr>
<tr>
<td width="144" valign="top">
<p align="center"><strong>Pratiques de développement</strong></p>
</td>
<td width="180" valign="top">Etre un   développeur expérimenté.</td>
<td width="312" valign="top">Conception UML</p>
<p>Design Pattern</p>
<p>Test</p>
<p>AOP</td>
<td width="384" valign="top">Lire   « clean code », « design pattern J2EE », « refactoring   des applications J2EE ».</td>
</tr>
<tr>
<td width="144" valign="top">
<p align="center"><strong>Développement -Java</strong></p>
</td>
<td width="180" valign="top">Etre   expert java/J2EE.</td>
<td width="312" valign="top">Améliorer   sa connaissance des API et framework.</td>
<td width="384" valign="top">Essayer   Terracotta</p>
<p>Continuer   d&#8217;apprendre Spring en vue de la certification</p>
<p>Améliorer   les compétences Maven</p>
<p>Creuser   les API de concurrence</td>
</tr>
<tr>
<td rowspan="5" width="144" valign="top">
<p align="center"><strong>Développement &#8211; autres</strong></p>
</td>
<td rowspan="5" width="180" valign="top">Garder   une ouverture nécessaire.</td>
<td width="312" valign="top">.net</td>
<td width="384" valign="top">Suivre   les nouveautés</td>
</tr>
<tr>
<td width="312" valign="top">BPM / BI</td>
<td width="384" valign="top">Avoir les   connaissances de bases</td>
</tr>
<tr>
<td width="312" valign="top">Persistance   O/R</td>
<td width="384" valign="top">Développer   les compétences sur JPA et hibernate.</td>
</tr>
<tr>
<td width="312" valign="top">Travailler   le design de BDD relationnel</td>
<td width="384" valign="top"></td>
</tr>
<tr>
<td width="312" valign="top">Connaître   les intérêts des portal</td>
<td width="384" valign="top">Installer   et essayer LifeRay</td>
</tr>
<tr>
<td rowspan="3" width="144" valign="top">
<p align="center"><strong>Architecture</strong></p>
</td>
<td rowspan="3" width="180" valign="top">S&#8217;orienter   vers un poste d&#8217;architecte d&#8217;ici 3/ 5 ans.</td>
<td width="312" valign="top">Maîtriser   les différents styles d&#8217;architectures :</p>
<p>-            Avantages, inconvénients</p>
<p>-            Connaissance rapide des principales solution pour chaque.</td>
<td width="384" valign="top">Se baser   sur le contenu de wikipedia pour dégrossir le sujet, cibler les plus   importantes et intéressantes :</p>
<p><a href="http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Architecture_logicielle" onclick="javascript:pageTracker._trackPageview('/outbound/article/fr.wikipedia.org');">http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Architecture_logicielle</a></p>
<p>Développer   REST</td>
</tr>
<tr>
<td width="312" valign="top">Apprendre   à monter un dossier d&#8217;architecture :</p>
<p>- savoir exprimer des exigences non   fonctionnelles.</td>
<td width="384" valign="top">Travailler   les domaines ci-dessous</td>
</tr>
<tr>
<td width="312" valign="top">Préparer   la certification SCEA pour 2010 ou 2011</td>
<td width="384" valign="top">Voir la   liste des objectifs</td>
</tr>
<tr>
<td rowspan="2" width="144" valign="top">
<p align="center"><strong>Méthodes agiles</strong></p>
</td>
<td rowspan="2" width="180" valign="top">Pouvoir guider une équipe autour de la mise en place de projet agile d&#8217;ici 2/3 ans.</td>
<td width="312" valign="top">Améliorer   les compétences sur XP/SCRUM.</td>
<td width="384" valign="top">Article   veille techno</p>
<p>Vidéo sur   l&#8217;université du SI, infoQ</td>
</tr>
<tr>
<td width="312" valign="top">Creuser   Lean</td>
<td width="384" valign="top"></td>
</tr>
<tr>
<td width="144" valign="top">
<p align="center"><strong>Formation</strong></p>
</td>
<td width="180" valign="top">Savoir   donner des formations dans le cadre d&#8217;un projet ou dans le cadre de formations   professionnelles.</td>
<td width="312" valign="top">Synthétiser   du contenu</p>
<p>Améliorer   les techniques d&#8217;expression.</td>
<td width="384" valign="top">Ecrire du   contenu sur le blog.</p>
<p>Donner   une nouvelle formation chez BT d&#8217;ici juillet 2009.</td>
</tr>
<tr>
<td rowspan="3" width="144" valign="top">
<p align="center"><strong>Autres</strong></p>
</td>
<td rowspan="3" width="180" valign="top">Développer   ses connaissances périphériques, améliorer l&#8217;ouverture d&#8217;esprit.</td>
<td width="312" valign="top">Fonctionnel   finance</td>
<td width="384" valign="top">Acquérir   les bases de la finance de marché</td>
</tr>
<tr>
<td width="312" valign="top">Management   d&#8217;équipe</td>
<td width="384" valign="top"></td>
</tr>
<tr>
<td width="312" valign="top">Expression   de besoin</td>
<td width="384" valign="top"></td>
</tr>
</tbody>
</table>
<p>Je pense que cela vaut le coup de se définir des objectifs et d&#8217;y travailler quotidiennement. En effet, on a malheureusement tendance à ne se focaliser que sur les sujets que l&#8217;on connait ou qu&#8217;y sont les plus faciles. Or, être expert c&#8217;est justement avoir l&#8217;esprit ouvert et connaître tous les sujets connexes au sujet maitrisé.</p>
<p>Lorsque l&#8217;on atteint un niveau correct dans un domaine on a tendance à s&#8217;arrêter sur cet acquis et à ne plus voir le reste. Le schéma ci-dessous que j&#8217;ai piqué à <a href="http://headrush.typepad.com/creating_passionate_users/2006/03/how_to_be_an_ex.html"title="How to be an expert"  target="_blank" onclick="javascript:pageTracker._trackPageview('/outbound/article/headrush.typepad.com');">Kathy Sierra</a> l&#8217;illustre bien :</p>
<p><img title="Howtobeanexpert" src="http://headrush.typepad.com/photos/uncategorized/howtobeanexpert.jpg" border="0" alt="Howtobeanexpert" /></p>
<p>D&#8217;un autre coté, le premier article nous fait bien comprendre que l&#8217;<span style="text-decoration: underline;">on ne peut pas se reposer sur nos employeurs</span> pour nous prendre la main et nous guider vers ce genre d&#8217;objectif. Nos buts ne sont pas les mêmes :</p>
<blockquote><p><em>Your company expects results from your work: reliable, with minimal mistakes and focused on the company main goal &#8211; make money. Your employer could provide minimal training to help you with job requirements. However, your growth will be constrained by company needs, timelines, work assignments and acceptable methods.</em></p></blockquote>
<p>En développement logiciel les technologies vont tellement vite que l&#8217;on ne peut surtout pas se permettre de se reposer sur une compétence acquise.</p>
<p>Enfin, je terminerai sur <a href="http://www.lifehack.org/articles/lifestyle/how-to-be-an-expert-and-find-one-if-youre-not.html" target="_blank" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.lifehack.org');">cet article</a>, qui nous explique les qualités qui font selon lui un véritable expert  :</p>
<ul>
<li>les connaissances</li>
<li>l&#8217;expérience</li>
<li>des capacités de communications</li>
<li>un réseau</li>
<li>la curiosité</li>
</ul>
<p>Pour y parvenir, il nous propose de travailler sur ces axes :</p>
<ul>
<li>travailler continuellement</li>
<li>pratiquer</li>
<li>se faire un réseau</li>
<li>acquérir des capacité de présentation (plutôt au sens marketing, savoir en mettre plein la vue)</li>
<li>partager son expertise</li>
</ul>
<p>Rendez-vous dans 2, 3 ans pour voir si la méthode marche <img src='http://www.richand.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2009/04/how-to-be-an-expert-preparation-de-mon-regime-proteine/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Assurer un minimum de suivi des demandes : Jtrac!</title>
		<link>http://www.richand.info/blog/2009/02/assurer-un-minimum-de-suivi-des-demandes-jtrac/</link>
		<comments>http://www.richand.info/blog/2009/02/assurer-un-minimum-de-suivi-des-demandes-jtrac/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 21:48:14 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[BugTracker]]></category>
		<category><![CDATA[Jtrac]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=20</guid>
		<description><![CDATA[Je viens de découvrir JTrac, il me plait, il plait à toute l&#8217;équipe, je vous le présente en 2 minutes chrono! Tout d&#8217;abord, notre besoin. Nous travaillons à 8 sur un projet mais sur des parties bien différentes : un frontal .net, un middle Java et un backOffice PL/SQL. Avant, lorsque nous trouvons des bugs, [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens de découvrir JTrac, il me plait, il plait à toute l&#8217;équipe, je vous le présente en 2 minutes chrono!</p>
<p><strong>Tout d&#8217;abord, notre besoin.</strong><br />
Nous travaillons à 8 sur un projet mais sur des parties bien différentes : un frontal .net, un middle Java et un backOffice PL/SQL. Avant, lorsque nous trouvons des bugs, des cas bizarres, ou lorsque nous avions des suggestions; la solution c&#8217;était un mail, un post-it ou bien à l&#8217;oral. Le client possède en interne un outil de gestions des incidents, mais c&#8217;est une énorme usine à gaz, ou l&#8217;on cible forcément toute l&#8217;équipe, et qui est bien trop lent : c&#8217;est surtout dédié aux relations MOA/MOE ou MOE/Production.<br />
Du coup, on ne sais pas ce que deviennent ce que l&#8217;on signale, si c&#8217;est déjà corrigé ou pas, et on ne sait même plus ce que l&#8217;on a demandé, sauf à s&#8217;astreindre à une rigueur que nous n&#8217;avons pas forcément&#8230;<br />
<strong>Premier essai : le fichier Excel !</strong><br />
Ca fonctionne, mais pas très longtemps&#8230; Coup de fil : tu peux me lâcher le fichier Excel pour que je puisse y rajouter quelque chose. Coup de fil n°2 : Tu as vu que ce matin, je t&#8217;ai rajouté plein de trucs.<br />
Bilan : c&#8217;est vite chiant&#8230;<br />
<strong>Deuxième essai : on cherche mieux</strong><br />
Suite à ces constats, on se dit :<br />
- il faut une webapp ou l&#8217;on puisse bosser à plusieurs en même temps<br />
- il faut que ça puisse envoyer des mails<br />
- il faut que l&#8217;on puisse l&#8217;assigner à une personne donnée<br />
- il faut que ça reste pas trop prise de tête comme mon fichier Excel sinon personne l&#8217;utilisera<br />
- si on peut y mettre des fichiers joints en plus, ça serait bonus.<br />
- et aussi il faut que ça s&#8217;installe et paramètre vite, pasque je suis embauché pour coder pas pour faire du consulting en productivité ou en qualité.</p>
<p><strong>Jtrac!</strong></p>
<p><span id="more-20"></span></p>
<p>Après un petit tour sur le net je tombe sur Jtrac, c&#8217;est super, ça répond à tous nos besoins.<br />
J&#8217;ai préféré JTrac à d&#8217;autres (Mantis, BugZilla, etc.) car il est beaucoup plus simple à mettre en place (tu dézippes, tu lances le batch, c&#8217;est fini) mais aussi car il est très minimaliste.<br />
Jtrac en pratique c&#8217;est une webapp en java (Spring, Wicket, Hibernate) avec un jetty embarqué et une base de données XML embarqué (HSQLDB). Il permet de paramétrer facilement des projets, des utilisateurs, la configuration du serveur de mail est ultra rapide, au bout de 5 minutes j&#8217;ai fini et j&#8217;ai commencé à saisir mes premières anomalies. Je n&#8217;ai laissé qu&#8217;un minimum de champs possibles pour pas que les fiches fassent couteau suisse, de plus j&#8217;ai fait en sorte que le cycle vie des incidents soient très permissif.<br />
Bilan, l&#8217;équipe aime bien et suit beaucoup plus facilement les incidents. Ca permet au chef de projet également d&#8217;avoir la vision de l&#8217;avancement des corrections.<br />
Mon conseil, si vous n&#8217;avez pas ce genre d&#8217;outil mettez vous y. Ca permet d&#8217;avancer doucement vers d&#8217;autres outils aux fonctionnalités plus avancé et s&#8217;interfaçant avec Mylin&#8230;</p>
<p>Bilan au bout de 3 semaines : 125 enregistrements, une bonne adhérence de toute l&#8217;équipe, et le chef de projet qui nous ordonne de &laquo;&nbsp;Jtraquer&nbsp;&raquo; une liste d&#8217;évolutions <img src='http://www.richand.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><u>Quelques screenshot :</u></p>
<p><img src="/blog/wp-includes/images/Divers/Jtrac1.jpg" alt="Jtrac" style="width: 660px; height: 221px" width="660" height="221" /></p>
<p><em>Le tableau de bord, simple mais efficace.  </em></p>
<p><img src="/blog/wp-includes/images/Divers/Jtrac2.jpg" alt="Jtrac2" style="width: 822px; height: 499px" width="822" height="499" /></p>
<p><em>L&#8217;Ajout d&#8217;un enregistrement.  </em></p>
<p>C&#8217;est minimaliste, mais cependant extensible via la console d&#8217;admin.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2009/02/assurer-un-minimum-de-suivi-des-demandes-jtrac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Présentation sur les tests chez BT</title>
		<link>http://www.richand.info/blog/2009/02/presentation-sur-les-tests-chez-bt/</link>
		<comments>http://www.richand.info/blog/2009/02/presentation-sur-les-tests-chez-bt/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 20:41:56 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Présentation]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[tests unitaires]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=19</guid>
		<description><![CDATA[Cette semaine nous mettions en place chez BT des formations pour les collaborateurs. Le but du jeux est de permettre à ceux qui le souhaitent de partager leurs connaissances et de permettre à ceux qui le souhaitent de venir les écouter et d&#8217;en discuter. Pour ce premier essai je me suis lancé sur une présentation [...]]]></description>
			<content:encoded><![CDATA[<p>Cette semaine nous mettions en place chez BT des formations pour les collaborateurs. Le but du jeux est de permettre à ceux qui le souhaitent de partager leurs connaissances et de permettre à ceux qui le souhaitent de venir les écouter et d&#8217;en discuter. Pour ce premier essai je me suis lancé sur une présentation sur les tests. J&#8217;ai essayé de faire passer mon intérêt pour la démarche et sur le TDD, en essayant de faire passer l&#8217;argument que coder en testant ne coûte pas forcemment plus cher. Pour la suite, Jean-François Macresy nous a fait un topo des méthodes d&#8217;estimation de charges. La soirée était plutôt réussi avec une quinzaine de personnes attentives et à priori globalement satisfaites. Ci-dessous la présentation que j&#8217;ai donné :</p>
<p style="width: 425px; text-align: left" id="__ss_1030844"><a href="http://www.slideshare.net/nrichand/tests-logiciel?type=presentation" 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" title="Tests Logiciel" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.slideshare.net');">Tests Logiciel</a></p>
<p style="margin: 0px" width="425" height="355">   <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="425" height="355"><param name="height" value="355" /><param name="width" value="425" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=presentationtests-1234728836218053-1&amp;stripped_title=tests-logiciel" /><embed type="application/x-shockwave-flash" height="355" width="425" allowfullscreen="true" allowscriptaccess="always" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=presentationtests-1234728836218053-1&amp;stripped_title=tests-logiciel"></embed></object></p>
<p style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px">View more <a href="http://www.slideshare.net/" style="text-decoration: underline" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.slideshare.net');">presentations</a> from <a href="http://www.slideshare.net/nrichand" style="text-decoration: underline" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.slideshare.net');">nrichand</a>. (tags: <a href="http://slideshare.net/tag/java" style="text-decoration: underline" onclick="javascript:pageTracker._trackPageview('/outbound/article/slideshare.net');">java</a> <a href="http://slideshare.net/tag/tdd" style="text-decoration: underline" onclick="javascript:pageTracker._trackPageview('/outbound/article/slideshare.net');">tdd</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2009/02/presentation-sur-les-tests-chez-bt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soirée Groovy au ParisJUG</title>
		<link>http://www.richand.info/blog/2008/09/soiree-groovy-au-parisjug/</link>
		<comments>http://www.richand.info/blog/2008/09/soiree-groovy-au-parisjug/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 20:32:16 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JUG et évènements]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[ParisJUG]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=17</guid>
		<description><![CDATA[Mardi soir avait lieu une soirée sur le thème Groovy au ParisJug. Après plusieurs désistements en cascade, me voici arrivant seul dans les locaux, cependant tant pis pour les autres car cette soirée était vraiment de qualité est très instructive. Bien qu&#8217;un peu à l&#8217;écoute de Groovy avant d&#8217;y aller, j&#8217;en ressort avec une grande [...]]]></description>
			<content:encoded><![CDATA[<p>Mardi soir avait lieu une soirée sur le thème <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20080909" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.parisjug.org');">Groovy au ParisJug</a>. Après plusieurs désistements en cascade, me voici arrivant seul dans les locaux, cependant tant pis pour les autres car cette soirée était vraiment de qualité est très instructive.<br />
Bien qu&#8217;un peu à l&#8217;écoute de Groovy avant d&#8217;y aller, j&#8217;en ressort avec une grande envie de m&#8217;y lancer (chose faite le lendemain en installant le plugin Groovy pour Eclipse :p)!</p>
<p><img src="http://groovy.codehaus.org/images/groovy-logo.png" /><img src="http://blogs.sun.com/theaquarium/resource/GrailsLogo-180_59px.png" style="width: 180px; height: 59px" height="59" width="180" /></p>
<p><span id="more-17"></span><br />
La première présentation de Guillaume Laforge sur <strong>Groovy </strong>était très intéressante et axée sur le point de vue d&#8217;un développeur Java. L&#8217;argument majeur que je retiens est que tout code java est lui même du code Groovy (mais pas l&#8217;inverse naturellement!). La prise en main est donc très bonne car on écrit du code java au début que l&#8217;on groovyse au fur et à mesure que l&#8217;on maîtrise les tricks du langage. Je vous épargne les détails ici car <a href="http://blog.xebia.fr/2008/09/10/paris-jug-resume-de-la-soiree-groovy-et-grails/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.xebia.fr');">Xebia </a>en fait un compte rendu très complet ici. Le seul aspect au final qui me laisse encore perplexe dans Groovy est le faible pouvoir de détection d&#8217;erreurs à la compilation. Guillaume Laforge estime que l&#8217;aide des IDE (notamment IntelliJ) combiné à un set minimaliste de test unitaire résout le problème, à voir&#8230;<br />
La présentation finit par une présentation des DSL (Domain Specific Langage), je ne suis pas persuadé que n&#8217;importe quel utilisateurs puissent les utiliser, mais c&#8217;est en effet un vrai moyen de se rapprocher de son client et d&#8217;essayer de parler la même langue.</p>
<p>La deuxième présentation était une introduction à <strong>Grails </strong>faites de manière assez ludique. Le point de vue mis en avant (et c&#8217;est l&#8217;un des atout majeur de Groovy/Grails) était vraiment la productivité. Avec aussi une partie sur le fait que Grails produisent bien une applis standard J2EE (un War). Il est en effet bluffant de voir en 10 minutes tout ce que l&#8217;on est capable de produire. Entre une syntaxe très simplifiée (merci Groovy), un boulôt de génération massive pour la BDD et l&#8217;IHM (merci Rails) et le fait de pouvoir s&#8217;abstenir de redémarrer le serveur d&#8217;application, il est clair que la productivité est au rendez-vous. De plus, d&#8217;après les retours d&#8217;expériences il semblerait que Grails tiennent globalement bien la montée en charge.<br />
A l&#8217;issu de cette présentation, j&#8217;ai appris que la communauté Groovy était en train de sortir un équivalent de Grails pour Swing, en cherchant un peu je viens de découvrir <a href="http://docs.codehaus.org/display/GROOVY/Griffon" onclick="javascript:pageTracker._trackPageview('/outbound/article/docs.codehaus.org');">Griffon</a>. A tester!</p>
<p>Dernier petit bonus de la soirée, j&#8217;ai gagné le livre &laquo;&nbsp;<a href="http://www.amazon.com/Filthy-Rich-Clients-Developing-Applications/dp/0132413930" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.amazon.com');">Filthy rich client</a>&nbsp;&raquo; ce qui vraiment cool, merci au ParisJug!</p>
<p>Pour ceux qui n&#8217;auraient pas pu participer à la soirée, vous n&#8217;avez pas tout perdu car 2 présentations équivalentes sont disponibles, ce sont globalement les mêmes, celles du ParisJug étant justes un poil mise à jour et rallongées.</p>
<p><a href="http://www.parleys.com/display/PARLEYS/Home#title=Groovy%20Update;talk=13467832" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.parleys.com');">Présentation de Groovy sur parleys</a></p>
<p><a href="http://www.universite-du-si.com/Webcast.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.universite-du-si.com');">Présentation de Grails</a> : <em>T18 &#8211; Innover sans contraintes, intégrer sans ruptures</em> (s&#8217;inscrire gratuitement sur le site de l&#8217;université du SI).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/09/soiree-groovy-au-parisjug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sun certification et pièges java.</title>
		<link>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/</link>
		<comments>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 20:16:00 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=15</guid>
		<description><![CDATA[Voila un petit moment que mon blog est resté au point mort. L&#8217;explication à cela est du à : la fin de ma mission chez Groupama début juillet. le passage de la certification SCJP dans la foulée. Je vais faire le bilan de la certification SCJP dans mon prochain post donc je ne vais pas [...]]]></description>
			<content:encoded><![CDATA[<p>Voila un petit moment que mon blog est resté au point mort. L&#8217;explication à  cela est du à :</p>
<ul>
<li> la fin de ma mission chez Groupama début juillet.</li>
<li> le passage de la certification SCJP dans la foulée.</li>
</ul>
<p>Je vais faire le bilan de la certification SCJP dans mon prochain post donc je ne vais pas plus m&#8217;attarder sur celle-ci maintenant. Par contre le fait d&#8217;avoir travailler la certification m&#8217;a permis de découvrir certaines subtilités du langage java. Si vous trouvez la réponse tout de suite aux questions ci-dessous c&#8217;est bon, la certif SCJP est dans votre poche, sinon au boulot&#8230;</p>
<p><span id="more-15"></span></p>
<ol>
<h3>
<li><strong>Override &amp; Overload</strong></li>
</h3>
<p>Connaissez-vous bien le fonctionnement de la surcharge (Override) et de la redéfinition (Overload) ? Quel est donc le résultat de ce bout de code :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Animal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Animal a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;un&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Chat &nbsp;<span class="kw2">extends</span> Animal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Animal a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;deux&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Chat a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;trois&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Animal animal = <span class="kw2">new</span> Chat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; animal.<span class="me1">mange</span><span class="br0">&#40;</span>animal<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>Interface</strong></li>
</h3>
<p>Ce bout de code est plus que trivial. Il n&#8217;y a aucun problème naturellement&#8230;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">interface</span> MyInterface<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw4">void</span> myMethod<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> MyClass <span class="kw2">implements</span> MyInterface<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw4">void</span> myMethod<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>Constructeurs</strong></li>
</h3>
<p>Toujours trivial, toujours sans problème ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Constructeur <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> Constructeur<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a> s<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Const2 <span class="kw2">extends</span> Constructeur<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">public</span> Const2<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a> s<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>float</strong></li>
</h3>
<p>Enrobé dans 10 lignes de codes, ce code bidon peut se révéler très piégeur :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">float</span> f = <span class="nu0">1</span>/<span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Mon QI : &quot;</span>+ f*<span class="nu0">2</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>
<li><strong>Autoboxing et widening</strong></li>
</h3>
<p>Tout s&#8217;explique, même ceci. Comment justifierez-vous le choix de la méthode à appeler ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> coucou<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFloat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">Float</span></a> f<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Float&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> coucou<span class="br0">&#40;</span><span class="kw4">double</span> f<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;double&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw4">float</span> f = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; coucou<span class="br0">&#40;</span>f<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Il y en a bien d&#8217;autres, mais celles-ci sont déjà représentatives de l&#8217;esprit de la certification.</ol>
<h2><strong>Réponses :</strong></h2>
<p>1) le résultat est &#8230; « deux » !<br />
Le principe est : Overload est définit à la compilation, Override à l&#8217;exécution. Donc lors de la compilation le compilateur ne sait uniquement que notre « animal » est un Animal mais sans en savoir plus. Donc suivant le principe il va éliminer du choix des méthodes la numéro trois car elle prend en paramètre un Chat. Lors de l&#8217;exécution par contre la JVM sait que notre variable est un Chat, donc elle va choisir la méthode numéro deux qui est définit dans la classe Chat. C&#8217;est aussi simple que cela.</p>
<p>2) Ca ne compile pas bien évidemment.<br />
Le problème vient du fait que les méthodes est variables dans une interface sont typées par défaut, même si vous ne le mettez pas. Le type par défaut d&#8217;une méthode est public. Donc quand on l&#8217;implémente en ne mettant rien on lui attribut le typage défault qui est plus restrictif que public est donc interdit&#8230;<br />
Merci à Eclipse de l&#8217;avoir fait pour nous depuis tant d&#8217;années.<br />
Le type des variables est par défaut lui public static final.3) Idem, ça compile pas.</p>
<p>3) Idem, ça compile pas.<br />
Le problème vient de l’appel au constructeur par défaut. Ce qu’on appelle un constructeur par défaut est un constructeur sans argument qui est automatiquement rajouté à la compilation … si la classe ne définit pas déjà un autre constructeur. Ici donc, aucun constructeur par défaut n’est inséré car on en définit un dans chaque classe.<br />
Le problème provient du fait que la première ligne de chaque constructeur doit contenir une référence vers un autre constructeur de la classe (this(…)) ou de la classe mère (super(…)). Si aucun appel de ce style n’est positionné sur la première ligne alors le compilateur ajoute tout seul : « super() ; »<br />
C’est ce qui se passe sur l’exemple ci-dessus et qui provoque donc une erreur de compilation car le constructeur sans paramètres n’existe pas.</p>
<p>4) Le résultat est évidemment 0.<br />
Un chiffre est considéré par le compilateur comme un int. Le résultat d’un int divisé par un int produit donc un int, le résultat est donc 0.</p>
<p>5) Le résultat est bien sûre « double ». On peut en effet utiliser en java la technique du « widening » qui permet ici de transformer notre float en double (no problem : un double peut contenir un float). On peut aussi depuis java 1.5 utiliser l’autoboxing, l’appel utilisant un « Float » est donc parfaitement valable également donc. L’autoboxing paraitrait plus logique, cependant c’est bien la méthode avec un double qui est appelé pour des besoins de compatibilité avec les versions de java antérieur. Too bad…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Fouillons un peu dans les Apache commons</title>
		<link>http://www.richand.info/blog/2008/03/fouillons-un-peu-dans-les-apache-commons/</link>
		<comments>http://www.richand.info/blog/2008/03/fouillons-un-peu-dans-les-apache-commons/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 22:32:20 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[commons]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=12</guid>
		<description><![CDATA[Nous utilisons très souvent les librairies commons d&#8217;Apache pour diverses choses, notamment pour le logging (commons logging), les connexions diverses et variées et urls (commons net), envoyer des fichiers en J2EE (commons FileUpload), envoyer des mails (commons email), et bien d&#8217;autres encore&#8230; Je n&#8217;utilise que certaines de ces librairies par habitude, mais je me rend [...]]]></description>
			<content:encoded><![CDATA[<p>Nous utilisons très souvent les <a href="http://commons.apache.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');">librairies commons d&#8217;Apache</a> pour diverses choses, notamment pour le logging (commons logging), les connexions diverses et variées et urls (commons net), envoyer des fichiers en J2EE (commons FileUpload), envoyer des mails (commons email), et bien d&#8217;autres encore&#8230;</p>
<p>Je n&#8217;utilise que certaines de ces librairies par habitude, mais je me rend compte de plus en plus souvent que cela vaut le coup d&#8217;aller fréquemment y faire un saut pour éviter de réinventer la roue à chaque fois&#8230;</p>
<p>Ce coup ci je viens de retomber sur l&#8217;API <a href="http://commons.apache.org/lang/" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');">commons lang</a> qui vise à étoffer le comportement de java.lang. Elle contient quantité de classes utilitaires qui peuvent être utilisées sur énormément de projet, d&#8217;ailleurs je pense que beaucoup de projets réécrivent en partie ces classes (vécu)&#8230;</p>
<p>Voici un petit tour rapide de ce que j&#8217;ai découvert d&#8217;intéressant :</p>
<ul>
<li> La classe <a href="http://commons.apache.org/lang/api/index.html?org/apache/commons/lang/StringUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>StringUtils </em></a>avec notamment la méthode<em> IsEmpty()</em> qui permet de remplacer <em>monString != null &amp;&amp; !(&laquo;&nbsp;&nbsp;&raquo;).equals(monString)</em></li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/builder/HashCodeBuilder.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>HashCodeBuilder </em></a>qui permet de coder un bon hashCode sans avoir à ressortir à chaque fois <em><u>java efficace</u></em> de Joshua Blosch (que je recommande)</li>
<li><em><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/exception/ExceptionUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');">ExceptionsUtils</a>.getStackTrace(e) </em>qui permet d&#8217;écrire la stackTrace dans une log par exemple ce que ne permet pas e.printStackTrace()</li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/time/DateUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>DateUtils</em> </a>qui contient des méthodes tels : <em>addYear(), addMonth(), addMinute(), &#8230;</em></li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/builder/EqualsBuilder.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>EqualsBuilder </em></a>pour aider à redéfinir la méthode equals</li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/math/NumberUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>NumberUtils </em></a>avec par exemple <em>toInt(str), toFloat(str), &#8230;</em></li>
<li><em>&#8230;</em></li>
</ul>
<p>Mon conseil du jour est donc : gagnons du temps et refouillons un peu dans les commons <img src='http://www.richand.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/03/fouillons-un-peu-dans-les-apache-commons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

