<?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>Blog de Baptiste Wicht &#187; Java</title>
	<atom:link href="https://blog.developpez.com/wichtounet/pcategory/programmation/java/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/wichtounet</link>
	<description></description>
	<lastBuildDate>Fri, 25 Nov 2011 10:34:42 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Je suis maintenant Sun Certified Programmer for Java SE 6.0 !</title>
		<link>https://blog.developpez.com/wichtounet/p8804/perso/je_suis_maintenant_sun_certified_program_0</link>
		<comments>https://blog.developpez.com/wichtounet/p8804/perso/je_suis_maintenant_sun_certified_program_0#comments</comments>
		<pubDate>Thu, 08 Apr 2010 11:42:13 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Perso]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Hourra Je viens de passer ce matin la certification SCJP pour Java SE 6.0. Et j&#8217;ai réussi à passer le test J&#8217;ai réussi le test avec 93% Ca fait plaisir de voir que les efforts paient. Pour passer cet examen, je me suis entièrement basé sur &#171;&#160;Sun Certified Programmer for Java 6 Study Guide&#160;&#187; de Kathy Sierra et Bert Bates que j&#8217;ai lu deux fois. J&#8217;ai également bénéficié de l&#8217;initiative de SAI pour obtenir des [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hourra <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Je viens de passer ce matin la certification SCJP pour Java SE 6.0. Et j&rsquo;ai réussi à passer le test <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>J&rsquo;ai réussi le test avec 93% <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Ca fait plaisir de voir que les efforts paient. </p>
<p>Pour passer cet examen, je me suis entièrement basé sur &laquo;&nbsp;Sun Certified Programmer for Java 6 Study Guide&nbsp;&raquo; de Kathy Sierra et Bert Bates que j&rsquo;ai lu deux fois. </p>
<p>J&rsquo;ai également bénéficié de l&rsquo;initiative de SAI pour obtenir des vouchers à 40$ pour les étudiants. </p>
<p>Voilà <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>OSGi et dépendances cycliques</title>
		<link>https://blog.developpez.com/wichtounet/p8723/jtheque/osgi_et_dependances_cycliques</link>
		<comments>https://blog.developpez.com/wichtounet/p8723/jtheque/osgi_et_dependances_cycliques#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:07:19 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JTheque]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonsoir, je suis en train de travailler sur la &#171;&#160;bundlisation&#160;&#187; de JTheque Core. Comme le core proposait un certain nombre de services, j&#8217;ai commencé par découper le gros jar qu&#8217;était le core en une série de bundles offrant tous un service bien précis. Je me suis vite rendu compte que le découplage de mes différents services était à peu près nul. J&#8217;avais un nombre énorme de dépendances pour chaque bundle et pire encore, j&#8217;avais un [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bonsoir, </p>
