<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The World is mine &#187; java</title>
	<atom:link href="http://grozeille.com/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://grozeille.com</link>
	<description>Just another Wordpress.com weblog</description>
	<lastBuildDate>Sat, 07 Jan 2012 12:00:31 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='grozeille.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The World is mine &#187; java</title>
		<link>http://grozeille.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://grozeille.com/osd.xml" title="The World is mine" />
	<atom:link rel='hub' href='http://grozeille.com/?pushpress=hub'/>
		<item>
		<title>Episode 4 : Mathias découvre Spring (et un peu plus OSGI)</title>
		<link>http://grozeille.com/2010/07/09/episode-4%c2%a0-mathias-decouvre-spring-et-un-peu-plus-osgi/</link>
		<comments>http://grozeille.com/2010/07/09/episode-4%c2%a0-mathias-decouvre-spring-et-un-peu-plus-osgi/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 21:32:14 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[DotNetServer]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=417</guid>
		<description><![CDATA[Dans l&#8217;Episode 2, je vous ai parlé de ma découverte de J2EE. Si j&#8217;ai été émerveillé par la plateforme, j&#8217;avoue qu&#8217;elle était assez complexe. C&#8217;est alors que la lourdeur des framework J2EE a donné naissance à une alternative qui s’est voulu plus simple : Spring. J&#8217;aime bien Spring, je pense que vous le savez déjà C&#8217;est [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=417&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dans l&#8217;<a href="http://grozeille.com/2010/06/29/episode-2-mathias-decouvre-j2ee/">Episode 2</a>, je vous ai parlé de ma découverte de J2EE.<br />
Si j&#8217;ai été émerveillé par la plateforme, j&#8217;avoue qu&#8217;elle était assez complexe.</p>
<p>C&#8217;est alors que la lourdeur des framework J2EE a donné naissance à une alternative qui s’est voulu plus simple : <a href="http://en.wikipedia.org/wiki/Spring_Framework">Spring</a>.</p>
<p>J&#8217;aime bien Spring, je pense que vous le savez déjà <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
C&#8217;est pour moi en quelque sorte l&#8217;équivalent de l&#8217;esprit d&#8217;<a href="http://www.altnetfr.org/">ALT.Net</a>, mais en Java.</p>
<p>Ce fut alors la mode des <a href="http://en.wikipedia.org/wiki/Inversion_of_control">IOC</a>, et de l&#8217;approche orienté POJO. Quand j’ai découvert cela, je me suis rendu compte à quel point le framework d’Eclipse RCP pouvait être compliqué…<br />
La gestion de dépendance et de publication/consommation de service devenaient extrêmement simple.</p>
<p>La ou Spring n’était qu’un framework, « <a href="http://www.springsource.com/products/dmserver">SpringSource DM Server</a> » est, quand à lui, un vrai serveur J2EE mais avec une architecture complètement différente de ses concurrents : il est basé sur le même moteur <a href="http://en.wikipedia.org/wiki/Equinox_(OSGi)">OSGI qu’Eclipse</a> !</p>
<p>L’installation de nouvelles applications vous semble pénible ? SpringSource DM Server offre un « AppStore » pour installer un nouveau service et ses dépendances en 2 cliques!</p>
<p>Pour ceux qui ont lu mon <a href="http://grozeille.com/2010/07/09/episode-bonus-microsoft-ma-entendu-ou-pas/">billet sur WebMatrix</a>, la fonctionnalité n&#8217;est pas tout à fait la même que c&#8217;elle du produit Microsoft.Vous pouvez ici installer bien d&#8217;autres choses que des applications Web: des ESB, des serveurs Web (car oui, en Java, on a le choix entre Tomcat, Jetty et autres), etc.<br />
Vous voulez installer un serveur de Messaging ? Installer <a href="http://activemq.apache.org/">ActiveMQ</a> en quelques cliques : <a href="http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.activemq&amp;version=5.3.0">http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.activemq&amp;version=5.3.0</a></p>
<p>Vous trouvez plus d’infos sur <a href="http://www.springsource.com/products/dmserver/repository">http://www.springsource.com/products/dmserver/repository</a></p>
<p><a href="http://grozeille.files.wordpress.com/2010/07/spring-context.png"><img class="aligncenter size-medium wp-image-420" title="spring-context" src="http://grozeille.files.wordpress.com/2010/07/spring-context.png?w=300&h=252" alt="" width="300" height="252" /></a><br />
En plus de tout ces avantages, SpringSource DM Serveur offre un interface d’administration d&#8217;un pure merveille, j’en bave quand je vois que Microsoft reste attaché à sa MMC…<br />
Et comme si ça ne suffisait pas, SpringSource ont racheté <a href="http://www.hyperic.com/">Hyperic</a> qui est une appli Web de Monitoring applicatif, ce qui rend l’administration de votre serveur  encore plus professionnel.</p>
<p>Petite conclusion:</p>
<ul>
<li>l&#8217;IOC c&#8217;est cool, vive l&#8217;approche POJO</li>
<li>OSGI c&#8217;est de la bombe. Cela permet aussi bien de gérer des plugins dans un IDE, que des middleware dans un serveur d&#8217;applications</li>
<li>l&#8217;installation d&#8217;une plateforme applicative doit être simple et facile, autant que de lancer un Setup de EasyPHP ou de cliquer sur un lien d&#8217;un &#8220;AppStore&#8221;</li>
<li>vive les interfaces Web d&#8217;administration, à mort la MMC</li>
</ul>
<br /> Tagged: <a href='http://grozeille.com/tag/net/'>.Net</a>, <a href='http://grozeille.com/tag/java/'>java</a>, <a href='http://grozeille.com/tag/osgi/'>osgi</a>, <a href='http://grozeille.com/tag/spring/'>spring</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/417/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=417&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2010/07/09/episode-4%c2%a0-mathias-decouvre-spring-et-un-peu-plus-osgi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/07/spring-context.png?w=300" medium="image">
			<media:title type="html">spring-context</media:title>
		</media:content>
	</item>
		<item>
		<title>Episode 3 : Mathias découvre Eclipse (et un peu OSGI)</title>
		<link>http://grozeille.com/2010/06/29/episode-3-mathias-decouvre-eclipse/</link>
		<comments>http://grozeille.com/2010/06/29/episode-3-mathias-decouvre-eclipse/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 18:24:59 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[DotNetServer]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[osgi]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=395</guid>
		<description><![CDATA[Dans l&#8217;épisode 2, je vous ai dit à quel point les serveurs J2EE pouvaient être complexe dans la gestion d&#8217;application. Il en est de même dans le monde des IDE avec la gestion des plugins. Tout en étudiant J2EE, je suis tombé amoureux de mon IDE Java préféré : Eclipse. Pas seulement pour sont utilisation, mais [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=395&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dans l&#8217;épisode 2, je vous ai dit à quel point les serveurs J2EE pouvaient être complexe dans la gestion d&#8217;application.<br />
Il en est de même dans le monde des IDE avec la gestion des plugins.</p>
<p>Tout en étudiant J2EE, je suis tombé amoureux de mon IDE Java préféré : Eclipse. Pas seulement pour sont utilisation, mais aussi pour son architecture.</p>
<p>En effet, la réalisation de plugins pour Eclipse se fait de manière ultra puissante. A tel point que le « noyau » d’Eclipse peut être complètement extrait pour faire sa propre application qui n’a rien à voir avec un IDE : c’est le framework RCP (Rich Client Platform).<br />
J’ai d’ailleurs à l’époque réalisé une application RCP pour la gestion de budget d’achat de livres pour les bibliothèques.</p>
<p><a href="http://grozeille.files.wordpress.com/2010/06/bibliographievista.jpg"><img src="http://grozeille.files.wordpress.com/2010/06/bibliographievista.jpg?w=630" alt="" title="BibliographieVista"   class="aligncenter size-full wp-image-397" /></a></p>
<p>Malheureusement, la pauvreté des composants graphique en Java faisait du tors à cette plateforme.<br />
Mais je restais subjugué par le moteur de plugins :</p>
<ul>
<li>Les plugins sont isolés afin que si un plugin crash, les autres continuent leur vie</li>
<li>Les plugins sont aussi isolé coté sécurité : un plugin ne peut pas accéder aux codes d’un autre plugin si ce dernier ne l’a pas explicitement rendu « publique »</li>
<li>Les plugins peuvent publier et consommer des services, avec un model très élégant</li>
<li>Il y a une gestion de dépendance entre les plugins, avec la prise en compte des versions</li>
<li>L’installation et la mise à jour des plugins se fait d’une simplicité déconcertante</li>
</ul>
<p><a href="http://grozeille.files.wordpress.com/2010/06/16279.png"><img src="http://grozeille.files.wordpress.com/2010/06/16279.png?w=630" alt="" title="16279"   class="aligncenter size-full wp-image-398" /></a></p>
<p>En fait, si la gestion des plugins est si balaise c’est car elle provient d’un standard de « développement par composant » : OSGI.</p>
<p>L’alliance OSGI est un organisme de personnes qui se mette d’accord ensemble sur des specs concernant les frameworks OSGI. C’est encore la que Java écrase .Net par sa maturité : il n’y a pas de monopole, il y a bien plusieurs acteurs derrière un « standard » ouvert qui va connaitre de multiples implémentations.</p>
<p>OSGI est donc un framework complexe de gestion de « modules » qui exposent des « services ». N’hésitez pas à lire le WIKI qui explique ça très bien : <a href="http://en.wikipedia.org/wiki/OSGi">http://en.wikipedia.org/wiki/OSGi</a></p>
<p>En conclusion, Eclipse est une plateforme riche en plugins grâce au coté Open-Source de l&#8217;IDE, à l&#8217;API de plugins très bien faite mais aussi à l&#8217;aide du plugins pour développer des plugins <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Qu&#8217;en est-il du coté .Net? VisualStudio a-t-il le même succès concernant le développement ce plugins? Offre-t-il une architecture de plugin aussi puissante? On verra ça dans un autre épisode <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<br /> Tagged: <a href='http://grozeille.com/tag/net/'>.Net</a>, <a href='http://grozeille.com/tag/eclipse/'>eclipse</a>, <a href='http://grozeille.com/tag/j2ee/'>J2EE</a>, <a href='http://grozeille.com/tag/java/'>java</a>, <a href='http://grozeille.com/tag/osgi/'>osgi</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/395/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=395&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2010/06/29/episode-3-mathias-decouvre-eclipse/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/06/bibliographievista.jpg" medium="image">
			<media:title type="html">BibliographieVista</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/06/16279.png" medium="image">
			<media:title type="html">16279</media:title>
		</media:content>
	</item>
		<item>
		<title>ALT.Net et l&#8217;orienté objet</title>
		<link>http://grozeille.com/2010/01/25/alt-net-et-loriente-objet/</link>
		<comments>http://grozeille.com/2010/01/25/alt-net-et-loriente-objet/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 21:36:49 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[ALT.Net]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[langage]]></category>
		<category><![CDATA[POO]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=261</guid>
		<description><![CDATA[La dernière réunion ALT.Net a été présentée par Frédéric Fadel sur le sujet: L’orienté objet : erreur historique ou la voie à poursuivre ? Je remercie Freddy pour sa présentation et Octo pour leur accueil. En résumé, nous avons évoqué les problèmes avec les langages objets, et ce qui nous fait perdre en productivité. Pour [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=261&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La dernière réunion ALT.Net a été présentée par <a href="http://fr.linkedin.com/in/fredericfadel">Frédéric Fadel</a> sur le sujet: <a href="http://www.altnetfr.org/2010/01/07/alt-net-paris-21-loriente-objet-erreur-historique-ou-la-voie-a-poursuivre/">L’orienté objet : erreur historique ou la voie à poursuivre ?</a></p>
<p>Je remercie Freddy pour sa présentation et Octo pour leur accueil.</p>
<p>En résumé, nous avons évoqué les problèmes avec les langages objets, et ce qui nous fait perdre en productivité.<br />
Pour cela, il faut définir exactement ce qu&#8217;est l&#8217;Objet: d’après Freddy : <strong>Héritage</strong>, <strong>Composition</strong>, <strong>Polymorphisme</strong>.</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/p1030608-1.jpg"><img class="aligncenter size-medium wp-image-262" title="ALT.Net Janvier 2010" src="http://grozeille.files.wordpress.com/2010/01/p1030608-1.jpg?w=300&h=225" alt="" width="300" height="225" /></a></p>
<p>D’après lui, l’héritage est un handicap, la composition est une bonne chose, le polymorphisme aussi.<br />
<span id="more-261"></span>Mais voila, c&#8217;est mon blog, alors je parle de ce que je veux <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ceci dit, j&#8217;avoue que çette présentation m&#8217;a fait réfléchir. A vrai dire, ça m&#8217;a presque empêcher de dormir!</p>
<p>Après de longues réflexions, je ne pense pas que l&#8217;objet soit une erreur historique. Freddy souligne bien le fait que l&#8217;objet est complexe, et pas facile à maitriser. Vous en connaissez beaucoup qui ne font jamais une erreur d&#8217;architecture? Qui maitrise le MVC, l&#8217;AOP et l&#8217;ORM ? (à part moi? ^^)</p>
<p>Ma définition de l’objet est différente : pour moi, tout est objet, c’est l’unité atomique en programmation.<br />
On peut tout faire avec des objets, les meilleurs choses comme les pires.<br />
Je distingue  plusieurs catégories d’objets suivant leurs responsabilités:</p>
<h3>1 &#8211; Object domain</h3>
<p>L&#8217;Object Domain est une représentation d’un composant métier (au sens <strong>DDD </strong>du terme). Un objet possède un état et un comportement. Une <em>facture</em> par exemple possède un état représenté par son &#8220;prix&#8221;, et un comportement comme &#8220;appliquer une remise&#8221;.</p>
<h3>2 &#8211; Services</h3>
<p>Le service est un Objet ayant pour responsabilité de fournir des traitements, c’est-a-dire qu’il n’a pas d’état mais seulement un &#8220;comportement&#8221;. En DDD, ces services permettent de calculer des choses qui impliquent plusieurs graphes d&#8217;objet. Si une <em>facture</em> sait calculer son propre prix, elle n&#8217;est pas capable de calculer le profit du mois courant, c&#8217;est donc la responsabilité d&#8217;un objet de plus haut niveau, c&#8217;est à dire le service.</p>
<h3>3 &#8211; Repository</h3>
<p>Un Repository est un service spécial qui a pour objectif de faire l’interface entre le programme et les sources de données, que ce soit des Base de données, fichiers, caches mémoire, WebService ou WMI. Comme le Repository fait référence à une source de données externe (non en mémoire) il n’est pas testable unitairement.<br />
Le Repository fait office de référence des données, on peut dire alors qu’il possède l’instance &#8220;de référence&#8221; d’un objet.</p>
<h3>4 &#8211; Factory</h3>
<p>Si le Repository est responsable de charger ou modifier les données existantes, la Factory quand a elle est responsable de créer une nouvelle donnée. La Factory est un service, qui a donc connaissance des différents objets du SI pour en construire un nouveau. On peut imaginer que la Factory construise une facture avec un &#8220;ReferenceNumber&#8221; calculé intelligemment en fonction de la date du jour, et du prochain numéro de factures en fonction de celles déjà existantes: <code>#QUOTE_230110_0002</code></p>
<h3>5- Data Transfert Objects (DTO)</h3>
<p>C’est le fameux <strong>DataSet</strong> de Freddy. Si l’objet du domaine ne possède plus de constructeur (Factory) ne possède plus de procédures/fonctions (Service&amp;Repository), il ne lui reste que l’état, c&#8217;est-à-dire une ensemble de données.</p>
<p>On peut alors parler de &#8220;structure&#8221; ou de &#8220;type valeur&#8221;. Il ne sert qu’à être &#8220;sérializé&#8221; à travers un réseau, ou entre 2 programmes, et passer de tier en tier, de l’interface à la source de données. Avoir une unique instance importe peu, ce n’est d&#8217;ailleurs pas possible en N-Tier, on l’identifie alors avec son ID.</p>
<h3>6 &#8211; Message</h3>
<p>C’est en quelque sorte la &#8220;<strong>Command</strong>&#8221; ou la &#8220;<strong>Query</strong>&#8221; de <strong>CQRS</strong>. C’est un objet qui représente une action à faire: une requête (query) pour récupérer un objet, ou une action (command) à effectuer dans le programme. L&#8217;utilisation d&#8217;un objet &#8220;message&#8221; permet de réduire le nombre d&#8217;arguments d’une méthode, ou ne donner que ce qui est nécessaire à la méthode: comme le dit Udi, rien ne sert de donner TOUT l’objet métier à la fonction <code>ComputeDiscount()</code>, son ID et le Pourcentage suffisent.</p>
<h2>Comment utiliser tout ceci</h2>
<p>Pour donner un retour d&#8217;expérience, je vais expliquer comment j&#8217;utilise ces objets en général.</p>
<p>En réalité, j&#8217;utilise très très rarement des méthodes dans des objets. Mes objets du domaine peuvent alors se résumer à des DTO.<br />
Je séparer le comportement dans des services.</p>
<p>J&#8217;utilise aussi très peu l&#8217;héritage. Je me sert très souvent de la composition, voir de l&#8217;AOP.</p>
<p>Je n’ai pas parlé des interfaces, mais c’est un concept important puisque comme dit Freddy:</p>
<blockquote><p>&#8220;tout est boite noire, c’est le principe de composition&#8221;.</p></blockquote>
<p>L&#8217;interface au sens &#8220;POO&#8221; est donc l&#8217;intermédiaire entre l&#8217;utilisateur (le code appelant) et ce qu’il y a dans la boite noire (implémentation).<br />
Ces interfaces ont aussi un rôle très important dans l&#8217;interopérabilité, ou les systèmes distribués: il est donc dommage que ces notions ne soit pas inhérente au langage, quelque soit la technologie de communication.</p>
<h3>Procédure ou Fonction?</h3>
<p>En ce qui concerne le comportement, on peut distinguer la &#8220;procédure&#8221; et la &#8220;fonction&#8221; : La fonction au sens &#8220;fonctionnel&#8221; du terme, est sensé calculer un résultat sans effet de bord (sans altéré l’état de l’objet ou de ses paramètres). La procédure par contre, ne renvoi aucun résultat et ne sert qu’à altérer l’état de l’objet.<br />
Les langages modernes ne font pourtant pas la distinction entre ces 2 notions, et c’est peut-être une erreur (on avait pourtant le &#8220;const&#8221; en C++).<br />
Si Freddy suggère que l&#8217;objet est un échec, je pense que les &#8220;procédures&#8221; le sont. Depuis de début de ma formation informatique, on nous met en garde contre les effets de bord, et l&#8217;on trouve divers mécanismes pour les éviter, alors qu&#8217;on peut simplement &#8220;interdire&#8221; les procédures. Il faut en tout cas un concept &#8220;d&#8217;immutabilité&#8221; clair pour savoir ce que &#8220;la procédure/fonction&#8221; fait exactement.</p>
<h3>Référence ou Valeur?</h3>
<p>On distingue l&#8217;identité d&#8217;un objet par sa référence, ou son instance en mémoire (c&#8217;est à dire son adresse mémoire). Mais ce n&#8217;est clairement pas représentatif de la réalité. Dans un contexte distribué comme l’a dit Freddy, ce n’est pas possible: la donné existe dans plusieurs mémoires (plusieurs programmes) et plusieurs machines. Il existe alors plusieurs instances d’une même données : dans l&#8217;interface du programme client, sur le serveur de WebService et dans la base de données.</p>
<p>Les références sont donc inutiles, puisque la donnée existe partout, mais on a du coup besoin d’identifier un objet à l&#8217;aide d’autre chose, et c&#8217;est souvent un &#8220;ID&#8221; qui sera la clé en BD. Il serait utile aussi de connaitre sa &#8220;version&#8221;, afin de résoudre mieux résoudre les changements, tout comme dans un gestionnaire de code source.</p>
<p>Donc finalement, les objets du domaine ne sont que des DTOs, tout comme des &#8220;Datasets typés&#8221;.<br />
Mais parfois nous avons besoin de représenter une même donnée sous différente forme.<br />
Exemple: J&#8217;ai besoin de récupérer une liste de &#8220;Factures&#8221; avec son total calculé, ou parfois j&#8217;ai besoin de la même &#8220;Facture&#8221; mais avec son détail: <span style="font-family:Consolas, Monaco, 'Courier New', Courier, monospace;line-height:18px;font-size:12px;white-space:pre;">InvoiceListItemDto <span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;">&amp; <span style="font-family:Consolas, Monaco, 'Courier New', Courier, monospace;line-height:18px;font-size:12px;white-space:pre;">InvoiceDetailDto<span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;">.</span></span></span></span></p>
<p>Le problème est le suivant: j&#8217;ai une fonction qui calcule le totale avec taxe, qui prend en paramètre un InvoiceDetailDto alors que je manipule un InvoiceListItemDto.</p>
<p>Je me retrouve avec un type incompatible, et pourtant, ma fonction a besoin de champs existant aussi bien dans le premier que le deuxième type: un total hors taxe.</p>
<p><pre class="brush: csharp;">
float ComputeWithTaxes(InvoiceDetailDto dto);
var invoice = new InvoiceListItemDto();
ComputeWithTaxes(invoice); // !!! ça marche pas
</pre></p>
<p>Faut-il alors de l&#8217;héritage pour que la fonction prenne en paramètre un type commun?<br />
Ah NON! Si je commence comme ça, je vais avoir besoin de multiple héritage rapidement, pour de multiples fonctions. Et comme je code en C#, je n&#8217;ai pas de multiple héritage.</p>
<p>Alors ai-je besoin d&#8217;une interface commune? Mais dans ce cas, vais-je faire une interface pour chaque fonction?? Ors de question.</p>
<p>Une solution existe alors pour convertir un type &#8220;presque identique&#8221; à un autre: AutoMapper!!<br />
Une solution proposé par Fredy, c&#8217;est de ne pas typer tout simplement. Ma fonction va alors &#8220;planter&#8221; si elle n&#8217;a pas les informations attendues, mais fonctionnera le reste du temps.<br />
Mais une autre solution plus simple existe: je peux simplifier la fonction pour ne lui donner <strong>QUE CE QUI EST NECESSAIRE</strong>:</p>
<p><pre class="brush: java;">
float ComputeWithTaxes(float totalWithoutTaxes);
</pre><br />
OK, dans ce cas c&#8217;est simple. Mais si j&#8217;ai besoin de 10 paramètres à ma fonction?</p>
<h3>Paramètres ou Messages?</h3>
<p>Comme je l&#8217;ai dit au début, un peut utiliser des objets, qui ont une duré de vie très courte puisqu&#8217;ils ne servent qu&#8217;a représenter une liste d&#8217;argument d&#8217;une méthode.<br />
Cela simplifie l&#8217;appel de la méthode, et rend la lecture du code plus lisible.</p>
<p>Prenons par exemple l&#8217;interface suivante:</p>
<p><pre class="brush: java;">
public class InvoiceService
{
  Invoice ProcessMessage(ApplyDiscountMessage message)
  {
    // do some stuff
  }

  object ProcessMessage(object unknownMessage)
  {
    // ignore it, unkown message type
  }
}</pre></p>
<p>Grâce au polymorphisme, nous avons un comportement dynamique qui traite le message si son type est connu.<br />
Si tout les services sont capables de prendre une commande, ils peuvent se spécialiser pour traiter certains type de commandes et ignorer les autres.<br />
Un appel à la méthode &#8220;ProcessMessage&#8221; ne provoquera alors jamais une erreur de compilation, mais peut être ignoré dans le pire des cas.</p>
<p>Et puisque mon programme peut posséder plusieurs services capables de traiter un même type de message, je peux alors le dispatcher à chacun d&#8217;eux.<br />
Exemple :</p>
<p><pre class="brush: csharp;">
Factory.GetServices().ProcessMessage(new ApplyDiscountMessage {id=1, discount=10.0}) ;
</pre></p>
<h2>Un nouveau langage!!</h2>
<p>En reprenant donc tous ces concepts, je peux TOUT modéliser avec les objets tels qu’on les connaît aujourd’hui.<br />
Mais pour être plus efficace pour la réalisation des différentes briques du SI et modéliser facilement le métier sans rentrer dans la technique, on a peut-être besoin de plusieurs DSL pour chaque aspect du SI, même si ces DSL reposent sur l&#8217;objet (tout comme le langage qui s&#8217;appuie sur l&#8217;assembleur).</p>
<p>Je vais donc essayer de reprendre les concepts cité plus haut, et en faire un NOUVEAU LANGAGE!!</p>
<p>Reprenons le plus important: <strong>&#8220;Pas d&#8217;objet, des données!&#8221;</strong>.<br />
Soit alors la définition d&#8217;une donnée comme ceci:</p>
<p><pre class="brush: csharp;">
data Person
{
  key int Id;

  version int Version;

  unique max(20) string SocialSecurityNumber;

  DateTime Birthday;

  string Firstname;

  string Lastname;
}
</pre></p>
<p>Il n&#8217;y a ici que de la donnée, pas de comportement. Donc inutile de rendre des choses privés, si aucunes méthodes ne peut s&#8217;en servir.<br />
Comme je l&#8217;ai dis plus tôt, on a besoin d&#8217;un identifiant pour cette donnée. Pourquoi ne pas l&#8217;inclure au langage?<br />
De même pour la version ou les contraintes sur les données.<br />
Si vous souhaitez calculer l&#8217;age de la personne, il suffit alors de demander à un service de le faire:</p>
<p><pre class="brush: csharp;">
contract PersonContract
{
  float ComputeAge(Person this);

  string SayHelloTo(Person this, Person otherPerson);

  string Talk(Person this, Person to, string message);

  Person HappyBirthDay(Person this);

  Person BuildNew();
}
</pre><br />
Ceci est une &#8220;interface&#8221;, ou dirais-je un &#8220;contrat&#8221;. Comme le dit Freddy: pas besoin de &#8220;private/public&#8221; puisque toute implémentation est privé et toute interface est publique.<br />
Voici donc l&#8217;implémentation:</p>
<p><pre class="brush: csharp;">
// on parle beaucoup &quot;d'injection de dépendance&quot;, c'est même maintenant une JSR en Java,
// ou un mot clé dans le langage NOOP. Un contrat peut donc dépendre d'un autre contrat
service PersonService : PersonContract&lt;Person&gt;
   depends MathContract,optional DateContract, PersonRepository
{
  float ComputeAge() =&gt;
    this.Birthday-DateTime.Now;

  string SayHelloTo(Person otherPerson) =&gt;
     &quot;Hello {otherPerson.FirstName} {otherPerson.LastName.ToUpper()}&quot;;   
  
  string Talk(Person to, string message) =&gt;
     var m = message??&quot;Hello&quot;;
     &quot;Hey {to.FirstName}, {m}!&quot;;

  Person HappyBirthDay(Person this) =&gt;
     this.Birthday = this.Birthday.AddDays(1);
     this;

  Person BuildNew()=&gt;
     var id = PersonRepository.GetNextId();
     new Person{ Id = id }; 
}
</pre></p>
<p>On peut alors imaginer une utilisation de ce service comme ceci:</p>
<p><pre class="brush: csharp;">
// constructeur? pas besoin avec des types valeur...
Person moi;

// ... mais on peut imaginer une initialisation &quot;à la C#3&quot;, ou dirais-je,
// comme un tableau puisque chaque structure est comme un tableau typé
Person freddy = { Firstname = &quot;Freddy&quot;, Lastname = &quot;&quot; };

// ... ou demander à une Factory de le construire
Person other = Person.BuildNew();

// la données n'ont pas de méthode, mais rien n'empêche d'utiliser les services comme les méthodes d'extensions?
moi.SayHelloTo(Freddy);

// imaginons aussi que les paramètres sont nommé comme en C#4
// l'ordre n'a donc pas d'importance...
moi.Talk(message = &quot;Salut&quot;, to = Freddy)

// ... et les paramètres ont des valeurs par défaut
moi.Talk(to = Freddy);
</pre></p>
<h2>Conclusion (enfin)&#8230;</h2>
<p>Après ce petit essaie, il ne me reste plus qu&#8217;à maitriser <a href="http://www.antlr.org/works/index.html">http://www.antlr.org/works/index.html</a> et réaliser mon propre langage <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Cette proposition de langage ne résout pas un dernier problèmes évoqué par Freddy concernant l&#8217;objet: le typage fort.<br />
Je ne suis pas sûr que le Javascript soit le meilleur langage du monde <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ça me fait perdre trop de cheveux lors des &#8220;debugging-party&#8221;.<br />
Je ne suis pas fan d&#8217;écrire du code qui &#8220;peut être marche&#8221;, je préfère éviter de longue journée de débuguage devant le client.<br />
<br />
C&#8217;est parfois utile, c&#8217;est pourquoi C#4 offre maintenant le mot clé &#8220;dynamic&#8221;. Mais dans certain cas on souhaite s&#8217;assurer que le programme est viable, et pour cela il existe la programmation par &#8220;contrat&#8221; comme le propose <a href="http://bit.ly/7LEZiE">Spec#</a>.</p>
<p>Bref, rien de bien nouveau donc. La plupart des propositions proviennent de langages déjà existant. On en revient toujours au même problème: est-ce l&#8217;outil qui est mal adapté? Ou est-ce qu&#8217;on l&#8217;utilise pas comme il le faut? Je ne suis donc pas sectaire, et apprendre de nouveau langage, objet, fonctionnel ou autre, ne me dérange absolument pas. C&#8217;est pour moi un métier passionnant que d&#8217;apprendre toutes ces choses et utiliser le langage adapté situation.</p>
<br /> Tagged: .Net, ALT.Net, java, langage, POO <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=261&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2010/01/25/alt-net-et-loriente-objet/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/p1030608-1.jpg?w=300" medium="image">
			<media:title type="html">ALT.Net Janvier 2010</media:title>
		</media:content>
	</item>
		<item>
		<title>Java for iPhone</title>
		<link>http://grozeille.com/2010/01/21/253/</link>
		<comments>http://grozeille.com/2010/01/21/253/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 19:57:14 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Blabla]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=253</guid>
		<description><![CDATA[Pour les fans de .Net et de l&#8217;iPhone, vous savez sans doute que vous pouvez vous éclater avec MonoTouch. J&#8217;en profite pour dire que JB Evain en parlera aux TechDays. La particularité et le défi de MonoTouch, c&#8217;est que le processeur de l&#8217;iPhone ne supporte pas une opération nécessaire à la compilation à chaud (JIT), [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=253&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pour les fans de .Net et de l&#8217;iPhone, vous savez sans doute que vous pouvez vous éclater avec <a href="http://monotouch.net/">MonoTouch</a>.<br />
J&#8217;en profite pour dire que <a href="http://evain.net/blog/">JB Evain</a> en parlera aux <a href="http://www.microsoft.com/france/mstechdays/programmes/parcours.aspx?index=70">TechDays</a>.</p>
<p>La particularité et le défi de MonoTouch, c&#8217;est que le processeur de l&#8217;iPhone ne supporte pas une opération nécessaire à la compilation à chaud (JIT), qui est la base des langages sur une VirtualMachine (.Net et Java). L&#8217;application Mono est alors compilée nativement, avec une suppression des bibliothèques du framework inutilisées.</p>
<p>Et Java alors, est-ce que la communauté compte faire quelque chose?<br />
Et bien une startup, <a href="http://www.flexycore.com/">Flexycore</a>, l&#8217;a déjà fait: iSpectrum! Et le produit est gratuit pour les projets Open-Source!!! Ce qui n&#8217;est pas le cas pour MonoTouch.</p>
<p>Voici un aperçu de ce qui est possible:</p>
<span style="text-align:center; display: block;"><a href="http://grozeille.com/2010/01/21/253/"><img src="http://img.youtube.com/vi/l-bXdM5rU2g/2.jpg" alt="" /></a></span>
<p>Certes, la démo n&#8217;est pas &#8220;bandante&#8221;, mais derrière, il y a le support de J2ME, du JavaScript, les API de l&#8217;iPhone (comme le GPS) et bientôt l&#8217;API OpenGL ES.<br />
Est-ce le retour de Java pour les jeux mobiles?</p>
<br /> Tagged: .Net, Apple, iPhone, java, mono <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/253/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=253&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2010/01/21/253/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
		<item>
		<title>Vous êtes plutôt Microsoft ou Google?</title>
		<link>http://grozeille.com/2010/01/17/vous-etes-plutot-microsoft-ou-google/</link>
		<comments>http://grozeille.com/2010/01/17/vous-etes-plutot-microsoft-ou-google/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 17:21:52 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Blabla]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=228</guid>
		<description><![CDATA[Cela fait longtemps que vous vous posez la question, et à l&#8217;aide de notre questionnaire réalisé par de grands psychologues, vous allez enfin connaitre la réponse! Ce matin, aux alentours de 5h30, vous vous levez pour allumer votre portable qui démarre sous&#8230; - Windows bien sûre &#8211; Google chrome OS, c&#8217;est très tendance et vous avez  juste besoin de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=228&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cela fait longtemps que vous vous posez la question, et à l&#8217;aide de notre questionnaire réalisé par de grands psychologues, vous allez enfin connaitre la réponse!</p>
<p>Ce matin, aux alentours de 5h30, vous vous levez pour allumer votre portable qui démarre sous&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> - Windows bien sûre<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google chrome OS, c&#8217;est très tendance et vous avez  juste besoin de surfer</p>
<p>Tiens, on dirait que vous n&#8217;êtes pas le seul debout à cette heure! Vous commencez à chatter sur&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a><a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; GTalk<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; MSN<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; une client multi-protocole&#8230; ah si vos amis pouvez switcher de MSN vers GTalk&#8230;</p>
<p>On vous a parlé de &#8220;keyboard cat&#8221; sur le net, vous ouvrez alors pour surfer&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Internet Explorer, c&#8217;est le meilleur<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google Chrome, c&#8217;est plus rapide</p>
<p>Vous recherchez l&#8217;info grâce à&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google évidement<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Yahoo forever<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Bing ça déchire</p>
<p>On vous parle d&#8217;un coin de paradis sur terre. Vous allez chercher l&#8217;adresse sur&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google Map<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Bing Maps</p>
<p>A votre tour, vous voulez publier vos photos de vos dernières vacances. Vous les publiez sur&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Flickr<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Windows Live<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Picasa Web Album</p>
<p>C&#8217;est le moment de vérifier vos Emails, vous allez donc sur&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Windows Live (Hotmail)<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; GMail<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a><a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Tout ça c&#8217;est &#8220;Has been&#8221;, vous êtes déjà sur Google Waves</p>
<p>Un mail vous parle de votre prochaine réunion ALT.Net. Vous vérifiez votre disponibilité sur&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Toujours Windows Live<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google Calendar</p>
<p>Ouf, quelle mâtiné ! Il est temps d&#8217;aller bosser. D&#8217;ailleurs, vous aimeriez bien changer de boulot, et vous rêvez secrètement d’être employé chez&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Microsoft rules the World!<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google c&#8217;est trop Hype!</p>
<p>A force de surfer le matin, vous allez être en retard au boulot. Votre boss vous le rappelle sur votre téléphone qui est un&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; HTC Hero/Dream ou Nexus&#8230; n&#8217;importe du moment qu&#8217;il y a Android dessus<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; HTC Touch/Diamond ou autre avec Windows Phone, c&#8217;est une valeur sûre</p>
<p>Vous voila à la fin de la journée, vous pouvez enfin rentrer chez vous et bosser sur votre projet perso OpenSource qui est hébergé sur&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Codeplex<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Google Code</p>
<p>Vous êtes tendance, et vous faites du Cloud Computing. Pour vous, la meilleure plateforme c&#8217;est&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; ASP.Net sur Windows Azure, le C# est le meilleur langage du monde<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; GWT sur GoogleApp Engine, Java reste une valeur sûre, mais vous attendez avec impatience la sortie de Noop</p>
<p>Vous en profitez pour mettre à jour votre CV. Vous utilisez pour cela&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Un bon vieux Microsoft Office, Word il n&#8217;y a que ça de vrai<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; L&#8217;avenir est sur le net, vous préférez Google Doc<br />
<a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211;  Word c&#8217;est bien, mais Office Live c&#8217;est mieux!</p>
<p>Il est déjà 1h du mat’, il faut vous coucher. Vous commencez à faire des rêves&#8230;</p>
<p><a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Noir et Blanc, en costume/cravate<br />
<a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> &#8211; Tout en couleur, avec votre T-shirt de Hippie &#8220;Geek inside&#8221;</p>
<p>Comptabilisez vos réponses, et grâce à nos algorithmes mathématiques très complexes, la science et la psychologie vont déterminer de quel côté vous vous situez!</p>
<p><span id="more-228"></span></p>
<p>Vous avez plus de <a href="http://grozeille.files.wordpress.com/2010/01/circle1.png"><img title="circle" src="http://grozeille.files.wordpress.com/2010/01/circle1.png?w=8&h=8" alt="" width="8" height="8" /></a> : c’est que Microsoft est pour vous  l&#8217;entreprise idéale. C&#8217;est pour vous synonyme de stabilité, une garantie de fiabilité mais c&#8217;est aussi une technologie toujours à la pointe.</p>
<p>Vous avez plus de <a href="http://grozeille.files.wordpress.com/2010/01/square.png"><img title="square" src="http://grozeille.files.wordpress.com/2010/01/square.png?w=8&h=8" alt="" width="8" height="8" /></a> : c&#8217;est que Google est votre idole. Jeune et dynamique, Google va selon vous révolutionner le monde informatique.</p>
<br /> Tagged: .Net, google, java, microsoft <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/228/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=228&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2010/01/17/vous-etes-plutot-microsoft-ou-google/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/circle1.png" medium="image">
			<media:title type="html">circle</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/01/square.png" medium="image">
			<media:title type="html">square</media:title>
		</media:content>
	</item>
		<item>
		<title>Google serait-il le future papa de Java?</title>
		<link>http://grozeille.com/2009/09/25/google-serait-il-le-future-papa-de-java/</link>
		<comments>http://grozeille.com/2009/09/25/google-serait-il-le-future-papa-de-java/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 08:29:13 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Blabla]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=216</guid>
		<description><![CDATA[C&#8217;est la première question que je me suis posée en lisant l&#8217;article: http://blog.developpez.com/adiguba/p8101/java/google-noop/ Ce qui est sûr, c&#8217;est que Google investi pas mal dans Java: GWT, la JVM d&#8217;Android, et maintenant Noop: http://code.google.com/p/noop/ Noop est une proposition d&#8217;un nouveau langage pour la JVM. Certains prétendent que le langage Java va mourir, qu&#8217;il est coincé et [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=216&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est la première question que je me suis posée en lisant l&#8217;article: <a href=" Une des newz qui m'a le plus secoué ce matin (et c'est pour ça que j'en parle) c'est l'annonce d'un nouveau langage pour JVM">http://blog.developpez.com/adiguba/p8101/java/google-noop/</a></p>
<p>Ce qui est sûr, c&#8217;est que Google investi pas mal dans Java: GWT, la JVM d&#8217;Android, et maintenant Noop: <a href="http://code.google.com/p/noop/">http://code.google.com/p/noop/</a></p>
<p>Noop est une proposition d&#8217;un nouveau langage pour la JVM.<br />
Certains prétendent que le langage Java va mourir, qu&#8217;il est coincé et n&#8217;évoluera plus, et que son successeur peut être Scala.<br />
Moi qui suit fan de Groovy, je suis heureux de voir que SpringSource prennent en charge son évolution ( <a href="http://www.springsource.com/products/grails">http://www.springsource.com/products/grails</a> )<br />
Bref, la JVM n&#8217;est pas prête de mourir! Les alternatives à Java se font sérieuses, et Google est maintenant de la partie!!</p>
<p>Noop se veut aussi un langage offrant le meilleur de Java, dont évidement l&#8217;API GoogleCollections: <a href="http://code.google.com/p/noop/wiki/Features#Good_stdlib">http://code.google.com/p/noop/wiki/Features#Good_stdlib</a></p>
<p>Comme je l&#8217;avais dit dans nos discutions Alt .Net, les langages ne se contentent plus d&#8217;offrir des mot-clés pour raccourcir le code, ils offrent maintenant des mot-clés pour faciliter l&#8217;utilisation de Framework:<br />
- les mot-clés de Linq facilite l&#8217;utilisation du framework du même nom<br />
- des mot-clés permettent d&#8217;utiliser aisément le framework de parallélisation PFX: <a href="http://prismwiki.codegear.com/en/Asynchronous_Statements">http://prismwiki.codegear.com/en/Asynchronous_Statements</a><br />
- d&#8217;autres mot-clés permettent de faire du &#8220;TDD&#8221;: <a href="http://en.wikipedia.org/wiki/Spec_Sharp">http://en.wikipedia.org/wiki/Spec_Sharp</a></p>
<p>Google propose avec Noop des facilités de langages pour exploiter les frameworks de tests unitaires, le mocking, l&#8217;IOC, etc..</p>
<p>Alors je dis et je re-dis: Vive la JVM, vive les polyglottes et vive Google!</p>
<p>(J&#8217;en profite pour faire découvrir aussi le langage <a href="http://fandev.org/">http://fandev.org/</a> qui est très orienté multilangages et Web)</p>
<br /> Tagged: .Net, google, java <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=216&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2009/09/25/google-serait-il-le-future-papa-de-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
		<item>
		<title>GUICE : un framework de DI pour Java</title>
		<link>http://grozeille.com/2008/12/27/guice-un-framework-de-di-pour-java/</link>
		<comments>http://grozeille.com/2008/12/27/guice-un-framework-de-di-pour-java/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 23:39:16 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[IOC]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=130</guid>
		<description><![CDATA[Je pense que la Dependency Injection est une valeur fondamentale à l&#8217;écriture d&#8217;un programme, et je l&#8217;utilise tous les jours. Je suis un adorateur (voir expert) de Spring/Spring.Net, et j&#8217;affectionne l&#8217;écriture de la structure du programme en XML. Mais cette technique est très largement contestée : nécessite un éditeur XML &#8220;intelligent&#8221; (ce qui est le [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=130&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Je pense que la <a href="http://en.wikipedia.org/wiki/Dependency_injection">Dependency Injection</a> est une valeur fondamentale à l&#8217;écriture d&#8217;un programme, et je l&#8217;utilise tous les jours.<br />
Je suis un adorateur (voir expert) de <a href="http://www.springsource.org/about">Spring</a>/<a href="http://www.springframework.net/">Spring.Net</a>, et j&#8217;affectionne l&#8217;écriture de la  structure du programme en XML.</p>
<p>Mais cette technique est très largement contestée :</p>
<ul>
<li>nécessite un éditeur XML &#8220;intelligent&#8221; (ce qui est le cas grâce à  <a href="http://springide.org/blog/">SpringIDE</a>) pour la complétion de la structure mais aussi des types.</li>
<li>interprétation au Runtime, et donc erreurs potentielles découvertes  qu&#8217;au dernier moment.</li>
<li>verbeux</li>
<li>mauvaises performance (lecture du XML&#8230;)</li>
</ul>
<p>Ça a aussi ses avantages, c&#8217;est pour ça que je reste adorateur de  Spring, mais ce n&#8217;est pas le sujet&#8230;</p>
<p>J&#8217;ai déjà souvent eu ce débat avec <a href="http://codingly.com/">Romain</a> dans le monde .Net (voir  <a class="moz-txt-link-freetext" href="http://ninject.org/">http://ninject.org</a>).<br />
Je connais très mal les alternatives à Spring dans le monde Java, mais  je connais celle de Google : <a href="http://code.google.com/p/google-guice/">Guice</a>.</p>
<p>Voici un <a href="http://www.ibm.com/developerworks/library/j-guice.html?ca=dgr-jw22Guice&amp;S_tact=105AGX59&amp;S_CMP=GRsitejw22">tuto/introduction très convaincante</a>. <a class="moz-txt-link-freetext" href="http://www.ibm.com/developerworks/library/j-guice.html?ca=dgr-jw22Guice&amp;S_tact=105AGX59&amp;S_CMP=GRsitejw22"></a></p>
<p>Pour ceux qui ne connaissent pas Ninject ou Guice, voici un peu le principe :<br />
Au lieu de rédiger un XML, on utilise massivement les annotations  (attributs en .Net) pour spécifier les injections. Ceci est aussi  possible en Spring (technique dite <code>Autowire</code>) mais l&#8217;utilisation du XML reste nécessaire  pour personnaliser plus finement les dépendances entre instances.<br />
Dans le cas de Guice, au lieu de rédiger un XML, on créer une classe <code>Module</code> qui réalise le mapping entre une interface et la classe  concrète à instancier/injecter.<br />
On peut spécifier bien plus de chose que cela, mais je vous laisse  lire l&#8217;article pour découvrir par vous même.</p>
<p>Pour ceux qui veulent suivre le débat &#8220;Spring vs Guice&#8221; ou &#8220;XML vs Code&#8221;, voici le point de vue de <a href="http://code.google.com/p/google-guice/wiki/SpringComparison">la documentation officielle de Guice</a>.</p>
<br /> Tagged: .Net, IOC, java, spring <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=130&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/12/27/guice-un-framework-de-di-pour-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
		<item>
		<title>Encore un nouveau langage : FAN</title>
		<link>http://grozeille.com/2008/12/27/encore-un-nouveau-langage-fan/</link>
		<comments>http://grozeille.com/2008/12/27/encore-un-nouveau-langage-fan/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 22:58:24 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=120</guid>
		<description><![CDATA[En lisant un article d&#8217;introduction du langage FAN je trouve intéressant que ce dernier soit compatible .NET et Java. En ce moment, .Net se voit enrichir de nombreux langages, aussi bien statiques (F# par exemple) que dynamiques (Iron Python). Les langages &#8220;standards&#8221; étant C#, VB.Net et C++/CLI. Quand on développe sur la JVM, le langage [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=120&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En lisant un article d&#8217;introduction du <a href="http://www.fandev.org/">langage FAN</a> je trouve intéressant que ce dernier soit compatible .NET et Java.<br />
En ce moment, .Net se voit enrichir de nombreux langages, aussi bien statiques (<a href="http://www.programmez.com/actualites.php?id_actu=3985">F#</a> par exemple) que dynamiques (<a href="http://www.codeplex.com/IronPythonStudio">Iron Python</a>). Les langages &#8220;standards&#8221; étant C#, VB.Net et C++/CLI.<br />
Quand on développe sur la JVM, le langage &#8220;standard&#8221; reste Java. Mais cela ne veut pas dire qu&#8217;on a pas le choix : <a href="http://www.scala-lang.org/">Scala</a>, <a href="http://www.jython.org/Project/">Jython</a>, <a href="http://groovy.codehaus.org/">Groovy</a>&#8230;</p>
<p><img class="alignnone size-full wp-image-121" title="aa496123net_logoen-usmsdn10" src="http://grozeille.files.wordpress.com/2008/12/aa496123net_logoen-usmsdn10.gif?w=630" alt="aa496123net_logoen-usmsdn10"   /> + <img class="alignnone size-medium wp-image-122" title="java_logo" src="http://grozeille.files.wordpress.com/2008/12/java_logo.gif?w=68&h=109" alt="java_logo" width="68" height="109" /> = FAN ?</p>
<p><span id="more-120"></span>Mais le petit nouveau, FAN, cible aussi bien la JVM que la CLR.Net. Certes, les 2 mondes possèdent des concepts similaires, mais aussi très différents et qui risque de ne pas être possible d&#8217;exposé dans ce langage.<br />
Ceci dit, la plupart des concepts sont haut-niveaux, et peuvent donc générer un bytecode en utilisant des concepts plus simples et bas niveau, comme un <code>foreach</code> peut être écrit sous la forme d&#8217;un <code>for</code>&#8230;</p>
<p>En l&#8217;occurrence, FAN introduit un concept déjà existant en C# mais absent en Java : les Nullables.<br />
C&#8217;est l&#8217;objet de <a href="http://www.jroller.com/scolebourne/date/20081023">cet article</a>.</p>
<p>De nombreuses autres sucreries du langages C# sont introduites dans le JVM à l&#8217;aide de FAN comme les Closures. Je vous laisse découvrir tout ça sur <a href="http://www.fandev.org/doc/docLang/index.html">la documentation officielle</a>.<br />
Je vous invites aussi à lire <a href="http://www.jroller.com/scolebourne/date/20080612">cet autre article d&#8217;introduction</a> qui expose beaucoup d&#8217;avantages.</p>
<p>Pour ma part, j&#8217;adore :</p>
<ul>
<li> gestion des <code>nullable</code></li>
<li>valeur par défaut des arguments des méthodes (ce qui évite plein de surcharge inutile)</li>
<li><code>property</code> implicite à la C#, pour toujours moins de code à écrire</li>
<li><code>closure</code> en Java</li>
<li>pas de <code>;</code> superflux en fin de ligne</li>
<li>l&#8217;équivalent du mot clé <code>dynamic</code> du C#4 avec <code>object-&gt;variable</code> !</li>
<li>mot clé <code>once</code> qui évite de gérer manuellement le caching du résultat (genre : <code>if(truc == null) truc = new Truc(); return truc;")</code></li>
<li>l&#8217;écriture des listes/maps et l&#8217;écriture des instanciations &#8220;à la JSON&#8221;</li>
</ul>
<p>A noter aussi une gestion de &#8220;package&#8221; propre au langage, et qui n&#8217;expose pas toute l&#8217;API Java (JDK). Je n&#8217;ai pas trouvé d&#8217;infos concernant .Net à ce sujet, mais ce langage se veut vraiment comme une union des 2 mondes.</p>
<p>En attendant un pluggin Eclipse ou un addin VisualStudio Shell, ils livrent un mini IDE fort sympathique.</p>
<p><img class="alignnone size-medium wp-image-128" title="flux" src="http://grozeille.files.wordpress.com/2008/12/flux.png?w=300&h=215" alt="flux" width="300" height="215" /><img src="/DOCUME~1/mathias/LOCALS~1/Temp/moz-screenshot-1.jpg" alt="" /></p>
<p>Et vous? Qu&#8217;en pensez-vous?</p>
<br /> Tagged: .Net, java <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=120&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/12/27/encore-un-nouveau-langage-fan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2008/12/aa496123net_logoen-usmsdn10.gif" medium="image">
			<media:title type="html">aa496123net_logoen-usmsdn10</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2008/12/java_logo.gif?w=188" medium="image">
			<media:title type="html">java_logo</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2008/12/flux.png?w=300" medium="image">
			<media:title type="html">flux</media:title>
		</media:content>
	</item>
		<item>
		<title>Appeler du Java depuis .Net</title>
		<link>http://grozeille.com/2008/05/08/appeler-du-java-depuis-net/</link>
		<comments>http://grozeille.com/2008/05/08/appeler-du-java-depuis-net/#comments</comments>
		<pubDate>Thu, 08 May 2008 18:34:15 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[interop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jni]]></category>

		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=53</guid>
		<description><![CDATA[Deux mondes s&#8217;affrontent: Java et .Net. Chacun choisi son camp, ou choisi les deux&#8230; moi j&#8217;ai la double nationalité Mais quand les deux mondes doivent alors communiquer? Je fais l&#8217;interprète. Voila le topo: J&#8217;ai une application .Net qui a besoin de manipuler des classes Java, et pour se faire je passe par C++/CLI: comment avoir [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=53&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Deux mondes s&#8217;affrontent: Java et .Net. Chacun choisi son camp, ou choisi les deux&#8230; moi j&#8217;ai la double nationalité <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Mais quand les deux mondes doivent alors communiquer? Je fais l&#8217;interprète. Voila le topo:<br />
J&#8217;ai une application .Net qui a besoin de manipuler des classes Java, et pour se faire je passe par <a href="http://en.wikipedia.org/wiki/C%2B%2B/CLI">C++/CLI</a>: comment avoir un pied dans du .Net et un autre dans du natif C++.<br />
<span id="more-53"></span><br />
L&#8217;avantage de C++/CLI (<a href="http://en.wikipedia.org/wiki/Common_Language_Infrastructure">Common Language Infrastructure</a>) c&#8217;est qu&#8217;on peut mixer du code managé et non-managé. Je peux donc compiler un assembly .Net en C++, qui lui fait appelle à du pure code C++ natif. Ici en l&#8217;occurrence j&#8217;utilise <code>"jni.h"</code> pour communiquer avec la JVM à l&#8217;aide de <code>jvm.dll</code>.</p>
<p>Rentrons dans le vif du sujet: qu&#8217;est-ce que ça donne du coté de mon application C#:<br />
<pre class="brush: csharp;">
// on démarre la JVM avec mes bons arguments
MathiasJniCpp.JVMWrapper.InitJvm(new String[] { &quot;-Djava.class.path=Mathias.Jni.Java.jar&quot; });

// on créer un objet .Net qui wrappe l'objet Java
// en C++/CLI, le destructeur des classes CLI sert de méthode &quot;Dispose&quot;
using (MathiasJniCpp.MyJavaWrapper javaObject = new MathiasJniCpp.MyJavaWrapper())
{
// faire mumuse avec...
javaObject.People = &quot;Mathias&quot;;
Console.WriteLine(javaObject.SayHello());
}

// on libère la JVM
JVMWrapper.ReleaseJvm();
</pre></p>
<p><code>MathiasJniCpp</code> c&#8217;est le namespace de mon assembly c++/cli, j&#8217;en reparlerai plus tard.<br />
On voit que je manipule une classe JVMWrapper qui me permet de charger une JVM (et de la libérer). J&#8217;utilise aussi une classe .Net codé en C++/CLI. En fait, je l&#8217;utilise comme un classe C#, ou VB.net etc. C&#8217;est une classe &#8220;classique&#8221; .Net avec des méthodes et des propriétés.</p>
<p>Point intéressant à souligner: pourquoi utiliser <code>using</code>?<br />
Pour rappelle, il y a des mots-clefs en C# très lié au Framework (comme <code>foreach</code>) et <code>using</code> en fait partie. Il prend les objets qui implémente <code>IDisposable</code> et fait appelle à la méthode <code>Dispose()</code> à la fin du bloque. Comme ça, je suis sûr de libérer la classe du coté JVM quand j&#8217;en ai plus besoin.</p>
<p>Je ne vais pas montrer tout le code, car trop long et <a href="http://www.box.net/shared/ropzl4u80o">disponible ici</a>.<br />
Mais voici un aperçu de la classe C++:<br />
<pre class="brush: cpp;">
#include &quot;jni.h&quot;
public ref class MyJavaWrapper
{
private:
  static jmethodID initMethodId;
  static jclass clazz;
  jobject obj;
public:
  /* initialisation des métadata Java/JNI, à voir plus tard */
  static void initJavaMetadata()
  { ... }

  /* une méthode de notre classe Java que l'on wrappe, expliqué aussi plus tard */
  String^ SayHello(String^ people)
  { ... }

  /* constructeur */
  MyJavaWrapper(void)
  {
    // histoire de récupérer toutes les métadatas nécessaires du coté Java
    MyJavaWrapper::initJavaMetadata();

    // construction d'une instance avec le constructeur par défaut
    this-&gt;obj = JVMWrapper::env-&gt;NewObject(MyJavaWrapper::clazz, MyJavaWrapper::initMethodId);
  }

  /* &quot;destructeur&quot; */
  virtual ~MyJavaWrapper(void)
  {
    JVMWrapper::env-&gt;DeleteLocalRef(this-&gt;obj);
  }
};
</pre><br />
<code>ref class</code> veut dire &#8220;c&#8217;est une classe .Net&#8221;. Mais&#8230; ma classe n&#8217;implémente pas <code>IDisposable</code>!! Et c&#8217;est quoi ce destructeur??<br />
Et oui: le destructeur C++ pour un objet .Net est transformé en la méthode <code>Dispose()</code> et la classe devient alors forcement <code>IDisposable</code>. Pour gérer le <code>finalize</code> <a href="http://dotnet.developpez.com/faq/cppcli/?page=syntaxe#finalizer_vs_destructor">allez voir ici</a>.</p>
<p>Je manipule le membre <code>this-&gt;obj</code> qui est tout simplement un &#8220;pointeur&#8221; sur notre objet java. En fait, c&#8217;est un <code>jobject</code> qui est un type définie dans <code>"jni.h"</code>.<br />
J&#8217;utilise la classe JVMWrapper qui me permet de communiquer avec la JVM, et je lui demande de créer un nouvel objet d&#8217;une certaine classe <code>jclass</code> avec un certain constructeur <code>jmethodID</code> et j&#8217;obtiens ainsi mon <code>jobject</code>.<br />
<em>Étant donnée que la classe et la méthode ne change pas, j&#8217;ai rendu ces données <code>static</code>.</em></p>
<p>Voyons maintenant ce que fait <code>MyJavaWrapper::initJavaMetadata();</code>:<br />
<pre class="brush: cpp;">
/* initialise les metadata du coté Java */
static void initJavaMetadata()
{
  // si les métadata ne sont pas déjà récupérées...
  if(MyJavaWrapper::clazz == NULL)
  {
    MyJavaWrapper::clazz = JVMWrapper::env-&gt;FindClass(&quot;mathias/jni/java/MyJavaClass&quot;);
    MyJavaWrapper::initMethodId = JVMWrapper::env-&gt;GetMethodID(MyJavaWrapper::clazz, &quot;&lt;init&gt;&quot;, &quot;()V&quot;);
  }
}
</pre></p>
<p>C&#8217;est la dedans que j&#8217;obtiens une fois pour toute la représentation de la classe Java <code>mathias.jni.java.MyJavaClass</code> et la représentation de la méthode <code>&lt;init&gt;</code> avec en paramètre <code>()V</code>.<br />
Pour comprend le lien avec la classe, il n&#8217;y a pas trop de problème: c&#8217;est le <a href="http://en.wikipedia.org/wiki/Fully_qualified_name">fully qualified name</a> avec des &#8216;/&#8217; au lieu des &#8216;.&#8217;.<br />
Mais en ce qui concerne la recherche d&#8217;une méthode, ça devient du charabia!!<br />
En fait, <code>&lt;init&gt;</code> est une méthode un peu spéciale: c&#8217;est un constructeur.<br />
Ensuite, on spécifie les arguments du constructeur que l&#8217;on cherche, et la on tombe sur une syntaxe barbare. Dans notre cas, on cherche le constructeur par défaut c&#8217;est à dire qui ne prend pas d&#8217;argument.<br />
Mais pour mieux comprendre la syntaxe barbare, voyons d&#8217;autres exemples de méthodes:<br />
<pre class="brush: cpp;">
JVMWrapper::env-&gt;GetMethodID(MyJavaWrapper::clazz, &quot;setPeople&quot;, &quot;(Ljava/lang/String;)V&quot;);
</pre><br />
Traduction: je cherche la méthode <code>setPeople</code> qui prend un argument de type <code>java.lang.String</code> et qui retourne <code>void</code>.<br />
Un autre exemple:<br />
<pre class="brush: cpp;">
JVMWrapper::env-&gt;GetMethodID(MyJavaWrapper::clazz, &quot;sayHello&quot;, &quot;([Ljava/lang/String;Z;)I&quot;);
</pre><br />
Traduction: je cherche la méthode <code>sayHello</code> qui prend un argument de type <code>java.lang.String[]</code> et un autre de type <code>boolean</code> et qui retourne un type <code>int</code>.</p>
<p>On retrouve cette syntaxe à beaucoup d&#8217;endroits, comme sous <a href="http://grozeille.files.wordpress.com/2008/05/eclipsejni.png">Eclipse</a> par exemple. Pour plus d&#8217;explication voir la <a href="http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/types.html">documentation officielle</a>.</p>
<p>Si l&#8217;on veut maintenant appeler une méthode Java, on récupère sa représentation tout comme on le fait avec le constructeur, puis on l&#8217;invoque sur notre instance:<br />
<pre class="brush: csharp;">
public ref class MyJavaWrapper
{
private:
  static jmethodID initMethodId;
  static jclass clazz;

  // notre représentation JNI de la méthode &quot;sayHello&quot;
  static jmethodID sayHelloMethodId;

  jobject obj;
public:
  /* initialisation des métadata Java/JNI */
  static void initJavaMetadata()
  { 
    /* initialisation de la classe et du constructeur, comme vu précédemment 
    [...]  */

    // on récupère la représentation de &quot;sayHello&quot;
    JVMWrapper::env-&gt;GetMethodID(MyJavaWrapper::clazz, &quot;sayHello&quot;, &quot;(Ljava/lang/String;)Ljava/lang/String&quot;);
  }

  /* sur l'appelle de cette méthode .Net, on fait appelle à la méthode Java */
  String^ SayHello(String^ people)
  {
    // j'utilise une classe spéciale pour convertir ma String^ .net en natif ou Java
    StringConverter peopleStringConverter(people);
    jstring jPeople = peopleStringConvert.toJava();

    // appelle de la méthode Java, j'ai le droit de caster en jstring car c'est un sous-type de jobject
    jstring jResult = (jstring)JVMWrapper::env-&gt;CallObjectMethod(this-&gt;obj, sayHelloMethodId, jPeople);

    // conversion du type Java en .Net
    StringConverter resultStringConvert(jResult);
    return resultStringConvert.toDotnet();
  }
};
</pre></p>
<p>Voila, maintenant vous savez:</p>
<ul>
<li>obtenir la représentation d&#8217;une classe Java</li>
<li>obtenir la représentation d&#8217;une méthode d&#8217;une classe</li>
<li>créer une instance d&#8217;une classe Java</li>
<li>invoker des méthodes sur une instance</li>
</ul>
<p>En conclusion:<br />
l&#8217;API JNI c&#8217;est un peux comme utiliser la réflection. Ça a donc des conséquences en termes de performance. Pour information, créer 10000 objet en java prend <em>625ms</em>, en pure .net ça donne <em>46ms</em> et en .Net-&gt;JNI-&gt;Java ça donne <em>2.687s</em>.<br />
L&#8217;API JNI peut sembler barbare au début, mais on s&#8217;y fait <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  et puis il y a <a href="http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/functions.html#wp20949">la doc</a>, alors <a href="http://en.wikipedia.org/wiki/RTFM">RTFM</a> <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>C++/CLI c&#8217;est de la bombe en termes d&#8217;interop. C&#8217;est le pont parfait entre le monde .Net et le natif.<br />
L&#8217;inconvénient c&#8217;est que la syntaxe C++ est lourde. Et elle l&#8217;est d&#8217;autant plus en C++/CLI car il faut y ajouter les spécificités .Net, et il faut aussi distinguer une instance managée et non-managée, et tout ça passe par de nouveau symboles/mots-clefs.<br />
Les conversions de types entre les deux mondes ne sont pas faites implicitement, et il faut souvent jongler pour avoir le bon type. J&#8217;ai par exemple eu des problèmes lors des conversions de String avec JNI: il faut convertir la <code>String^</code> .net en <code>char*</code> natif pour enfin construire une <code>jstring</code>. Les conversions ont été le plus pénible dans l&#8217;histoire.</p>
<p>Enfin, voici le projet complet: <a href="http://www.box.net/shared/ropzl4u80o">Mathias.Jni.CSharp.zip</a><br />
Un petit rappel des liens utiles:</p>
<ul>
<li><a href="http://dotnet.developpez.com/faq/cppcli/">http://dotnet.developpez.com/faq/cppcli/</a></li>
<li><a href="http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html">http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/grozeille.wordpress.com/53/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/grozeille.wordpress.com/53/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=53&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/05/08/appeler-du-java-depuis-net/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
		<item>
		<title>A la conquête du Web 3.0</title>
		<link>http://grozeille.com/2008/05/02/a-la-conquete-du-web-30/</link>
		<comments>http://grozeille.com/2008/05/02/a-la-conquete-du-web-30/#comments</comments>
		<pubDate>Fri, 02 May 2008 22:15:09 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=51</guid>
		<description><![CDATA[J&#8217;ai eu une discutions intéressante ce midi au sujet du buzz en ce moment: Adobe open-source Flash! Je vois ça comme un premier pas vers la conquête du Web 3.0. Une guerre déjà entamé entre Adobe, Microsoft et le monde libre. Haha, je sais que le terme Web 2.0 fait couler beaucoup d&#8217;encre (ou abîme [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=51&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai eu une discutions intéressante ce midi au sujet du buzz en ce moment: <a href="http://www.adobe.com/openscreenproject/">Adobe open-source Flash</a>! Je vois ça comme un premier pas vers la conquête du Web 3.0. Une guerre déjà entamé entre Adobe, Microsoft et le monde libre.<br />
<span id="more-51"></span><br />
Haha, je sais que le terme <em><a href="http://fr.wikipedia.org/wiki/Web_2.0">Web 2.0</a></em> fait couler beaucoup d&#8217;encre (ou abîme les claviers) mais moi je le prend du point de vue du développeur:</p>
<p>Au début, il y avait le néant&#8230; puis l&#8217;informaticien inventa la page HTML! Dans sa foulé il inventa le Javascript&#8230; puis les applets Java&#8230; pas de chance, l&#8217;informaticien était en avance sur son temps&#8230;</p>
<p>Puis le Web s&#8217;est vu enrichir de nouveau média (Youtube, Deezer, etc.) Toute cette magie est possible grâce aux génies de <a href="http://fr.wikipedia.org/wiki/Macromedia">Macromédia</a> inventeurs du Flash! (racheté par la suite par Adobe)<br />
Le web est devenu plus beau, plus fun&#8230; et plus lourd tout de même.<br />
Flash est aujourd&#8217;hui la techno incontesté pour les médias riches. Elle était aussi en avance sur son temps: les sites entièrement Flash était encore trop lourd pour les débits de l&#8217;époque. Ce n&#8217;est aujourd&#8217;hui plus un problème, mais si tous les sites ne sont pas en Flash, je l&#8217;explique pour plusieurs raisons:<br />
Premièrement, cette technologie était boudé par le monde Linux qui se retrouvé avec un produit propriétaire, des versions en retard par rapport à celles sur Windows, et même souvent bugguées.<br />
Les adeptes des standards W3C ne voient pas non plus Flash d&#8217;un très bon œil et préfère se concentrer sur la norme HTML+<a href="http://fr.wikipedia.org/wiki/ECMAScript">ECMASCRIPT</a> (autrement dit: Javascript).</p>
<p>C&#8217;est la que le Web 2.0 atteint son paroxysme: les sites Web d&#8217;aujourd&#8217;hui exploitent à fond le Javascript (<a href="http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML">Ajax</a>, <a href="http://code.google.com/webtoolkit/">GWT</a>, <a href="http://script.aculo.us/">Scriptaculous</a>, etc.). Cela donne des pages Web plus riches, plus interactives, plus animées, et plus légères!<br />
Car oui, le bon vieux HTML avec un peu de Javascript c&#8217;est plus léger que du Flash. Certains dénonceront simplement les mauvais codeurs ActionScript qui sont souvent des graphistes reconvertis et qui font des choses non-optimisés&#8230;<br />
Ceci dit, cette performance n&#8217;est possible que grâce aux <a href="http://www.apple.com/safari/">effort fournis par les navigateurs Web</a> qui supportent <a href="http://www.korben.info/un-coup-de-boost-pour-firefox-3.html">de mieux en mieux</a> le Javascript.<br />
Mais voila, les vidéos ou encore d&#8217;autres choses ne sont pas possibles en HTML+Javascript aujourd&#8217;hui, et c&#8217;est pourquoi que Flash est encore très utilisé (surtout concernant la vidéo).</p>
<p>C&#8217;est la que Microsoft riposte avec <a href="http://silverlight.net/">Silverlight</a> et ça va faire mal.<br />
Imaginez: un plugin similaire à Flash, mais plus performant (<a href="http://fr.wikipedia.org/wiki/Windows_Presentation_Foundation">WPF</a> utilisant gracieusement DirectX) avec des langages plus faciles à coder (C#, XAML, etc.) et des outils de développement/design très soignés (la série des <a href="http://www.microsoft.com/expression/products/overview.aspx?key=blend">Expression</a>).</p>
<p>Mais la communauté pro-libre/pro-standard n&#8217;en reste pas la: <a href="http://en.wikipedia.org/wiki/HTML_5">HTML5</a> est censé combler les lacunes vis-à-vis de Flash ou Silverlight.</p>
<p>Sun veut aussi être de la partie, après l&#8217;échec des applets, il tente nous proposer <a href="https://openjfx.dev.java.net/downloads.html">JavaFX</a>.<br />
Les principales raisons de l&#8217;échec des applets sont:<br />
- Java c&#8217;est gros et lourd à télécharger&#8230; imaginez un JRE de 30mo à l&#8217;époque des 56k!<br />
- Ce <del datetime="00">n&#8217;est</del> n&#8217;était pas non plus très performant, surtout en matière d&#8217;affichage.<br />
- Il n&#8217;existe aucun outil pour graphiste pour faire des applets! C&#8217;est la que Macromédia avec Flash avait marqué un point.<br />
- Ce <del datetime="00">n&#8217;est</del> n&#8217;était pas libre&#8230; donc difficile à faire adopter par la communauté des développeurs.</p>
<p>Mais Sun propose des solutions:</p>
<ul>
<li><a href="http://weblogs.java.net/blog/enicholas/archive/2006/09/java_browser_ed.html">Java Kernel</a>: le principe est simple, il faut que le téléchargement d&#8217;une JRE soit négligeable (tout comme Flash). Pour ce faire, l&#8217;utilisateur télécharge une version &#8220;minimale&#8221; de la JRE, qui téléchargera des paquets supplémentaires seulement s&#8217;il y en a besoin.</li>
<li>Java2D/Swing <a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/#Java_2D">plus performant</a>, ainsi que l&#8217;accélération avec DirectX (elle existait depuis peux de temps, mais désactivé par défaut car trop buggué). Cela permet aussi des effets comme la transparence etc.</li>
<li><a href="http://www.cnettv.com/9742-1_53-27434.html">JavaFX</a>: ou comment créer un langage de description d&#8217;interface, pour créer plus simplement des animations etc.</li>
<li>Java est <a href="http://openjdk.java.net/">open-source</a>: à quand Java installé par défaut sous Linux? (Même si c&#8217;est maintenant un <a href="http://openjdk.java.net/install/#ubuntu">paquet officiel d&#8217;Ubuntu</a>)</li>
</ul>
<p>Le seul hick qui va faire très très mal: toujours pas d&#8217;outil puissant pour les graphistes.<br />
On peut aussi se demander pourquoi avoir inventer un n-ième langage de script, là où tout le monde optent pour le XML comme descripteur d&#8217;interface.</p>
<p>On remarque que &#8220;Open-source&#8221; est maintenant synonyme de &#8220;standard&#8221;, et ça Adobe l&#8217;a compris. Fort se sa popularité, l&#8217;ouverture forcement va booster son engouement.<br />
Microsoft n&#8217;est pas en reste dans ce domaine: depuis son alliance avec <a href="http://www.novell.com/home/index.html">Novell</a>, ils travaillent tous deux pour promouvoir <a href="http://www.mono-project.com/Main_Page">.Net sous Linux</a> même si l&#8217;équivalent à Silverlight en libre, <a href="http://www.mono-project.com/Moonlight">Moonlight</a>, est encore loin de <a href="http://www.youtube.com/watch?v=qRSO7p0HAIw&amp;feature=related">voir le jour</a>&#8230;<br />
On pouvait pointer du doigt le manque de <em>sérieux</em> en matière de développement avec ActionScript, mais avec <a href="http://www.adobe.com/products/flex/media/flexapp/">Flex</a> ce n&#8217;est plus vrai.</p>
<p>Avec toutes ces technos, on se demande si le navigateur ne servira plus qu&#8217;a charger un plugin Flash/Java/Silverlight, et déléguera le travail de rendu à ceux la. <a href="http://osnews.com/story/19699/Mozilla-Warns-of-Flash-Silverlight-Agenda">Mozilla sonne l&#8217;alarme</a> et explique l&#8217;importance de HTML5.</p>
<p>Les paries sont lancés:<br />
Les prochains sites-web, en Flash? HTML5+Javascript? Silverlight/Moonlight? JavaFX?</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/grozeille.wordpress.com/51/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/grozeille.wordpress.com/51/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&#038;blog=173450&#038;post=51&#038;subd=grozeille&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/05/02/a-la-conquete-du-web-30/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
	</channel>
</rss>