<p>je suis en train de travailler sur la &laquo;&nbsp;bundlisation&nbsp;&raquo; de JTheque Core. Comme le core proposait un certain nombre de services, j&rsquo;ai commencé par découper le gros jar qu&rsquo;était le core en une série de bundles offrant tous un service bien précis. </p>
<p>Je me suis vite rendu compte que le découplage de mes différents services était à peu près nul. J&rsquo;avais un nombre énorme de dépendances pour chaque bundle et pire encore, j&rsquo;avais un grand nombre de dépendances cycliques, soit directs soit indirects. </p>
<p>Pour information, une dépendance cyclique directe est une situation dans laquelle un bundle X dépend d&rsquo;un bundle Y qui dépend lui-même de X. Une dépendance cycle indirecte est la situation dans laquelle X dépend Y, Y dépend de Z et Z dépend de X. Je parle ici de bundles, mais cela peut concerner des projets, des classes ou des packages. </p>
<p>A noter que les différentes techniques que je vais présenter s&rsquo;appliquent également pour des dépendances entre composants non-OSGi, les principes sont tout à fait les mêmes. </p>
<p><span id="more-14"></span></p>
<p>Dans le cas de packages à l&rsquo;intérieur d&rsquo;une même application, même s&rsquo;il faut éviter cela, il est possible de vivre. Néanmoins, dans le cas de bundle ou de projets, il n&rsquo;est en général même pas possible de builder l&rsquo;application. Dans mon cas, les bundles sont des modules Maven. Il est donc impossible de lancer le build d&rsquo;un bundle dans un cycle puisqu&rsquo;il faut builder le premier bundle avant le second et le second avant le premier, ce qui n&rsquo;est pas évidemment pas possible. </p>
<p>En plus d&rsquo;être très mauvais dans un système de build, les dépendances cycliques entre componsants sont aussi un énorme problème de conception. En effet, on ne peut plus travailler sur le bundle A sans travailler sur le bundle B et vice-versa. En plus de cela, les deux composants sont très difficiles à faire évoluer de manière saine. </p>
<p>Les dépendances cycliques au niveau des classes à l&rsquo;intérieur d&rsquo;un composant ne posent pas vraiment de problèmes. On est toujours dans le même composant, les classes peuvent dont être liées de manière cyclique, même s&rsquo;il faudrait tout de même éviter cela dès que c&rsquo;est possible (ça ne l&rsquo;est pas toujours). </p>
<p>Pour en revenir à JTheque, j&rsquo;ai donc du résoudre ce problème de dépendances cycliques avant de pouvoir avancer plus loin. Il existe beaucoup de techniques permettant de faire cela. Voici les différentes pistes que j&rsquo;ai explorées pour résoudre ces dépendances. A noter que ces techiques ne permettent pas seulement de règler le problème des dépendances cycliques mais permet aussi d&rsquo;améliorer l&rsquo;architecture de son application. </p>
<p>1. <strong>Déplacer les classes au bon endroit</strong> : Dans certains cas, j&rsquo;avais des classes dans un bundle alors qu&rsquo;elles n&rsquo;avait rien à y faire. Dans ce cas-là, il peut suffir de les dépacer dans un autre bundle. A noter que ce cas est le plus simple à résoudre et que ce n&rsquo;est malheureusement pas le plsu courant. En plus de cela, dans le cas ou la/les classes à déplacer sont dépendantes d&rsquo;autres bundles, il est possible que cela crée de nouvelles dépendances cycliques. Un exemple est une classe de gestion de modules qui était contenues dans le bundle d&rsquo;interfaces graphiques. </p>
<p>2. <strong>Déplacer les fonctionnalités</strong> : J&rsquo;ai également trouvé beaucoup de fonctionnalités, typiquement des fonctions, à l&rsquo;intérieur d&rsquo;un bundle qui n&rsquo;étaient pas au bon endroit. Par exemple le bundle &laquo;&nbsp;modules&nbsp;&raquo; permettait de faire des mises à jour alors qu&rsquo;un bundle &laquo;&nbsp;update&nbsp;&raquo; existait. Il m&rsquo;a suffi de déplacer cette fonctionnalité de mise à jour vers le bundle update pour résoudre ma dépendance. </p>
<p>3. <strong>Fonctionnalités mal découpées</strong> : Il arrive souvent qu&rsquo;une fonctionnalité, généralement une méthode ou une classe, fasse trop de choses et entraîne des dépendances qui ne sont pas bienvenues ici. Souvent bien redécouper les fonctionnalités et donc le rôle de chaque classe/méthode peut suffir à régler le problème. A noter que ceci ne concerne pas uniquement les concepts de dépendances, mais est un principe de base de la conception orientée objet. Dans le cas de JTheque, j&rsquo;avais pas par exemple, une permettant permettant de choisir une collection qui retournait true si on pouvait ouvrir la collection avec le couple login/password entré sinon false. Mais en plus de cela, elle affichait une erreur dans la vue de choix de collection s&rsquo;il y avait un problème alors que ce n&rsquo;était pas du son rôle. J&rsquo;ai mis à jour cette méthode pour qu&rsquo;elle ne fasse que tester si on pouvait ouvrir la collection ou non et j&rsquo;ai implémenté l&rsquo;affichage de l&rsquo;erreur au niveau de l&rsquo;action Swing. </p>
<p>4. <strong>Découper les fonctionnalités du bundle</strong> : Il peut arriver que le bundle fasse trop de choses ou ait plusieurs aspects bien distincts. Dans ce cas, il faut tout de suite séparer le bundle en plusieurs autres pour que chacun ait une responsabilité claire. Souvent cela va aider à résoudre une dépendance cyclique, comme moins de bundles auront des dépendances vers chacun des nouveaux bundles et que chacun des nouveaux bundles devrait avoir moins de dépendances vers d&rsquo;autres bundles. Mais cela peut également introduire de nouveaux cycles car on peut mal séparer les composants et se retrouver avec 2 composants cycliquement dépendant, on n&rsquo;aura alors fait que déplacer le problème. Dans JTheque, j&rsquo;ai découpé le modules vues en 2 deux bundles : vues et ui. Le module vues contient l&rsquo;implémentation des vues de JTheque alors que le module ui contient des classes utilitaires pour la création de vues ainsi que des composants Swing génériques qui peuvent être utilisés ailleurs. </p>
<p>5. <strong>Introduire un système de CallBack</strong> : Un système de CallBack est un simple système de listeners qui peut permettre de résoudre des dépendances. Au lieu qu&rsquo;un bundle avertisse directement un autre bundle, il suffit que le second s&rsquo;enregistre sur le premier comme listener. Ainsi le premier n&rsquo;a plus besoin de connaître le second. On voit tout de suite que les listeners sont donc plus puissants qu&rsquo;on ne pourrait le croire au premier abord. Dans le cas de JTheque, j&rsquo;ai implémenté cela pour le choix des collections. En effet, de base, le gestionnaire de collections appelait directement la vue pour dire que la collection avait été choisie. En passant à un listener, cela est beaucoup plus souple et le gestionnaire de collections avertit automatiquement tous les écouteurs. En plus de cela, si j&rsquo;ai besoin plus tard d&rsquo;ajouter un second écouteur, je n&rsquo;ai rien à changer du côté du bundle collections. </p>
<p>6. <strong>Séparer la spécification de l&rsquo;implémentation</strong> : Comme il n&rsquo;est pas toujours possible de supprimer les dépendances cycliques directement, on peut donc les contourner en séparant la partie de spécification de la partie d&rsquo;implémentation. Cette technique n&rsquo;est clairement pas la meilleur mais peut parfois être utile quand il est vraiment difficile de résoudre le cycle. On sépare donc dans un bundle toute la partie spécification qui est appelée de l&rsquo;extérieur et la partie d&rsquo;implémentation qui peut alors avoir des dépendances avec l&rsquo;extérieur. A noter que ce n&rsquo;est clairement pas souvent faisable en l&rsquo;état car il n&rsquo;est pas toujours possible de complètement séparer l&rsquo;implémentation de la spécification sans cycles. Je n&rsquo;ai pas utilisé cette technique dans JTheque, mais j&rsquo;y ai pensé. </p>
<p>7. <strong>Regrouper 2 bundles en un seul</strong> : Dans certains cas, on se rend compte que deux modules sont si intrinsèquement liés qu&rsquo;ils ne forment en fait qu&rsquo;un seul modules. Dans ce cas, la meilleure solution est de les regrouper en un seul bundle. </p>
<p>Voilà, j&rsquo;ai maintenant passé en revue les différentes techniques que j&rsquo;ai utilisées pour résoudre les dépendances cycliques dans les bundles de JTheque Core. Il en existe très certainement de nombreuses autres, mais personnellement, elles m&rsquo;ont suffit. </p>
<p>J&rsquo;espère que cela pourra être utile aux personnes cherchant à résoudre des problèmes de dépendances cycliques. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>la version Sonar 2.0 vient de sortir !</title>
		<link>https://blog.developpez.com/wichtounet/p8712/divers/la_version_sonar_2_0_vient_de_sortir</link>
		<comments>https://blog.developpez.com/wichtounet/p8712/divers/la_version_sonar_2_0_vient_de_sortir#comments</comments>
		<pubDate>Thu, 11 Mar 2010 14:00:19 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Outils]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les développeurs de Sonar viennent d&#8217;annoncer la version 2.0 de Sonar Plusieurs nouveautés majeures sont au menu : Analyse d&#8217;architectures. L&#8217;architecture des projets est maintenant analysée, on peut voir également une matrice des dépendances d&#8217;un projet ainsi qu&#8217;une liste des dépendances qu&#8217;il faudrait supprimmer. Analyse orientée object : Nouvelles métriques pour la qualité de la conception orienté objet Améliorations au niveau de l&#8217;interface graphique Bref, que du bon Je n&#8217;ai pas encore testé cette nouvelle [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Les développeurs de Sonar viennent d&rsquo;annoncer la version 2.0 de Sonar <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Plusieurs nouveautés majeures sont au menu : </p>
<ul>
<li>Analyse d&rsquo;architectures. L&rsquo;architecture des projets est maintenant analysée, on peut voir également une matrice des dépendances d&rsquo;un projet ainsi qu&rsquo;une liste des dépendances qu&rsquo;il faudrait supprimmer. </li>
<li>Analyse orientée object : Nouvelles métriques pour la qualité de la conception orienté objet</li>
<li>Améliorations au niveau de l&rsquo;interface graphique</li>
</ul>
<p>Bref, que du bon <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Je n&rsquo;ai pas encore testé cette nouvelle version, je vais attendre que mes plugins soient compatibles avec les nouveautés, mais je n&rsquo;hésiterai pas à faire des retours une fois installée. </p>
<p>Plus d&rsquo;informations sur le <a href="http://sonar.codehaus.org/sonar-2-0-in-screenshots/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+Sonar+(Sonar)&amp;utm_content=Google+Reader">site de Sonar</a>. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JTheque suit la voie OSGi</title>
		<link>https://blog.developpez.com/wichtounet/p8674/jtheque/jtheque_suit_la_voie_osgi</link>
		<comments>https://blog.developpez.com/wichtounet/p8674/jtheque/jtheque_suit_la_voie_osgi#comments</comments>
		<pubDate>Tue, 02 Mar 2010 20:24:15 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JTheque]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonsoir, Une petite nouvelle pour l&#8217;avancement du projet JTheque. J&#8217;ai commencé à migrer JTheque Core vers un environnement OSGi et Spring Dynamic Modules. Le core sera désormais séparés en plusieurs bundles par fonctionnalité. Les modules seront aussi des bundles OSGi. Ce changement permettra d&#8217;améliorer la modularité des différents éléments du core et de suivre une voie plus standarde pour la création de modules. J&#8217;espère que cela permettra d&#8217;améliorer la qualité de JTheque Core. C&#8217;est également [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bonsoir, </p>
<p>Une petite nouvelle pour l&rsquo;avancement du projet JTheque. </p>
<p>J&rsquo;ai commencé à migrer JTheque Core vers un environnement OSGi et Spring Dynamic Modules. Le core sera désormais séparés en plusieurs bundles par fonctionnalité. </p>
<p>Les modules seront aussi des bundles OSGi. </p>
<p>Ce changement permettra d&rsquo;améliorer la modularité des différents éléments du core et de suivre une voie plus standarde pour la création de modules. </p>
<p>J&rsquo;espère que cela permettra d&rsquo;améliorer la qualité de JTheque Core. C&rsquo;est également une occasion pour moi d&rsquo;apprendre à utiliser OSGi et Spring DM. </p>
<p>Baptiste </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Discover the keywords of the Java Language</title>
		<link>https://blog.developpez.com/wichtounet/p8621/english/discover_the_keywords_of_the_java_langua</link>
		<comments>https://blog.developpez.com/wichtounet/p8621/english/discover_the_keywords_of_the_java_langua#comments</comments>
		<pubDate>Thu, 11 Feb 2010 09:55:55 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Hi, I&#8217;m happy to announce an other article of mine in English : The reserved keywords of the Java Language This article will list all the java keywords and describe what they do and how to use them.]]></description>
				<content:encoded><![CDATA[<p>Hi, </p>
<p>I&rsquo;m happy to announce an other article of mine in English : <a href="http://baptiste-wicht.developpez.com/tutorials/java/keywords/">The reserved keywords of the Java Language</a></p>
<p>This article will list all the java keywords and describe what they do and how to use them. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Journalisation avec SLF4J</title>
		<link>https://blog.developpez.com/wichtounet/p8600/programmation/java/journalisation_avec_slf4j</link>
		<comments>https://blog.developpez.com/wichtounet/p8600/programmation/java/journalisation_avec_slf4j#comments</comments>
		<pubDate>Sun, 07 Feb 2010 10:41:16 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Mes articles]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonjour, je viens d&#8217;écrire un nouvel article : Journalisation avec SLF4J. Cet article va vous montrer comment utiliser SLF4J dans votre projet. SLF4J est une couche d&#8217;abstraction de journalisation à l&#8217;image de Commons Logging, mais avec plusieurs avantages par rapport à ce dernier. Ces avantages sont tous décrits dans l&#8217;article ainsi que les différentes fonctionnalités de cette librairie. J&#8217;espère que cet article vous intéressera. Baptiste]]></description>
				<content:encoded><![CDATA[<p>Bonjour, </p>
<p>je viens d&rsquo;écrire un nouvel article : <a href="http://baptiste-wicht.developpez.com/tutoriels/java/slf4j/">Journalisation avec SLF4J</a>. </p>
<p>Cet article va vous montrer comment utiliser SLF4J dans votre projet. SLF4J est une couche d&rsquo;abstraction de journalisation à l&rsquo;image de Commons Logging, mais avec plusieurs avantages par rapport à ce dernier. Ces avantages sont tous décrits dans l&rsquo;article ainsi que les différentes fonctionnalités de cette librairie. </p>
<p>J&rsquo;espère que cet article vous intéressera.</p>
<p>Baptiste</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logging with SLF4J</title>
		<link>https://blog.developpez.com/wichtounet/p8599/english/logging_with_slf4j</link>
		<comments>https://blog.developpez.com/wichtounet/p8599/english/logging_with_slf4j#comments</comments>
		<pubDate>Sun, 07 Feb 2010 10:30:27 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mes articles]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I&#8217;m happy to announce a new article : Logging With SLF4J SLF4J is an abstraction layer for logging frameworks. The way is almost the same as Commons Logging but this framework solve the little issues existing with Commons Logging like the implementation loading with classloader or memory leaks. And introduce also a simpler way to log with heavy concatenations. I hope this article will be useful for some of you.]]></description>
				<content:encoded><![CDATA[<p>I&rsquo;m happy to announce a new article : <a href="http://baptiste-wicht.developpez.com/tutorials/java/slf4j/">Logging With SLF4J</a></p>
<p>SLF4J is an abstraction layer for logging frameworks. The way is almost the same as Commons Logging but this framework solve the little issues existing with Commons Logging like the implementation loading with classloader or memory leaks. And introduce also a simpler way to log with heavy concatenations. </p>
<p>I hope this article will be useful for some of you. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to the JR programming language</title>
		<link>https://blog.developpez.com/wichtounet/p8583/english/introduction_to_the_jr_programming_langu</link>
		<comments>https://blog.developpez.com/wichtounet/p8583/english/introduction_to_the_jr_programming_langu#comments</comments>
		<pubDate>Sun, 31 Jan 2010 18:19:08 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mes articles]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Hi, I wrote a new article about JR : Introduction to JR programming language. This article will introduce you to the main concepts of JR : Compile and launch JR programs Declare process in JR Declare quiescence action Use semaphores to solve critical section problems I hope this article will be useful to some of you.]]></description>
				<content:encoded><![CDATA[<p>Hi, </p>
<p>I wrote a new article about JR : <a href="http://baptiste-wicht.developpez.com/tutorials/java/jr/introduction/">Introduction to JR programming language</a>. </p>
<p>This article will introduce you to the main concepts of JR : </p>
<ul>
<li>Compile and launch JR programs</li>
<li>Declare process in JR</li>
<li>Declare quiescence action</li>
<li>Use semaphores to solve critical section problems</li>
</ul>
<p>I hope this article will be useful to some of you. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Derniers articles : JR et services Google</title>
		<link>https://blog.developpez.com/wichtounet/p8579/informatique-generale/google/derniers_articles_jr_et_services_google</link>
		<comments>https://blog.developpez.com/wichtounet/p8579/informatique-generale/google/derniers_articles_jr_et_services_google#comments</comments>
		<pubDate>Sat, 30 Jan 2010 15:57:55 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mes articles]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonjour, J&#8217;ai écrit ce mois-ci quelques articles qui pourraient vous intéresser. Deux de ces articles concernent le langage de programmation JR qui est une surcouche de Java permettant de faciliter la gestion de concepts de programmation concurrente (sémaphores, CCR, moniteurs, &#8230;) : Installer l&#8217;environnement JR sous Windows Introduction au langage JR Ensuite de quoi, j&#8217;ai également écrits 2 articles sur les services de Google, Friend Connect et Analytics : Analyser l&#8217;audience de votre site web [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bonjour, </p>
<p>J&rsquo;ai écrit ce mois-ci quelques articles qui pourraient vous intéresser. </p>
<p>Deux de ces articles concernent le langage de programmation JR qui est une surcouche de Java permettant de faciliter la gestion de concepts de programmation concurrente (sémaphores, CCR, moniteurs, &#8230;) : </p>
<ul>
<li><a href="http://baptiste-wicht.developpez.com/tutoriels/java/jr/installation/windows/">Installer l&rsquo;environnement JR sous Windows</a></li>
<li><a href="http://baptiste-wicht.developpez.com/tutoriels/java/jr/introduction/">Introduction au langage JR</a></li>
</ul>
<p>Ensuite de quoi, j&rsquo;ai également écrits 2 articles sur les services de Google, Friend Connect et Analytics : </p>
<ul>
<li><a href="http://baptiste-wicht.developpez.com/tutoriels/web/google/analytics/">Analyser l&rsquo;audience de votre site web avec Google Analytics</a></li>
<li><a href="http://baptiste-wicht.developpez.com/tutoriels/web/google/friend-connect/">Développer une communauté autour de votre site avec Google Friend Connect</a></li>
</ul>
<p>J&rsquo;espère que ces articles vous intéresseront <img src="https://blog.developpez.com/wichtounet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>N&#8217;utilisez pas de short comme indice de boucle !</title>
		<link>https://blog.developpez.com/wichtounet/p8503/programmation/java/n_utilisez_pas_de_short_comme_indice_de</link>
		<comments>https://blog.developpez.com/wichtounet/p8503/programmation/java/n_utilisez_pas_de_short_comme_indice_de#comments</comments>
		<pubDate>Sun, 10 Jan 2010 17:32:29 +0000</pubDate>
		<dc:creator><![CDATA[Baptiste Wicht]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Suite à un post sur le forum, je me suis posé la question s&#8217;il fallait utiliser des short comme indice de boucle for pour les boucle avec peu d&#8217;itérations (moins de 32768). Au premier abord, cela peut être tentant étant donné qu&#8217;on gagne 2 octets (c&#8217;est toujours ça). Alors pourquoi utiliser un int alors qu&#8217;un short suffirait ? Mais quand on y réfléchit, on voit bien que le int est le plus adapté. Il est [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Suite à un post sur le forum, je me suis posé la question s&rsquo;il fallait utiliser des short comme indice de boucle for pour les boucle avec peu d&rsquo;itérations (moins de 32768). </p>
<p>Au premier abord, cela peut être tentant étant donné qu&rsquo;on gagne 2 octets (c&rsquo;est toujours ça). Alors pourquoi utiliser un int alors qu&rsquo;un short suffirait ?</p>
<p>Mais quand on y réfléchit, on voit bien que le int est le plus adapté. Il est en effet plus performant. </p>
<p>Pourquoi ? </p>
<p><span id="more-12"></span></p>
<p>En Java, toutes les opérations mathématiques sur des nombres entier (++ par exemple) se font en int. De ce fait, si on utilise un short comme indice de boucle, il faudra à chaque itération, effectuer un type casting implicite vers short, ce qui est plus couteux qu&rsquo;une affectation directe vers int. </p>
<p>Pour appuyer mes propos, j&rsquo;ai développé un petit test :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class TestShortInt { <br />
&nbsp; public static void main(String[] args){ <br />
&nbsp; &nbsp; long startTime = System.nanoTime(); <br />
&nbsp;<br />
&nbsp; &nbsp; for (int i = 0; i &lt; 100000; i++){ <br />
&nbsp; &nbsp; &nbsp; for (int j = 0; j &lt; 32760; j++){} <br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; System.out.println(&quot;Temp pour int : &quot; + (System.nanoTime() - startTime) / 1000000 + &quot; ms&quot;); <br />
&nbsp;<br />
&nbsp; &nbsp; startTime = System.nanoTime(); <br />
&nbsp;<br />
&nbsp; &nbsp; for (int k = 0; k &lt; 100000; k++){ <br />
&nbsp; &nbsp; &nbsp; for (short f = 0; f &lt; 32760; f++){} <br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; System.out.println(&quot;Temp pour short : &quot; + (System.nanoTime() - startTime) / 1000000 + &quot; ms&quot;); <br />
&nbsp; } <br />
}</div></div>
<p>Qui me donne comme résultat : </p>
<blockquote><p>Temp pour int : 1441 ms<br />
Temp pour short : 3015 ms</p></blockquote>
<p>La version avec short est donc deux fois plus lente !</p>
<p>Je parle ici des boucles for, mais le cas est le même lorsque vous utilisez une boucle while qui garde un indice et qui l&rsquo;incrémente à chaque tour. </p>
<p>On peut relativiser en disant qu&rsquo;ici on fait 100&rsquo;000 fois 32&rsquo;760 itérations et on ne perd qu&rsquo;une seconde et demie. Néanmoins, dans des endroits critiques, on peut chercher à gagner le moindre nombre de millisecondes (voire nanosecondes). </p>
<p>Le short sera toutefois à privilégier dans le cas d&rsquo;un stockage de données de petite taille. </p>
<p>A noter également que le int est à priviligier aux long, double et float pour les indices de boucle pour les mêmes raisons que le short. La version long est environ 3 fois plus lente et les versions double/float sont 2.5 fois plus lente. </p>
<p>En conclusion, utilisez toujours des int comme indices de boucle. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>
