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

<channel>
	<title>Blog Xebia France &#187; Google</title>
	<atom:link href="http://blog.xebia.fr/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.fr</link>
	<description>J2EE, Agilité et SOA</description>
	<lastBuildDate>Thu, 09 Sep 2010 07:48:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/08/31/revue-de-presse-xebia-174/</link>
		<comments>http://blog.xebia.fr/2010/08/31/revue-de-presse-xebia-174/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 05:48:06 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Brevet]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[java7]]></category>
		<category><![CDATA[Jdk7]]></category>
		<category><![CDATA[rabbitmq]]></category>
		<category><![CDATA[SpringSource]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=5303</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité  éditeurs / SSII

Sortie de RabbitMQ 2.0

Le coin de la  technique

Gestion automatique des ressources dans Java7 (ARM)

Evènements  de notre communauté en France et à l'étranger

Google et les brevets

Actualité  éditeurs / SSII
Sortie de RabbitMQ 2.0
La sortie de la version 2.0 du serveur [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
<em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Actualité  éditeurs / SSII</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/31/revue-de-presse-xebia-174/#SortiedeRabbitMQ">Sortie de RabbitMQ 2.0</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/31/revue-de-presse-xebia-174/#Gestionautomatiquedesressource">Gestion automatique des ressources dans Java7 (ARM)</a></li>
</ul>
<p><strong>Evènements  de notre communauté en France et à l'étranger</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/31/revue-de-presse-xebia-174/#Googleetlesbrevets">Google et les brevets</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3>
<h4><a name="SortiedeRabbitMQ"></a>Sortie de RabbitMQ 2.0</h4>
<p>La sortie de la version 2.0 du serveur de messaging <a href="http://blog.xebia.fr/2010/02/23/amqp-une-alternative-a-jms/" title="AMQP" >AMQP</a> RabbitMQ vient d'être annoncée <a href="http://www.rabbitmq.com/blog/2010/08/27/growing-up/" title="ici" >ici</a>.<br />
Cette release majeure vient avec une refonte importante et son lot de nouveautés :</p>
<ul>
<li>Une refonte de la gestion de la persistence permettant une alternative au moteur de persistence embarqué. Il sera possible de développer un support pour une base de données relationelle ou NoSQL ou tout autre data store.</li>
<li>Le support de différents protocoles de messaging : AMQP (0-8 et <a href="http://www.rabbitmq.com/blog/2010/08/04/rabbitmq-and-amqp-0-9-1/" title="0-9-1" >0-9-1</a>), <a href="http://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol" title="XMPP" >XMPP</a>, <a href="http://stomp.codehaus.org/Protocol" title="STOMP" >STOMP</a>, HTTP, SMTP... Il sera aussi possible d'ajouter de nouveaux protocoles à l'aide d'extensions. </li>
<li>La mise en place d'une infrastructure ayant pour but de simplifier le développement d'outils pour la gestion et le monitoring de RabbitMQ.</li>
<li>Une amélioration de la gestion des plugins (il n'est plus nécessaire de compiler les plugins, une version pré-compilée peut être directement chargée par RabbitMQ).</li>
</ul>
<p>SpringSource qui a récemment racheté RabbitMQ (nous vous en avions parlé <a href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#RabbitMQrachetparSpringSource" title="ici" >ici</a>) propose de son côté un template reprenant les principes des templates jdbc, hibernate, jms ou encore LDAP encapsulant le client Java d'AMQP. Les utilisateurs habitués à <a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/core/JmsTemplate.html" title="JmsTemplate" >JmsTemplate</a> retrouveront donc leurs repères en utilisant l'<a href="http://static.springsource.org/spring-amqp/docs/1.0.x/api/org/springframework/amqp/core/AmqpTemplate.html" title="AmqpTemplate" >AmqpTemplate</a> du projet <a href="http://www.springsource.org/spring-amqp" title="spring AMQP" >spring AMQP</a>.</p>
<p>SpringSource/VMWare continue donc de faire évoluer son portefeuil de produits avec cette évolution majeure de RabbitMQ, qu'il considère comme une pièce essentielle à sa stratégie de développement du Cloud Computing (voir <a href="http://blog.springsource.com/2010/04/13/springsource-acquires-rabbitmq/" title="cet article" >cet article</a> de Rod Johnson).</p>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="Gestionautomatiquedesressource"></a>Gestion automatique des ressources dans Java7 (ARM)</h4>
<p>Java7 suit son petit bonhomme de chemin sans qu'on ait encore une bonne visibilité sur la date de sortie officiel. Le <a href="http://download.java.net/jdk7/" title="build 105" >build 105</a> de la version actuelle propose une nouvelle fonctionnalité très intéressante qui devrait facilité la vie de chaque développeur: <a href="http://blogs.sun.com/darcy/entry/project_coin_updated_arm_spec" title="lAutomatic Resource Management" >l'<em>Automatic Resource Management</em></a>. </p>
<p>L'idée, proposée par Joshua Bloch depuis quelques années déjà, consiste à améliorer la fermeture des ressources sous la forme d'une clause <code>try-with-resources</code>. Actuellement lorsqu'on manipule une ressource, par exemple un <code>InputStream</code>, la façon la plus propre ressemble à ceci:</p>
<div class="syntax_hilite">
<div id="java-3">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> copyFile<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">File</span></a> in, <a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">File</span></a> out<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AFileInputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileInputStream</span></a> fis = <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AFileOutputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileOutputStream</span></a> fos = <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;fis = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileInputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileInputStream</span></a><span style="color: #66cc66;">&#40;</span>in<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp;fos= <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileOutputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileOutputStream</span></a><span style="color: #66cc66;">&#40;</span>out<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #808080; font-style: italic;">// Lire le fichier in et écrire dans le out</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;...<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>&nbsp; <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Exception</span></a> e<span style="color: #66cc66;">&#41;</span>&nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;...&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; close<span style="color: #66cc66;">&#40;</span>fis<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; close<span style="color: #66cc66;">&#40;</span>fos<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></p>
<p><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #993333;">void</span> close<span style="color: #66cc66;">&#40;</span>Closeable closeable<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>closeable != <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;closeable.<span style="color: #006600;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AIOException+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">IOException</span></a> e<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>...<span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Ce code devient vite très verbeux et répetitif car beaucoup de vérifications doivent être faites pour s'assurer de la possibilité de fermer la ressource. La solution pour simplifier cela est de déléguer la fermeture du flux à l'aide du <code>try</code>:</p>
<div class="syntax_hilite">
<div id="java-4">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> copyFile<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">File</span></a> file<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AFileInputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileInputStream</span></a> fis=<span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileInputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileInputStream</span></a><span style="color: #66cc66;">&#40;</span>in<span style="color: #66cc66;">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AFileOutputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileOutputStream</span></a> fos=<span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileOutputStream+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileOutputStream</span></a><span style="color: #66cc66;">&#40;</span>out<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #808080; font-style: italic;">// Lire le fichier in et écrire dans le out</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;...<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Le code gagne énormément en visibilité, les tests pour savoir si la ressource est <code>null</code> ou si la fermeture s'est bien déroulée sont gérés en interne de la JVM. A noter que pour être fermées les ressources devront étendre une nouvelle interface <code><a href="http://download.java.net/jdk7/docs/api/java/lang/AutoCloseable.html" title="AutoCloseable" >AutoCloseable</a></code>.</p>
<p>S'il existe un certain consensus autour de l'utilité de cette évolution, il demeure encore un petit débat sur la partie <code>catch</code> des exceptions. Sans rentrer dans les détails, les exceptions levées pendant la fermeture d'une ressource annihilent celles levées dans le bloc <code>try</code>, ce qui en général est préférable mais du coup peut aussi masquer des exceptions importantes pour l'analyse du problème.</p>
<h3><a name="EvnementsdenotrecommunautenFra"></a>Evènements  de notre communauté en France et à l'étranger</h3>
<h4><a name="Googleetlesbrevets"></a>Google et les brevets</h4>
<p>Semaine chargée pour Google:</p>
<ul>
<li>InfoQ <a href="http://www.infoq.com/news/2010/08/h264-free" title="nous annonce" >nous annonce</a> que le MPEG LA a décidé de continuer à ne pas réclamer de royalties pour les videos encodées en H.264 et distribuées gratuitement aux utilisateurs. Seules les plateformes vendant des vidéos sont, elles, toujours soumises à taxation. C'est donc une réponse à Google qui avait il y a quelques temps annoncé WebM, un codec vidéo semblable au H.264 mais plus libre et débarrassé des problèmes de brevets et de royalties qui entravent ce dernier. Si InfoQ ne voit pas trop de problèmes à continuer d'utiliser H.264, ce n'est pas du tout l'avis de <a href="http://en.wikipedia.org/wiki/Mike_Shaver" title="Mike Shaver" >Mike Shaver</a> ingénieur haut gradé chez Mozilla et <a href="http://shaver.off.net/diary/2010/08/27/free-as-in-smokescreen/" title="qui rappelle" >qui rappelle</a> que les logiciels permettant de produire ou de consommer ces vidéos devront eux toujours s'acquitter d'une licence. La bataille entre WebM et H.264 ne fait donc que commencer.</li>
<li>Ensuite, c'est <a href="http://fr.wikipedia.org/wiki/Paul_Allen" title="Paul Allen" >Paul Allen</a>, le co-fondateur de Microsoft, qui <a href="http://www.numerama.com/magazine/16620-brevets-onze-geants-du-web-poursuivis-par-le-cofondateur-de-microsoft.html" title="attaque Google et nombre de ses petits camarades" >attaque Google et nombre de ses petits camarades</a> (AOL, Yahoo, Facebook) pour avoir enfreint 4 brevets détenus par sa compagnie "Interval Licensing". Le blog <em>Digits</em> du Wall Street Journal <a href="http://blogs.wsj.com/digits/2010/08/27/the-paul-allen-suit-a-look-at-the-patents/" title="sest pench sur 2 de ces brevets" >s'est penché sur 2 de ces brevets</a>. Nous vous déconseillons fortement la lecture de son analyse si vous avez réalisé quoi que ce soit dans l'informatique ces 10 dernières années. En effet, vous risquez de ne plus trouver le sommeil en vous rendant compte que vous enfreignez sans doutes, vous aussi, nombre de brevets !</li>
<li>Et pour finir sur Google et les brevets, vous vous souvenez des récentes poursuites engagées par Oracle concernant Java et Android. Google vient de riposter, <a href="http://googlecode.blogspot.com/2010/08/update-on-javaone.html" title="en annoncant" >en annoncant</a> qu'aucun de ses employés ne participera à <a href="http://en.wikipedia.org/wiki/JavaOne" title="JavaOne" >JavaOne</a> <a href="http://www.oracle.com/us/javaonedevelop/062264.html" title="cette année" >cette année</a>. Pour ceux qui voulaient échanger avec les employés de Google, il semble que c'est plus tard dans l'année, à Devoxx, <a href="http://twitter.com/ecspike/status/22288635610" title="qu'il faille se rendre" >qu'il faille se rendre</a>. Mais rassurez vous, il y aura quand même de l'ambiance à JavaOne: James Gosling, père de Java, demande <a href="http://nighthacks.com/roller/jag/entry/let_larry_know_you_care" title="sur son blog" >sur son blog</a> à toute personne y assistant de porter un TShirt arborant le slogan "Java just Free it". Si cette idée ne risque pas trop de faire bouger Oracle, elle devrait quand même apporter sa dose de fun à l'évènement !</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/08/31/revue-de-presse-xebia-174/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172/</link>
		<comments>http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 05:47:32 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GraniteDS]]></category>
		<category><![CDATA[JQuery Mobile]]></category>
		<category><![CDATA[livre]]></category>
		<category><![CDATA[Nasa]]></category>
		<category><![CDATA[Nebula]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=5203</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité  éditeurs / SSII

Oracle poursuit Google pour violation de brevets

RIA

Bean Validation pour Flex.
Annonce de jQuery Mobile

SOA

La NASA ouvre les sources de son cloud privé

Le coin de la  technique

Continuous Delivery, le livre le plus important de 2010 ?

Actualité  éditeurs / SSII
Oracle poursuit Google [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /></p>
<p><em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Actualité  éditeurs / SSII</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172#OraclepoursuitGooglepourviolat">Oracle poursuit Google pour violation de brevets</a></li>
</ul>
<p><strong>RIA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172#BeanValidationpourFlex">Bean Validation pour Flex.</a></li>
<li><a href="http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172#AnnoncedeJQueryMobile">Annonce de jQuery Mobile</a></li>
</ul>
<p><strong>SOA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172#LaNASAouvrelessourcesdesonclou">La NASA ouvre les sources de son cloud privé</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172#ContinuousDeliverylelivreleplu">Continuous Delivery, le livre le plus important de 2010 ?</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3>
<h4><a name="OraclepoursuitGooglepourviolat"></a>Oracle poursuit Google pour violation de brevets</h4>
<p>Jeudi dernier, Oracle a lancé une action en justice contre Google pour violation de brevets quant à l'utilisation de Java pour la plateforme Android. L'information a rapidement fait le tour du web et de la twitosphère provoquant à l'encontre d'Oracle son lot de commentaires indignés, notamment dans les communautés Java et libristes (<em>On retiendra le billet peu amène de <a title="James Gosling  The shit finally hits the fan" href="http://nighthacks.com/roller/jag/entry/the_shit_finally_hits_the">James Gosling : "The shit finally hits the fan...."</a></em>).</p>
<p>Dans sa <a title="plainte" href="http://i.i.com.com/cnwk.1d/i/ne/pdfs/FINAL_Complaint.pdf?tag=mncol;txt">plainte</a>, Oracle précise que <em>"Android [...] et les appareils qui utilisent Android violent un ou plusieurs brevets parmi les suivants: 6,125,447; 6,192,476; 5,966,702; 7,426,720; RE38,104; 6,910,205; et 6,061,520"</em>. Les brevets en question portent sur l'implémentation de machines virtuelles, l'outillage et les compilateurs.<br />
Google, certainement pour garder les coudées franches, a fait le choix d'implémenter sa machine virtuelle Dalvik sans utiliser OpenJDK <em>(la version GPL2 de Java)</em>. Cette implémentation n'est pas pleinement compatible Java et est exécutée sur des terminaux mobiles. Or, lorsque Sun avait <em>"open sourcé une partie de Java"</em> au travers d'OpenJDK, les garanties d'être à l'abri d'attaques pour violation de brevet ne protégeaient que les implémentations pleinement compatibles Java pour desktop et serveur uniquement <em>(pas les implémentations pour terminaux mobiles)</em>.<br />
Pour étayer son accusation selon laquelle Google a sciemment violé les brevets relatifs à Java, Oracle avance que Google était, de longue date, au courant des brevets détenus par Sun. Eric Schmidt (CEO de Google) et Urs Hölzle (Senior VP of operations chez Google) ont en effet joué un rôle significatif dans le développement de la technologie Java lorsqu'ils étaient chez Sun.<br />
La réponse de Google à l'attaque d'Oracle <em>(au travers d'un communiqué de presse)</em> est sans surprise : Google estime que la plainte est sans fondement. D'autre part, Google considère qu'avec cette plainte, Oracle n'attaque pas seulement Google, mais aussi la communauté Open Source Java.</p>
<p>A priori, l'objectif d'Oracle n'est pas de "tuer" Android mais de profiter de son succès en imposant à Google de lui reverser une part des revenus de la plateforme. En effet, Java ME est une source non négligeable de revenus pour Sun <em>(Oracle)</em> puisque cette technologie équipe de très nombreux terminaux. Mais le succès fulgurant d'Android sur le marché des smartphones est sur le point de tarir cette source de revenus.<br />
D'autre part, Oracle souhaite sans doute envoyer un message clair quant à sa conception de l'utilisation de la technologie Java là où le silence de Sun vis à vis d'Android pouvait être perçu comme un blanc seing.</p>
<p>Ce genre d'affaire est généralement synonyme de feuilleton judiciaire à rallonge <em>(comme dans le cas emblématique de <a title="SCO vs Linux" href="http://en.wikipedia.org/wiki/SCO-Linux_controversies">SCO vs. Linux</a>)</em>. Il y a donc peu de chances que le cas Google / Oracle se règle rapidement. La complexité du dossier <em>(notamment en ce qui concerne les tenants et aboutissants techniques)</em> laisse présager de longs débats. Même si l'issu d'un procès reste incertaine Google était certainement préparé à une telle attaque <em>(et est de taille à y faire face)</em> et sa défense sera bien préparée.<br />
Tant que l'affaire ne sera pas réglée, l'ensemble de l'écosystème Android <em>(constructeurs, développeurs, utilisateurs, ...)</em> va retenir son souffle, mais l'engouement pour la plateforme Android ne devrait pas trop en pâtir. D'une part, Google continuera de développer la technologie Android. D'autre part, gageons que Google prendra ses responsabilités sur le sujet de la propriété intellectuelle et jouera son rôle de pare feux vis à vis des constructeurs équipant leurs terminaux de l'OS Android.</p>
<p>La fin d'Android est très peu probable. Oracle n'y a aucun intérêt et ce pour plusieurs raisons. D'abord parce qu'Oracle a tout intérêt à ce que Java soit présent sur le marché des smartphones. Or cette présence passe par Android, pas par Java ME et Oracle n'a, aujourd'hui, ni la volonté, ni la capacité d'innover dans ce sens. Ensuite parce que l'essor des smartphones sous Android favorise le développement d'applications utilisant des <em>backend</em> <em>(serveurs)</em> mettant en œuvre des serveurs d'applications Java et des bases de données, augmentant ainsi la taille d'un marché sur lequel Oracle se taille la part du lion. Enfin parce qu'Android réunit une large communauté Java.<br />
Il semble donc que cette affaire ne puisse avoir que deux issues :</p>
<ul>
<li>Google sera contraint à verser une partie des revenus d'Android à Oracle. Soit parce qu'Oracle aura gagné un procès, soit parce que Google aura préféré négocier un accord à l'amiable.</li>
<li>Ce sera le status quo. Soit parce qu'Oracle aura perdu un procès, soit parce qu'Oracle retirera sa plainte suite aux négociations qui vont s'entamer <em>(au cours desquels Google pourrait commencer à utiliser ses brevets comme arme de dissuasion)</em>.</li>
</ul>
<p>Ce qui est sûr, c'est que l'image de Java ne sortira pas grandie de l'initiative d'Oracle <em>(qui semble d'ores et déjà avoir perdu la bataille de l'image)</em>.</p>
<p>Pour ceux qui souhaitent approfondir le sujet, l'excellent billet de Charles Nutter <a title="My Thoughts on Oracle v Google" href="http://blog.headius.com/2010/08/my-thoughts-on-oracle-v-google.html">"My Thoughts on Oracle v Google"</a> fait longuement le tour de la question et propose des perspectives très intéressantes.</p>
<h3><a name="RIA"></a>RIA</h3>
<h4><a name="BeanValidationpourFlex"></a>Bean Validation pour Flex.</h4>
<p>Le framework <a title="GraniteDS" href="http://www.graniteds.org/confluence/pages/viewpage.action?pageId=229378">GraniteDS</a> continue à offrir des fonctionnalités riches pour Flex, en parallèle des offres de Adobe, BlazeDs (open source) et LifeCycle ES (commercial).<br />
La <a title="version 2.2 (actuellement en bêta publique)" href="http://tech.groups.yahoo.com/group/graniteds/message/7122">version 2.2 (actuellement en bêta publique)</a> ne faillit pas à la règle et amène une rafraichissante innovation : l'implémentation de la JSR 303 (BeanValidation) pour Flex. Toutes les contraintes standard de la JSR sont implémentées via des annotations AS3 et le générateur de code maison (GAS3) permet la conversions des annotations des beans Java.<br />
La validation s'appuie sur une nouvelle fonctionnalité de réflexion.<br />
Autre avancées, peut être moins spectaculaire, la prise en compte des types 'big numbers' de Java dans les sérialisations offertes par le framework.<br />
GraniteDs, dont certains avait décrété la mort à la publication de BlazeDs, est toujours bien vivant et comble, en open source,  certains manques laissés par Adobe.</p>
<h4><a name="AnnoncedeJQueryMobile"></a>Annonce de jQuery Mobile</h4>
<p>C'est une nouvelle qui va à coup sûr faire du bruit dans un monde du développement mobile déjà bouillonnant, puisque vient d'être annoncée la sortie pour la fin d'année de la version mobile du framework <a title="jQuery" href="http://jquerymobile.com/">jQuery</a>. Et ce n'est pas par la petite porte que le célèbre framework web souhaite faire son entrée, puisque contrairement à ses concurrents déclarés, tels que <a title="jQTouch" href="http://www.jqtouch.com/">jQTouch</a> ou bien <a title="Sensha Touch" href="http://www.sencha.com/products/touch/">Sensha Touch</a>, jQuery Mobile se veut être un framework JavaScript ciblant la quasi totalité des <a title="plateformes mobiles" href="http://jquerymobile.com/gbs/">plateformes mobiles</a> web actuelles (Blackberry, Windows Mobile, iOS pour l'iPhone et l'iPad, Android, Symbian, Bada, ...), et permettant de développer des interfaces riches capables de faire rougir bon nombre d'interfaces graphiques natives.</p>
<p>Avec l'avènement d'HTML5 (WebStorage, WebSockets, Vidéo, Géolocalisation, ...), du CSS3, et des navigateurs mobiles dernière génération proposant des moteurs JavaScripts performants, la guerre du web semble se trouver un nouveau terrain de bataille, et le web mobile aura sous peu toutes les armes nécessaires pour déstabiliser le business modèle à peine naissant des Markets, tel que l'iTunes App Store ou bien l'Android Market. Le marché des applications mobiles semble donc suivre la voie de son grand frère, celui des applications PC, et proposera à terme de nombreuses applications riches directement par le web.</p>
<p>L'annonce parue sur le site de jQuery Mobile indique que l'un des objectifs du framework est de pouvoir développer une application unique pour toutes les plateformes mobiles. Ce concept, ne semble pas nouveau puisque l'objectif de J2ME sorti il y a 10 ans déjà était bien de développer une solution unique, rappelez-vous: "Write Once, Run everywhere". Le slogan semble être ici: "Write Less, Do More", mais l'objectif de fond est bien le même.</p>
<p>Palm avec sa plateforme WebOS et Firefox sont déjà sponsors du projet. Bien qu'encore en développement intense, la première sortie est prévue pour fin 2010. Ce framework pourrait bien être une des grandes surprises mobile de 2010 et devenir très rapidement un incontournable pour le développement web d'applications riches pour mobile.</p>
<p>Pour en apprendre plus sur cette déclinaison de jQuery, vous pouvez suivre les liens suivants et apprécier les designs présentés :</p>
<ul>
<li><a title="Site officiel de jQuery Mobile" href="http://jquerymobile.com/">Site officiel de jQuery Mobile</a></li>
<li><a title="La device support grid de jQuery Mobile" href="http://jquerymobile.com/gbs/">La device support grid de jQuery Mobile</a></li>
<li><a title="Les designs concepts" href="http://jquerymobile.com/designs/">Les designs concepts</a></li>
</ul>
<h3><a name="SOA"></a>SOA</h3>
<h4><a name="LaNASAouvrelessourcesdesonclou"></a>La NASA ouvre les sources de son cloud privé</h4>
<p>La NASA a récemment <a title="annoncé" href=" http://www.dailyfinance.com/story/company-news/nasa-rackspace-open-source-cloud-computing/19562733/">annoncé</a> son intention d'offrir le code de son <em>cloud</em> privé Nebula au projet <a title="OpenStack" href=" http://openstack.org/index.php">OpenStack</a> en partenariat avec <a title="Rackspace" href=" http://www.rackspace.com/index.php">Rackspace</a>. Il s'agit d'une implémentation d'une IaaS orientée vers le calcul scientifique et le stockage de données. Par ailleurs OpenStack est un projet actuellement supporté par plus de 25 firmes, dont Dell et Intel. Il offre une pile logicielle ouverte permettant de créer et exploiter un <em>cloud</em> privé sur la base d'infrastructures matérielles standards. Il est disponible sous la licence Apache 2.0. D'après la présentation du projet, la création d'un nouveau Framework ouvert pour le cloud est motivée par deux raisons principales :</p>
<ul>
<li>Le paysage du <em>cloud</em> est actuellement composé d'offres propriétaires, incompatibles entre elles et manquant de transparence, freinant ainsi l'expansion de cette nouvelle industrie. La création d'un framework Open Source permettrait donc une adoption plus massive.</li>
<li>La plupart des autres projets Open Source existant ne pouvaient satisfaire les énormes besoins de scalabilité exprimés par Rackspace. Seule Nebula, semblait correspondre au besoin.</li>
</ul>
<p>Pour l'instant le projet est disponible en "Developer preview". Une première <em>release</em> sera disponible respectivement mi-septembre pour "OS Compute" et mi-octobre pour "OS Storage".</p>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="ContinuousDeliverylelivreleplu"></a>Continuous Delivery, le livre le plus important de 2010 ?</h4>
<p>Continuous Delivery, le livre de Jez Humble et David Farley, est disponible en version finale, en édition papier ou électronique (chez vos revendeurs habituels). Il traite d'un sujet qui tient à cœur de plus en plus d'acteurs de l'écosystème JEE : comment améliorer et dédramatiser les processus de build, de livraison et de déploiement d'un produit. Ce livre recueille déjà de nombreux lauriers. Dont ceux de Martin Fowler (directeur de la collection, donc forcément un peu partial), <a title="qui en fait le livre technique le plus important de 2010" href="http://martinfowler.com/snips/201007301801.html">qui en fait le livre technique le plus important de 2010</a>.</p>
<p>De ce que nous avons pu en lire (<a title="par exemple en RoughCuts ici" href="http://my.safaribooksonline.com/9780321670250">par exemple, en RoughCuts ici</a>), ces louanges sont justifiées : ce livre traite de tous les problèmes qui devraient animer n'importe quel consultant au démarrage d'un projet. Collaborer entre équipes, développer de manière incrémentale, tester, automatiser, déployer, tout cela dans un seul but, maximiser la qualité du produit délivré.</p>
<p>Ce livre donnera lieu a un grand <a title="nombre de prsentations en confrence" href="http://continuousdelivery.com/2010/06/continuous-delivery-talks-2010/">nombre de présentations en conférence</a>, qui, si ce n'est déjà fait, devrait vous donner envie d'en faire votre livre de chevet avant la rentrée littéraire.</p>
<p>Pour en savoir plus, consultez le blog <a title="Continuous Delivery" href="http://continuousdelivery.com/">Continuous Delivery</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/08/17/revue-de-presse-xebia-172/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/</link>
		<comments>http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 05:39:38 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Axon]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Wave]]></category>
		<category><![CDATA[HonetQ]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Sharding]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=5184</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité  éditeurs / SSII

Naufrage pour Google Wave

Le coin de la  technique

Nouvelle architecture de réplication et de sharding pour MongoDB
Axon, une implémentation Java du pattern CQRS
L'architecture de Last.fm basée sur HornetQ

Actualité  éditeurs / SSII
Naufrage pour Google Wave
Nous l'apprenons sur The H, Google Wave [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /></p>
<p><em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Actualité  éditeurs / SSII</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/#NaufragepourGoogleWave">Naufrage pour Google Wave</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/#Nouvellearchitecturederplicati">Nouvelle architecture de réplication et de sharding pour MongoDB</a></li>
<li><a href="http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/#AxonuneimplmentationJavadupatt">Axon, une implémentation Java du <em>pattern</em> CQRS</a></li>
<li><a href="http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/#LarchitecturedeLastfmbasesurHo">L'architecture de Last.fm basée sur HornetQ</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3>
<h4><a name="NaufragepourGoogleWave"></a>Naufrage pour Google Wave</h4>
<p>Nous l'apprenons sur <a title="The H" href="http://www.h-online.com/open/news/item/Google-Wave-to-dissipate-1051080.html">The H</a>, Google Wave coule et ne sera bientôt plus. Après un peu plus d'un an d'existence, Google a décidé de mettre fin à son expérimentation qui n'aura pas répondu à toutes les attentes qu'elle avait provoqué. Pourtant, nous-mêmes, <a title="nous y avons cru" href="http://blog.xebia.fr/2009/11/20/pourquoi-tant-de-vagues-autour-de-google-wave/">nous y avons cru</a> ! Basé sur des protocoles ouverts, le système avait de quoi séduire, même si tout le monde se demandait un peu quelles allaient être les applications réelles... Las, les serveurs de Google devraient être fermés l'année prochaine. La firme annonce quand même la mise à disposition future d'outils permettant aux utilisateurs de "libérer leurs données de Wave". Mais ne nous y trompons pas, même si l'interface graphique colorée ayant donné aux internautes un avant goût de la communication du futur disparaît, il reste quasi-certain que le mécanisme d'échange de données entre serveurs Wave devrait survivre et servir de base à d'autres projets.</p>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="Nouvellearchitecturederplicati"></a>Nouvelle architecture de réplication et de sharding pour MongoDB</h4>
<p><a title="MongoDB" href="http://mongodb.org/">MongoDB</a> est une base de données orientée documents très populaire ces temps-ci. 10gen l'entreprise Open Source qui en est à la source se montre très active tant sur la communication que le plan technique en apportant des améliorations régulières pour placer leur base de données NoSQL à la hauteur des ambitions qu'on lui prête.<br />
Respectant le planning présenté mi-juin lors du <a title="MongoDB Day à Paris" href="http://www.10gen.com/conferences/event_mongofr_21june10">MongoDB Day à Paris</a>, la version 1.6 <a title="vient dtre finalise" href="http://blog.mongodb.org/post/908172564/mongodb-1-6-released">vient d'être finalisée</a>. Cette <em>release</em> estivale était particulièrement attendue car elle apporte des améliorations majeures sur l'architecture distribuée de MongoDB :</p>
<ul>
<li>La réplication était jusqu'alors assurée par une architecture master / slave qui souffrait d'un <em>single point of failure</em> à cause de son nœud master. MongoDB 1.6 introduit la notion de <em>replica set</em> qui est un ensemble de nœuds qui possèderont des replicas d'une même donnée. Une élection de <em>master</em> permet alors de définir un nœud unique qui sera responsable des écritures.</li>
<li>Le <em>sharding</em> est maintenant <em>production ready</em> dans MongoDB. L'architecture de partitionnement repose sur un ou plusieurs nœud proxy intermédiaire entre les clients et les instances MongoDB.</li>
</ul>
<p>En apportant ces améliorations, 10gen offre à MongoDB une architecture distribuée plus attrayante. Ce choix se comprend puisque MongoDB ne proposait jusqu'alors que des mécanismes peu innovants et qui poussaient beaucoup de projets à lui préférer Cassandra.</p>
<h4><a name="AxonuneimplmentationJavadupatt"></a>Axon, une implémentation Java du <em>pattern</em> CQRS</h4>
<p>Le <em>Command Query Request Segregation</em> (CQRS) est un <em>pattern</em> architectural qui a été <a title="formalis fin 2009" href="http://www.udidahan.com/2009/12/09/clarified-cqrs/">formalisé fin 2009</a> par Greg Young et Udi Dahan. Il repose sur l'idée de séparer le code métier selon qu'il s'appuie sur des opérations d'écriture (<em>command</em>) ou de consultation de données (<em>query</em>), plutôt que par découpage fonctionnel. Le but recherché ici est d'offrir une grande scalabilité en permettant aux lectures de s'effectuer de manière synchrone dans un cache, tandis que les requêtes d'écritures sont effectuées de manière asynchrone en mettant à jour à la fois le cache et la base de données sous-jacente.</p>
<p>Les développeurs Java disposent d'une implémentation Open Source de ce <em>pattern</em>, il s'agit du <em>framework</em> <a title="Axon" href="http://code.google.com/p/axonframework/">Axon</a> (anciennement CQRS4J). Le projet est très actif et <a title="vient diffuser" href="http://www.gridshore.nl/2010/08/08/axon-framework-0-6-released/">vient diffuser</a> une version 0.6 dont la maturité mérite de s'y attarder : gestion et persistance des évènements, intégration à Spring et gestion des transactions.<br />
Ce <em>framework</em> reste modeste pour l'instant et ne couvre qu'un nombre limité d'environnements techniques mais à défaut de répondre à votre besoin il constituera un exemple d'implémentation intéressant à étudier.</p>
<h4><a name="LarchitecturedeLastfmbasesurHo"></a>L'architecture de Last.fm basée sur HornetQ</h4>
<p>Tout le monde connaît <a title="Last.fm" href="http://fr.wikipedia.org/wiki/Last.fm">Last.fm</a>, le service de <em>streaming</em> et de recommandation de musique. La compagnie a récemment changé son infrastructure de <em>streaming</em> et en a profité pour adopter <a title="JBoss HornetQ" href="http://jboss.org/hornetq">JBoss HornetQ</a> comme serveur de <em>messaging</em>, au détriment <em>"d'un autre serveur open-source"</em> (mais nous ne saurons pas lequel !). Jeff Mesnil publie sur DZone un article <a title="expliquant" href="http://java.dzone.com/articles/case-study-how-lastfm-uses">expliquant</a> les raisons de ce changement et la façon dont Last.fm se sert d'HornetQ.<br />
Pour résumer simplement, les messages JMS sont générés principalement par les <em>streamers</em> pour:</p>
<ul>
<li> notifier la fin de l'écoute d'un morceau et donc faire mettre à jour la base.</li>
<li>permettre la déconnexion automatique d'un utilisateur connecté à un flux si un message généré par un second <em>streamer</em> indique qu'il vient de se connecter à un autre flux.</li>
</ul>
<p>Dans sa configuration de HornetQ, Last.fm a mis l'accent sur la performance:</p>
<ul>
<li> la persistance a été désactivée. Comme rapporté par nos lecteurs dans <a title="les commentaires" href="http://blog.xebia.fr/2010/02/23/amqp-une-alternative-a-jms/#comment-21922">les commentaires</a> <a title="dun prcdant article" href="http://blog.xebia.fr/2010/02/23/amqp-une-alternative-a-jms/#comment-22026">d'un précédant article</a> celle-ci est connue pour être consommatrice.</li>
<li>messages déclarés comme pré-acquittés, permettant d'éliminer des accès réseau supplémentaires.</li>
</ul>
<p>Bien sûr tout ceci est fait au détriment de la robustesse. On n'a rien sans rien ! Mais Last.fm préfère perdre des messages plutôt que d'empêcher un auditeur d'écouter sa musique: "Availability was more important than reliable delivery". Il est à noter que pour renforcer la robustesse, les envois de messages ne sont pas faits n'importe comment: un seul thread s'occupe de la communication JMS. Il communique avec les autres threads en interne par un mécanisme de files, dans lesquelles il puise les messages à envoyer à HornetQ et dépose les messages reçus. Ces files étant limitées en mémoire, cette dernière est donc maîtrisée et comme il y a un seul thread responsable des accès JMS, il n'y a pas de risque de blocage de tout le système.</p>
<p>Pour continuer sur HornetQ, notons que <a title="la tant attendue" href="http://blog.xebia.fr/2010/01/18/revue-de-presse-xebia-143/#HornetQunvritablerenouveau">la tant attendue</a> interface REST vient d'être annoncée par Bill Burke, son développeur principal, sur <a title="le forum du broker" href="http://community.jboss.org/message/556393">le forum du broker</a>. Cette interface n'est pas encore disponible dans une version officielle de HornetQ, mais <a title="sa documentation" href="http://jboss.org/hornetq/rest">sa documentation</a> permet d'ores et déjà de se faire une idée. Basée directement sur HTTP, elle évite de forcer l'utilisation d'une quelconque encapsulation (autre qu'applicative) des messages. Et bien sûr, on peut l'utiliser avec n'importe quel langage: REST est interopérable. La documentation <a title="spécifique à la création de messages" href="http://docs.jboss.org/resteasy/hornetq-rest/1.0-beta-1/userguide/html/ch04.html">spécifique à la création de messages</a> permet de se faire une idée rapidement. Basée sur <a title="RestEasy" href="http://jboss.org/resteasy">RestEasy</a>, qui fera aussi partie du futur JBoss AS 6, il y a fort à parier que cette interface fera parler d'elle et ouvrira la voie à de nouvelles utilisations du <em>broker</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/08/10/revue-de-presse-xebia-171/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/</link>
		<comments>http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#comments</comments>
		<pubDate>Tue, 25 May 2010 06:00:06 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Activiti]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[iBatis]]></category>
		<category><![CDATA[jBPM]]></category>
		<category><![CDATA[JRuby]]></category>
		<category><![CDATA[MyBatis]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=4718</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Google I/O

Partenariat entre Google et VMWare
App Engine For Business
WebM: enfin un standard vidéo libre ?

SOA

Les créateurs de jBPM chez Alfresco

Le coin de la  technique

MyBatis : un fork de iBatis chez Google Code
JRuby 1.5.0

Google I/O
Dans le foisonnement d'annonces lors du Google I/O 2010 qui s'est [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /><br />
<em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Google I/O</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#PartenariatentreGoogleetVMWare">Partenariat entre Google et VMWare</a></li>
<li><a href="http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#AppEngineForBusiness">App Engine For Business</a></li>
<li><a href="http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#WebMenfinunstandardvidolibre">WebM: enfin un standard vidéo libre ?</a></li>
</ul>
<p><strong>SOA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#LescrateursdejBPMchezAlfresco">Les créateurs de jBPM chez Alfresco</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#MyBatisunforkdeiBatischezGoogl">MyBatis : un fork de iBatis chez Google Code</a></li>
<li><a href="http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/#JRuby">JRuby 1.5.0</a></li>
</ul>
<h3><a name="GoogleIO"></a>Google I/O</h3>
<p>Dans le foisonnement d'annonces lors du <a title="Google IO 2010" href="http://code.google.com/intl/fr-FR/events/io/2010/">Google I/O 2010</a> qui s'est tenu la semaine dernière à San Francisco, nous en avons retenu quelques unes très intéressantes.</p>
<h4><a name="PartenariatentreGoogleetVMWare"></a>Partenariat entre Google et VMWare</h4>
<p>VMWare et SpringSource sont décidément très actifs actuellement dans le domaine des partenariats et des acquisitions (<a title="RabbitMQ" href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#RabbitMQrachetparSpringSource">RabbitMQ</a>, <a title="GemStone" href="http://blog.xebia.fr/2010/05/11/revue-de-presse-xebia-158/#SpringSourcesedoteduncachedist">GemStone</a> ou <a title="VMForce" href="http://blog.xebia.fr/2010/05/03/revue-de-presse-xebia-157/#VMwareSpringSalesForceVMforce">VMForce</a>). Google I/O a été l'occasion pour eux d'annoncer un nouveau <em>partenariat</em> autour du cloud computing, voire au delà: ils poussent plus loin leur concept d'<a title="Open PaaS" href="http://blogs.vmware.com/console/2010/05/google-and-vmwares-open-paas-strategy.html">Open PaaS</a> déjà évoqué pour le partenariat avec SalesForce.</p>
<p>L'idée sous-jacente est de faire de VMWare la plateforme de développement privilégiée pour toute solution de PaaS (Plateform as a Service). En citant Steve Herrod, CTO chez VMWare:<br />
<em><br />
Developers must be able to write applications without needing to know what underlying technology powers the cloud that they'll be deployed on.<br />
</em></p>
<p>Et donc on pourrait développer une application App Engine et la tester sur les environnements de Google puis les déployer en production sur des instances VMWare. Au-delà de la problématique de l'hébergement, Steve Herrod ajoute également la  possibilité d'accéder aux services Google (géolocalisation, traduction automatique...) et de diversifier les supports, en particulier sur les smartphones. Ce sont deux notions qu'on retrouve également dans le partenariat avec SalesForce.</p>
<p>Tout cela constitue pour l'instant des vœux pieux. Rod Johnson nous donne un <a title="aperu" href="http://blog.springsource.com/2010/05/19/spring-google-appengine/">aperçu</a> plus précis de ce que sera ce partenariat:</p>
<ul>
<li>Intégration de GWT à l'outil <a title="Spring ROO" href="http://www.springsource.org/roo">Spring ROO</a>, l'outil de SpringSource Tool qui permet de générer des projets Java en ligne de commande.</li>
<li>Intégration de <a title="Google Speed Tracer" href="http://code.google.com/intl/fr-FR/webtoolkit/speedtracer/">Google Speed Tracer</a> à <a title="Spring Insight" href="http://www.springsource.com/products/tcserver/devedition">Spring Insight</a>. Speed Tracer est un très bon outil de mesure de performance côté client, disponible aussi comme extension de chrome, alors que Spring Insight est un outil de mesure de performance plutôt côté serveur et directement accessible dans SpringSource Tool Suite. L'association des deux semble assez naturelle.</li>
</ul>
<p>Il est encore difficile de voir la pertinence de ce nouveau paradigme, l'Open PaaS, et si l'hétérogénéité des solutions ne va pas le rendre un peu creux. Mais au-delà de ça, la stratégie actuelle de VMWare semble être la captation des développeurs Java vers leurs outils et en particulier SpringSource Tool Suite.</p>
<h4><a name="AppEngineForBusiness"></a>App Engine For Business</h4>
<p>Au-delà du partenariat avec VMWare et alors qu'aujourd'hui App Engine a encore une étiquette (un peu) de bricolage, Google a la volonté de percer dans les entreprises et d'ajouter tout un arsenal prompt à rassurer celles qui voudraient se lancer. D'où la nouvelle offre <a title="Google App Engine For Business" href="http://googlecode.blogspot.com/2010/05/announcing-google-app-engine-for.html">Google App Engine For Business</a> qui s'articule autour de ces points:</p>
<ul>
<li>Administration centralisée : cette console permettrait de gérer, entre autres, plusieurs projets d'une même entreprise.</li>
<li>Fiabilité et support : une garantie de SLA de 99.9% et support pour les utilisateurs.</li>
<li>Sécurisation par défaut : l'application serait par défaut sécurisé par les comptes Google App de l'entreprise.</li>
<li>Coût raisonnable : la plateforme serait disponible pour 8$ par utilisateur et par mois, plafonné à 1000$.</li>
<li>une architecture plus orientée entreprise : utilisation du SSL à l'intérieur du domaine de l'entreprise, utilisation des services avancés de Google et surtout enfin accès à des <em>bases SQL</em> (c'était un des gros points noirs d'App Engine). Ces nouveautés seraient disponibles dans le courant de l'année.</li>
</ul>
<p>Plus de détails <a title="ici" href="http://code.google.com/intl/fr-FR/appengine/business/#features">ici</a>.</p>
<h4><a name="WebMenfinunstandardvidolibre"></a>WebM: enfin un standard vidéo libre ?</h4>
<p>Le Google I/O a aussi été l'occasion pour le géant de faire une annonce que de nombreux partisans d'un internet ouvert espéraient depuis le rachat de la société On2. Jusqu'à présent, les formats vidéo "du futur" étaient d'un coté H264, et de l'autre Theora. H264, meilleur techniquement que Théora avait le gros désavantage de traîner derrière lui nombre de brevets. Le consortium gérant ce format avait déclaré ne pas désirer recevoir de royalties avant quelques années. Mais le format n'en restait pas moins propriétaire et l'épée de Damoclès des royalties était susceptible de s'abattre plus tard sur ses utilisateurs. Cette guerre commençait à devenir visible au niveau des navigateurs et de leur support de la balise video du HTML5. Pour rappel, la spécification de celle-ci n'impose aucun codec. Nous arrivions donc à une situation difficile où certains navigateurs ne supportaient que Theora (<a title="Firefox" href="http://standblog.org/blog/post/2010/01/26/Video-Theora-ou-H264">Firefox</a>) et d'autres que le H264 (Safari). L'incertitude était de mise quant à préserver un web standardisé mais ouvert. C'est là que Google intervient en proposant un nouveau projet, <a title="WebM" href="http://www.webmproject.org/">WebM</a>, et endosse son costume de sauveur du web.<br />
Ce projet est destiné à développer un format vidéo libre. Techniquement, des fichiers WebM contiendront:</p>
<ul>
<li>de la vidéo au format VP8</li>
<li>du son en <a title="Vorbis" href="http://fr.wikipedia.org/wiki/Vorbis">Vorbis</a></li>
<li>le tout dans un conteneur <a title="Matroska" href="http://fr.wikipedia.org/wiki/Matroska">Matroska</a>.</li>
</ul>
<p>Certaines voix <a title="se sont dores et dj leves" href="http://x264dev.multimedia.cx/?p=377">se sont d'ores et déjà élevées</a> pour dénoncer le format VP8 pour diverses raisons, mais il y a fort à parier que ce codec soit celui que tout le web attendait, notamment pour utiliser la norme HTML5 sans soucis de compatibilité. Les versions de développement de Firefox et Chrome intègrent déjà le support de ce format, les mobiles Android devraient le faire avant la fin de l'année et Adobe, avec Flash, suivra aussi.</p>
<p>A coté de l'aspect technique, il nous semble intéressant de nous attarder sur <a title="la licence de WebM" href="http://www.webmproject.org/license/software/">la licence de WebM</a> qui est assez singulière et participera à n'en pas douter à imposer WebM. L'un des problème de ce projet est que, malgré toutes les dispositions prises, il n'est pas certain qu'un bout de code quelque-part n'enfreigne pas un quelconque brevet... Or, la licence stipule, en gros, que quiconque intentera un procès au projet ou à ses utilisateurs devra cesser d'utiliser le projet lui-même. C'est un coup de génie: si WebM commence à s'imposer (ce dont nous ne doutons pas avec la puissance de feu de Google, Youtube...), alors les entreprises susceptibles de lui intenter un procès ne le pourront pas, car elles seront en même temps obligées de l'utiliser elle-mêmes pour ne pas pénaliser leurs propres utilisateurs. Impossible d'imaginer les utilisateurs d'Opera interdits de Youtube pour cause de format vidéo non supporté par exemple: ils auraient tôt fait de migrer vers un autre navigateur. Google tient donc peut être, avec WebM, le nouveau standard vidéo du Web. En tout cas, il entend bien l'imposer comme tel.</p>
<h3><a name="SOA"></a>SOA</h3>
<h4><a name="LescrateursdejBPMchezAlfresco"></a>Les créateurs de jBPM chez Alfresco</h4>
<p>Alfresco <a title="a annoncé" href="http://www.alfresco.com/media/releases/2010/05/activiti_bpm/">a annoncé</a> son nouveau BPMS, <a title="Activiti" href="http://www.activiti.org/">Activiti</a>, mené par le créateur de jBPM, Tom Baeyens, et de son ancien <em>lead developer</em> Joram Barrez, tous deux partis de chez JBoss <a title="il y a peu" href="http://blog.xebia.fr/2010/05/03/revue-de-presse-xebia-157/#RefontedejBPMchezJBoss">il y a peu</a>.</p>
<p>A l'instar de jBPM, Activiti est un BPMS léger, qui s'intègre facilement à nos applications Java. Il propose en plus, une console d'administration et un modeler graphique en ligne.</p>
<p>Par ailleurs, il s'appuie sur le standard BPMN 2.0, et bénéficie ainsi à la fois d'une sémantique d'exécution, ainsi que d'un modèle de représentation graphique. Cette décision marque bien le contraste avec le choix précédent des créateurs, lors du développement  de jBPM, de s'appuyer sur un format propriétaire, jPDL.</p>
<p>L'éditeur de la célèbre solution ECM a toutefois annoncé qu'il continuerait le support de jBPM au sein de sa suite logicielle. Bonne nouvelle, pour les nombreux projets qui ont déjà investi dans la solution de jBoss.</p>
<p>On notera enfin que SpringSource annonce la collaboration de Dave Syer, project lead de Spring Batch, avec l'équipe d'Activiti. On devrait donc s'attendre à un prochain support de BPMN dans les applications Spring.</p>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="MyBatisunforkdeiBatischezGoogl"></a>MyBatis : un fork de iBatis chez Google Code</h4>
<p>Alors que la version 3.0 d'iBatis <a title="a été finalisée" href="http://ibatis.apache.org/java.cgi">a été finalisée</a> il y a un mois après une longue période de gestation, une <a title="annonce majeure" href="http://ibatis.apache.org/">annonce majeure</a> pour l'avenir du projet vient d'être diffusée sur son site. Le créateur d'iBatis, Clinton Begin, ainsi que plusieurs des principaux <em>commiters</em> ont décidé de créer un <em>fork</em> du projet en dehors de la fondation Apache.</p>
<p>Ce nouveau projet est baptisé MyBatis et <a title="est hébergé" href="http://code.google.com/p/mybatis/">est hébergé</a> sur Google Code. Le projet iBatis d'origine est conservé au sein de la fondation, mais stoppé. Il devient donc un sous-projet d'<a title="Apache Attic" href="http://attic.apache.org/">Apache Attic</a> qui regroupe les projets Apache dépréciés.</p>
<p>Clinton Begin clarifie les principales questions que l'on peut se poser suite à cette annonce :</p>
<ul>
<li>Les noms des <em>packages</em> ne changent pas, et la compatibilité ascendante est préservée avec le passage à MyBatis.</li>
<li>Les branches 2.x et 3.x sont préservées dans MyBatis avec la disponibilité immédiate des versions 2.3.5 et 3.0.1.</li>
<li>La licence est conservée.</li>
</ul>
<p>Cette annonce est pour le moins inattendue mais dans la mesure où il s'agit d'un transfert de responsabilité plus que d'un <em>fork</em>, les ressources du projet ne seront pas divisées et son activité devrait donc être préservée.</p>
<h4><a name="JRuby"></a>JRuby 1.5.0</h4>
<p>Avec un peu de retard, nous tenons quand même à signaler la sortie de JRuby en version 1.5.0. Cette version a été celle de la maturation du moteur. En terme de compatibilité avec le langage Ruby, très peu d'ajouts ont été faits. En revanche, beaucoup d'ajouts de stabilité, améliorations de l'utilisation mémoire, du support de Windows, support de Ruby On Rails version 3. Pour le détail : l'<a title="Annonce officielle" href="http://www.jruby.org/2010/05/12/jruby-1-5-0.html">Annonce officielle</a>.</p>
<h3><a name="Lastucedelasemaine"></a>L'astuce de la semaine</h3>
<p>Nous inaugurons aujourd'hui une nouvelle rubrique qui est destinée à vous faire part brièvement de petites astuces qui, nous l'espérons, pourront vous être utiles. Et c'est le tout récent <a title="Eclipse MarketPlace" href="http://marketplace.eclipse.org/">Eclipse MarketPlace</a> qui honore cette nouvelle rubrique de sa présence. Pour rappel, le MarketPlace est le successeur de <a title="Eclipse Plugin Central" href="http://eclipseplugincentral.com/">Eclipse Plugin Central</a> (maintenant en fin de vie) et destiné à lui ajouter <a title="de nombreuses fonctionnalits" href="http://ianskerrett.wordpress.com/2009/12/08/eclipse-marketplace-is-now-live/">de nombreuses fonctionnalités</a>.<br />
Dans <a title="son post" href="http://eclipse.dzone.com/articles/installing-multiple-eclipse">son post</a>, Zviki Cohen nous apprend comment utiliser le MarketPlace pour créer des liste de plugins et les installer facilement. C'est une astuce qui peut être particulièrement intéressante lorsque l'on cherche à uniformiser les postes de développement par exemple: il suffit d'une URL pour ajouter à une installation d'Eclipse tous les plugins utilisés. C'est une alternative pratique à l'installation manuelle par chaque développeur qu'on retrouve souvent sur les projets.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/05/25/revue-de-presse-xebia-160/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML5 &#8211; Les nouveaux éléments</title>
		<link>http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/</link>
		<comments>http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 13:30:10 +0000</pubDate>
		<dc:creator>Séven Le Mesle</dc:creator>
				<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=4127</guid>
		<description><![CDATA[Comme évoqué dans une précédente revue de presse, voici le premier article de ma série sur HTML5. Plutôt que de faire du comptage de points entre Apple et Adobe, j'ai décidé de commencer par faire un tour d'horizon des nouveautés proposées par cette nouvelle spécification du W3C. Dans ce premier article, je vous propose donc [...]]]></description>
			<content:encoded><![CDATA[<p>Comme évoqué dans une précédente revue de presse, voici le premier article de ma série sur HTML5. Plutôt que de faire du comptage de points entre Apple et Adobe, j'ai décidé de commencer par faire un tour d'horizon des nouveautés proposées par cette nouvelle spécification du W3C. Dans ce premier article, je vous propose donc de faire un voyage à la découverte des nouveautés du côté de HTML. ; pour connaître les nouvelles balises, et les nouveaux attributs que nous pouvons déjà ou pourrons bientôt utiliser dans nos navigateurs. Du layout au canvas en passant par les WebForms, le son et la vidéo, tout tout tout, je vous dirai tout sur HTML5. Commençons donc par le commencement: HTML5 qu'est-ce que c'est ?</p>
<h3>Sommaire</h3>
<ul>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#HTML">HTML5 ?</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Nouveaumodledecontenu">Nouveau modèle de contenu</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Nouveauxlmentsdemiseenpage">Nouveaux éléments de mise en page</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Elmentsinteractifs">Eléments interactifs</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#LesWebForms">Les WebForms</a>
<ul>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Nouveauxinput">Nouveaux input</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Validationnative">Validation native</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Autocompltion">Auto-complétion</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Rptitions">Répétitions</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/#Etatdeslieux">Etat des lieux</a></li>
</ul>
</li>
<li><a href="http://blog.xebia.fr/2010/03/02/html5-les-nouveaux-elements/#Multimedia">Multimedia</a>
<ul>
<li><a href="http://blog.xebia.fr/2010/03/02/html5-les-nouveaux-elements/#AudioetVideo">Audio et Video</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html5-les-nouveaux-elements/#LaguerredesCodecs">La guerre des Codecs</a></li>
<li><a href="http://blog.xebia.fr/2010/03/02/html5-les-nouveaux-elements/#LeCanvas">Le Canvas</a></li>
</ul>
</li>
<li><a href="http://blog.xebia.fr/2010/03/02/html5-les-nouveaux-elements/#Conclusion">Conclusion</a></li>
</ul>
<h3><a name="HTML"></a>HTML5 ?</h3>
<p>HTML5 est au départ la nouvelle version du langage HTML en cours de développement par le W3C. Pour le moment, il s'agit d'une recommandation en DRAFT, fruit du travail initial réalisé par le <a title="WHATWG" href="http://www.whatwg.org">WHATWG</a> depuis 2004. Le <a title="W3C" href="http://www.w3c.org">W3C</a> espère en faire un de ses standards libres aux alentours de 2022. De prime abord, ça nous laisse le temps de réfléchir au problème pendant les 10 prochaines années. L'idée d'une nouvelle version de HTML serait motivée par quelques constats simples :</p>
<ul>
<li>Les navigateurs ont besoin de plugins pour gérer le multimédia (flash et consorts)</li>
<li>La structure des documents n'est pas intuitive et rend l'accessibilité difficile</li>
<li>Les API JavaScript varient trop d'un navigateur à l'autre pour garantir la portabilité des documents</li>
<li>Les sites sont de plus en plus proches des applications de bureaux mais souffrent encore de limitations</li>
</ul>
<p>Pour répondre à ces problématiques et favoriser l'émergence du web sémantique, la spécification propose :</p>
<ul>
<li>Un nouveau modèle de contenu des éléments</li>
<li>Des éléments de mise en page</li>
<li>De nouveaux éléments pour les formulaires</li>
<li>Du contenu multimédia</li>
<li>Plus d'interactivité</li>
<li>Des APIs standards JavaScript</li>
</ul>
<p>Bien que la spécification soit encore en cours d'écriture, certaines parties sont déjà très avancées et les navigateurs ont tous commencé à les implémenter. Google Chrome est actuellement en tête. Il bénéficie nativement de Gears et respecte 87% de la spécification. Parmi les principaux supporters de ce standard en devenir, nous retrouvons Google, Mozilla, Opera, Apple et Palm, pour ne citer que les plus grands. Apparemment, les navigateurs qui ont le vent en poupe sont tous de la partie. Microsoft, de son côté, suit la tendance de très loin en intégrant des fonctionnalités au compte goutte dans son IE, qui supporte tout de même 28% du langage.</p>
<h3><a name="Nouveaumodledecontenu"></a>Nouveau modèle de contenu</h3>
<p>Bye, bye, les alignements hasardeux dus aux éléments de type bloc ou en ligne. Les éléments seront plutôt classés par catégories.</p>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/03/contenthtml5.png"><img class="aligncenter size-full wp-image-4135" title="contenthtml5" src="http://blog.xebia.fr/wp-content/uploads/2010/03/contenthtml5.png" alt="contenthtml5" width="520" height="284" /></a></div>
<ul>
<li>La catégorie ancêtre <code>Flow</code> correspond à tous les éléments qui contiennent un flot de texte</li>
<li><code>Phrasing</code> correspond aux éléments qui apparaissent dans le texte (a, li)</li>
<li><code>Interactive</code> définit les éléments qui fournissent une interaction avec l'utilisateur</li>
<li><code>Embedded</code> affiche des ressource externes dans le document</li>
<li>Les <code>Metadata</code> représentent tout ce qui n'est pas affiché (style, script, ...)</li>
<li><code>Heading</code> définit les en-têtes d'une section</li>
<li><code>Sectioning</code> définit le scope des en-têtes et pieds de page</li>
</ul>
<p>Toutes ces catégories permettent de définir le contenu autorisé pour les éléments. Leur but est d'une part de fournir une grande souplesse de composition (par exemple la balise <code>a</code> peut maintenant contenir un paragraphe entier, une liste ou des headers (<code>h*</code>)), d'autre part ces catégories permettent aux navigateurs d'assimiler le contenu de la page, notamment pour les exports d'impression ou l'accessibilité.</p>
<h3><a name="Nouveauxlmentsdemiseenpage"></a>Nouveaux éléments de mise en page</h3>
<p>Jusqu'à maintenant, l'élément de mise en page par excellence était la balise <code>div</code>. La grande majorité des sites est construite sur un modèle d'empilement de ces boites avec des <code>id</code> différents pour finir par une grosse partie de styles <code>CSS</code> assurant le positionnement. Mais cela a quelques inconvénients:</p>
<ul>
<li>Ce n'est pas intuitif pour le développeur, vous en conviendrez.</li>
<li>Le navigateur ne peut pas connaître le rôle de chacune des parties de la mise en page, ce qui rend beaucoup plus difficile la génération de plan ou d'aide à la navigation.</li>
</ul>
<div>
<table border="0">
<tbody>
<tr>
<td><a href="http://blog.xebia.fr/wp-content/uploads/2010/03/layoutHTML4.png"><img title="layoutHTML4" src="http://blog.xebia.fr/wp-content/uploads/2010/03/layoutHTML4.png" alt="layoutHTML4" width="351" /></a></td>
<td><a href="http://blog.xebia.fr/wp-content/uploads/2010/03/layoutHTML5.png"><img title="layoutHTML5" src="http://blog.xebia.fr/wp-content/uploads/2010/03/layoutHTML5.png" alt="layoutHTML5" width="351" /></a></td>
</tr>
</tbody>
</table>
</div>
<p>Les balises <code>article</code>, <code>section</code>, <code>header</code> et <code>footer</code> indiquent clairement à quel type de texte elles correspondent et comment s'organise leur contenu. La balise <code>aside</code> définit un contenu lié au sujet principal, sans en faire partie pour autant. Reste le tag <code>nav</code> qui est prévu pour servir les liens de navigations de la page comme un menu par exemple. La mise en page proposée ci-dessus ne révèle pas la flexibilité d'utilisation de ces éléments. Notez bien que les <code>article</code> et <code>section</code> peuvent avoir leur propre <code>header</code> et <code>footer</code>.</p>
<p>Avec ces nouvelles balises, nous serons enfin capables de gérer l'organisation de nos documents de façon intuitive et les navigateurs pourront générer le plan des documents eux-mêmes. L'algorithme nécessaire est d'ailleurs décrit dans la spécification. Tous ces éléments sont déjà supportés nativement par les navigateurs avec l'exception habituelle de IE pour lequel il existe un <a title="workaround JavaScript" href="http://code.google.com/p/html5shiv/">workaround JavaScript</a>. Vous pouvez dès maintenant vous familiariser avec ces nouvelles balises sans avoir peur des problèmes de compatibilité.</p>
<h3><a name="Elmentsinteractifs"></a>Eléments interactifs</h3>
<p>Sous ce terme limpide se cachent les éléments qui fournissent de l'interaction utilisateur dans la page. Ce qui correspond aux <a title="Interactive elements" href="http://dev.w3.org/html5/spec/interactive-elements.html">Interactive elements</a> de la spécification. La grosse nouveauté ici est la définition d'une balise <code>menu</code> permettant de construire des barres de menu (<code>type="toolbar"</code>), des menus contextuels (<code>type="context"</code>) ou de simples listes de commandes. Un tag <code>menu</code> peut contenir des sous-menus et se compose d'éléments permettant de lancer des commandes.</p>
<div class="syntax_hilite">
<div id="html-11">
<div class="html"><span style="color: #009900;">&lt;menu <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"toolbar"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li&gt;</span></a></span><br />
&nbsp; <span style="color: #009900;">&lt;menu <span style="color: #000066;">label</span>=<span style="color: #ff0000;">"File"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"fnew()"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>New...<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"fopen()"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Open...<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"fsave()"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Save<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/menu&gt;</span><br />
&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&gt;</span></span><br />
&nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li&gt;</span></a></span><br />
&nbsp; <span style="color: #009900;">&lt;menu <span style="color: #000066;">label</span>=<span style="color: #ff0000;">"Edit"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"ecopy()"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Copy<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"epaste()"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Paste<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/menu&gt;</span><br />
&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/menu&gt;</span></div>
</div>
</div>
<p></p>
<p>Pour les commandes, HTML5 propose directement un élément <code>command</code> qui permet d'associer un texte ou icône à une exécution JavaScript sur événement <code>onclick="alert('hello world')"</code>. Pour utiliser le menu contextuel, il suffit d'ajouter l'attribut <code>contextmenu="menu_id"</code>, sur l'élément qui doit utiliser le menu.</p>
<p>L'autre nouveauté parmi les éléments interactifs est la balise <code>details</code>. Le fonctionnement de ce tag est proche d'un menu en accordéon, avec une partie de texte toujours affichée et une partie cachée pouvant être rendue visible sur demande de l'utilisateur. Cela peut être utile, pour cacher des options avancées par exemple.</p>
<div class="syntax_hilite">
<div id="html-12">
<div class="html"><span style="color: #009900;">&lt;section <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"progress window"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">&lt;h1&gt;</span></a></span>Copying &quot;Really Achieving Your Childhood Dreams&quot;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1&gt;</span></span><br />
&nbsp;<span style="color: #009900;">&lt;details&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;summary&gt;</span>Copying... <span style="color: #009900;">&lt;progress max=<span style="color: #ff0000;">"375505392"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"97543282"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/progress&gt;</span> 25%<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/summary&gt;</span><br />
&nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/dl.html"><span style="color: #000000; font-weight: bold;">&lt;dl&gt;</span></a></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/dt.html"><span style="color: #000000; font-weight: bold;">&lt;dt&gt;</span></a></span>Transfer rate:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dt&gt;</span></span> <span style="color: #009900;"><a href="http://december.com/html/4/element/dd.html"><span style="color: #000000; font-weight: bold;">&lt;dd&gt;</span></a></span>452KB/s<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dd&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/dt.html"><span style="color: #000000; font-weight: bold;">&lt;dt&gt;</span></a></span>Local filename:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dt&gt;</span></span> <span style="color: #009900;"><a href="http://december.com/html/4/element/dd.html"><span style="color: #000000; font-weight: bold;">&lt;dd&gt;</span></a></span>/home/rpausch/raycd.m4v<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dd&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/dt.html"><span style="color: #000000; font-weight: bold;">&lt;dt&gt;</span></a></span>Remote filename:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dt&gt;</span></span> <span style="color: #009900;"><a href="http://december.com/html/4/element/dd.html"><span style="color: #000000; font-weight: bold;">&lt;dd&gt;</span></a></span>/var/www/lectures/raycd.m4v<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dd&gt;</span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dl&gt;</span></span><br />
&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/details&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/section&gt;</span></div>
</div>
</div>
<p></p>
<p>Ici, le tag <code>details</code> est utilisé pour cacher les informations techniques d'une copie. Vous noterez au passage l'utilisation d'une balise <code>progress</code>, pour afficher une barre d'avancement.</p>
<h3><a name="LesWebForms"></a>Les WebForms</h3>
<h4><a name="Nouveauxinput"></a>Nouveaux input</h4>
<p>Les formulaires aussi profitent de la mise à jour en reprenant en partie <a title="XForms" href="http://www.w3.org/TR/xforms11/">XForms</a> pour les connaisseurs. Le principe est de fournir des <code>input</code> fortement typés  ainsi qu'une API JavaScript de validation en plus d'une interactivité accrue. Parmi les nouveaux types d'input, il y a :</p>
<ul>
<li>Le support des saisies de dates et heure décliné sous plusieurs formes (<code>date</code>, <code>datetime</code>, <code>datetime-local</code>, <code>month</code>, <code>week</code>, <code>time</code>). Nous n'aurons donc plus besoin des widgets supplémentaires JavaScript pour générer des calendriers.</li>
<li>La saisie de formats numériques via les <code>number</code> et les <code>range</code> qui pourront prendre la forme d'un slider vertical ou horizontal</li>
<li>Différents types de chaînes formatées comme les <code>url</code>, les <code>email</code> et <code>tel</code></li>
<li>Le selecteur de couleur <code>color</code></li>
<li>Le champ de recherche <code>search</code></li>
</ul>
<p>Les anciens types sont maintenus. Ils bénéficient d'un bon lifting, tel le type <code>file</code> qui permettra désormais de sélectionner plusieurs fichiers d'un seul coup, tout en précisant le type mime accepté. Il y a aussi l'attribut <code>placeHolder</code> qui permet de fournir un texte descriptif affiché dans le champs si il n'est pas renseigné.</p>
<h4><a name="Validationnative"></a>Validation native</h4>
<p>Tous les <code>input</code> supportent de nouveaux attributs de validation qui permettent de contraindre les saisies de l'utilisateur, et peuvent interdire la soumission du formulaire, s'il n'est pas valide. Encore une fois, cela permettra de remplacer des solutions hétérogènes JavaScript par un standard nativement supporté par le navigateur. La validation s'accompagne aussi de nouveaux évènements DOM pour notifier les erreurs ou surcharger la validation avec son propre code JavaScript. Plus besoin non plus de jouer avec les classes CSS pour faire ressortir les champs en erreur grâce aux pseudo-formats (<code>:invalid</code>, <code>:valid</code>, <code>:Out-of-range</code>, ...).</p>
<p>Des validateurs par défaut sont fournis sous la forme de nouveaux attributs à placer sur les <code>input</code> :</p>
<ul>
<li><code>required</code> pour un champ requis</li>
<li><code>min</code> et <code>max</code> permettent de définir une valeur minimum et maximum sur les types numérique et date</li>
<li><code>pattern</code> fournit une expression régulière que la saisie doit respecter</li>
</ul>
<h4><a name="Autocompltion"></a>Auto-complétion</h4>
<p>Autre nouveauté inspirée des widgets JavaScript existant, les <code>datalist</code> sont des listes de valeurs construites à l'aide d'éléments de type liste (<code>li</code>, <code>option</code>, ...). La <code>datalist</code> est transparente par défaut mais elle peut-être liée à un ou plusieurs <code>input</code> avec l'attribut <code>list</code>. Une fois l'association établie avec un <code>input</code>, la liste est utilisée pour fournir des suggestions à la saisie. Les éléments à l'intérieur de la liste peuvent-être décorés par CSS directement.</p>
<div class="syntax_hilite">
<div id="html-13">
<div class="html"><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> list=<span style="color: #ff0000;">"roles"</span> autofocus /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
<span style="color: #009900;">&lt;datalist <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"roles"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li&gt;</span></a></span>Designer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li&gt;</span></a></span>Integrateur<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li&gt;</span></a></span>Programmeur<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/datalist&gt;</span></div>
</div>
</div>
<p></p>
<h4><a name="Rptitions"></a>Répétitions</h4>
<p>Une autre évolution sympathique est la création d'un système de template, facilitant la création de formulaire dynamique. Dans les applications de gestion, il est souvent utile de pouvoir ajouter et supprimer des lignes de saisie dans le formulaire. Le système de répétition est fait pour ça. Je peux définir un bloc comme étant mon template, et le contenu de cet élément pourra être dupliqué via une API JavaScript.</p>
<div class="syntax_hilite">
<div id="html-14">
<div class="html"><span style="color: #009900;"><a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">&lt;tr</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"order"</span> repeat=<span style="color: #ff0000;">"template"</span> repeat-<span style="color: #000066;">start</span>=<span style="color: #ff0000;">"3"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">&lt;td&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"row[order].product"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">""</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">&lt;td&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"row[order].quantity"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"1"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td&gt;</span></span><br />
&nbsp; &nbsp;<span style="color: #009900;"><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">&lt;td&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"remove"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Remove This Row<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tr&gt;</span></span><br />
<span style="color: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"add"</span> template=<span style="color: #ff0000;">"order"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Add Row<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"submit"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Submit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></span></div>
</div>
</div>
<p></p>
<p>C'est l'attribut <code>repeat</code> qui définit notre bloc de répétition, le <code>repeat-start</code> permet de gérer les aller-retour serveur, pour afficher la liste avec le nombre d'éléments précédemment soumis. Pour assurer l'ajout et la suppression de ligne, j'ai utilisé les boutons de type <code>add</code> et <code>remove</code> mais j'aurais aussi bien pu utiliser des méthodes JavaScript de l'élément template <code>addRepetitionBlock()</code>. Il y a aussi des solutions pour gérer l'ordre des répétitions permettant de monter et descendre les lignes répétées.</p>
<h4><a name="Etatdeslieux"></a>Etat des lieux</h4>
<p>Voilà la promesse d'un monde meilleur dans lequel nous aurons moins de travail à fournir (CSS, JS) pour obtenir des résultats simplement meilleurs. Notez une dernière chose, les input peuvent être liés à un ou plusieurs formulaires via le nouvel attribut <code>form</code>. En d'autres termes, il sera possible de placer nos <code>input</code> pour un formulaire à l'extérieur de ce dernier.</p>
<p>Comme vous l'avez remarqué, j'ai utilisé le futur dans ce paragraphe car pour le moment seul Opera 9 supporte nativement les WebForms. Pour permettre aux développeurs de s'y essayer et valider la spécification, le projet <a title="WebForms2" href="http://code.google.com/p/webforms2/">WebForms2</a> propose une implémentation partielle en JavaScript. La spécification au départ avait été séparée du langage HTML5, mais le W3C a décidé de la ré-intégrer en y apportant des modifications. Du coup la plupart des fonctions développées sont liées à une ancienne version des WebForms.</p>
<p>Pour les autres navigateurs, notez tout de même que les développements ont déjà commencé. Par exemple Chrome 5 devrait être livré avec le support des nouveaux <code>input</code> et l'API de validation(<a title="Chrome Web Platform Status" href="http://www.chromium.org/developers/web-platform-status">Chrome Web Platform Status</a>). Safari bénéficie du même support que chrome qui se limite aux types <code>search</code>, <code>range</code> et <code>file</code> multiple. Du côté de Firefox, les choses sont moins claires ; il existe bien un ensemble de <a title="bugs" href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=344614&amp;hide_resolved=0">bugs</a> pour le support des WebForms mais Mozilla communique peu sur le sujet. Actuellement, Internet Explorer 8 ne supporte aucune des ces nouveautés et il est impossible de connaître la roadmap de Microsoft sur le sujet. Tout ce que l'on sait, c'est que l'éditeur a décidé de mettre les bouchées doubles pour améliorer son support des travaux du W3C. Peut-être une bonne solution pour inverser la vapeur et en finir avec la descente aux enfers de son précieux navigateur.</p>
<p><a title="Page de dmonstration pour Chrome Safari et Opera" href="http://www.miketaylr.com/pres/html5/forms2.html">Page de démonstration pour Chrome, Safari et Opera</a>.</p>
<h3><a name="Multimedia"></a>Multimedia</h3>
<p>Il est temps de parler des nouveaux types de contenu poussés par HTML5. Les auteurs du whatwg se sont probablement demandé pourquoi doit-on installer des plugins dans nos navigateurs ? Nous savons a priori tous aujourd'hui que Flash est utilisé principalement pour 3 choses dans les applications :</p>
<ul>
<li>Pouvoir écouter de la musique</li>
<li>Pouvoir regarder des vidéos</li>
<li>Faire des animations de folies</li>
</ul>
<p>J'ai mis volontairement de côté Flex car il cible plutôt les applications d'entreprise, et les jeux Flash car le Boss ne veut pas en entendre parler <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Sachez, si vous êtes passé à côté de ça, que HTML5 adresse ces trois problématiques en sortant trois nouvelles balises de son chapeau :</p>
<ul>
<li><code>audio</code> permet de gérer la lecture de fichiers audio en streaming.</li>
<li><code>video</code> assure la lecture de vidéos en streaming toujours.</li>
<li><code>canvas</code> permet de dessiner et de faire des animations en JavaScript.</li>
</ul>
<h4><a name="AudioetVideo"></a>Audio et Video</h4>
<p>Jusqu'à maintenant, les gros avantages de la technologie d'Adobe sont la portabilité puisque Flash est disponible pour tous les navigateurs, et la performance en comparaison avec les moteurs JavaScript. Il est clair que ces trois balises viennent marcher sur les plate-bandes de Flash. Les éléments média disposent des attributs :</p>
<ul>
<li><code>controls</code> pour activer l'affichage de l'interface de contrôle du navigateur</li>
<li><code>autobuffer</code> pour activer le chargement automatique de la ressource en cache</li>
<li><code>autoplay</code> pour activer le lancement automatique de la lecture</li>
<li><code>loop</code> pour lire le ou les médias en boucle</li>
<li><code>src</code> pour fournir l'url du fichier média à lire</li>
</ul>
<p>La balise <code>source</code> placée à l'intérieure d'une balise <code>audio</code> ou <code>video</code> permet aussi de définir l'url (<code>@src</code>), le type mime et le codec (<code>@type</code>) d'une ressource média. Il suffit de mettre plusieurs <code>source</code> pour créer une playlist.</p>
<div class="syntax_hilite">
<div id="html-15">
<div class="html"><span style="color: #009900;">&lt;audio controls autobuffer autoplay loop&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"elvis.ogg"</span> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp; <span style="color: #009900;">&lt;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"elvis.mp3"</span> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/audio&gt;</span><br />
<span style="color: #009900;">&lt;video <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"video.ogg"</span> controls&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">'video.mp4'</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">'video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;'</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- Un texte alternatif pour les anciens navigateurs --&gt;</span></span><br />
&nbsp; Your browser does not support the <span style="color: #009900;"><a href="http://december.com/html/4/element/code.html"><span style="color: #000000; font-weight: bold;">&lt;code&gt;</span></a></span>video<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/code&gt;</span></span> element.&nbsp; <br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/video&gt;</span></div>
</div>
</div>
<p></p>
<p>Si le navigateurs n'arrivent pas à lire le fichier ogg, il tentera de lire le fichier H.264. De même, si le navigateur ne supporte pas l'élément <code>video</code>, il affichera le texte alternatif. Il suffit donc de placer un lecteur Flash à la place du texte pour que la vidéo reste lisible dans un ancien navigateur.</p>
<p>Si vous ne voulez pas utiliser l'interface native, ou que vous souhaitez simplement cacher le lecteur audio, vous pouvez utiliser l'API standard JavaScript pour créer un lecteur, et profiter des méthodes <code>play()</code>, <code>pause()</code>, et <code>load()</code> pour charger la prochaine ressource média. Une dernière méthode : <code>canPlayType(type)</code>, permet de demander au navigateur si il supporte le format vidéo ou audio fournit en paramètre. Cela sera très utile pour gérer les incompatibilités de format.</p>
<p>De plus l'interface <code>HTMLMediaElement</code> fournit quantité de propriétés allant du volume à l'état du buffer en passant par le temps de lecture courant. Le tout est, bien sûr, accompagné d'une batterie d'événements qui permettent de suivre l'avancement du chargement, l'état du lecteur, et les action lancées par l'utilisateur.</p>
<p>Pour plus de détail sur le sujet, je vous invite à lire la <a title="spécification W3C des éléments média" href="http://www.w3.org/TR/html5/video.html">spécification W3C des éléments média</a> et à tester la démo de <a title="jPlayer" href="http://www.happyworm.com/jquery/jplayer/latest/demos.htm">jPlayer</a> un lecteur audio pour jQuery.</p>
<h4><a name="LaguerredesCodecs"></a>La guerre des Codecs</h4>
<p>Venons en au problème des codecs. Le W3C se contente de citer un certain nombre de formats allant du H.264 au DIRAC pour la vidéo en passant par mpeg-4 et Theora; même chose pour l'audio avec AAC, FLAC, Vorbis, ... La spécification laisse le libre choix aux navigateurs et table sur la création d'extensions propres à ces derniers pour apporter le support de nouveaux formats. Si aujourd'hui <a title="YouTube" href="http://www.youtube.com/html5">YouTube</a> et <a title="Vimeo" href="http://vimeo.com/blog:268">Vimeo</a> ont choisi le H.264, <a title="DailyMotion" href="http://www.dailymotion.com/openvideodemo">DailyMotion</a> joue les fidèles Mozilla avec sa démo basée sur Ogg et ne supportant que Firefox.</p>
<p>Chrome et Safari poussent H.264 tandis que Mozilla le rejette totalement et pousse les formats libres Vorbis et Theora (Ogg). Le gros avantage d'H.264, à mon sens, tient au fait qu'il est parfaitement adapté à l'embarqué et beaucoup plus optimisé que Theora. Malgré le barrage de Firefox (25% de parts de marché), avec Apple et Google le codec H.264 semble avoir de beaux jours devant lui. Google qui est justement le plus gros contributeur de Mozilla, fournira peut-être une extension, sinon ce sera probablement du codec pack pour tous.</p>
<p>Codecs supportés par navigateurs</p>
<table style="border: 1px solid black" border="0" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td style="color: #ffffff; border: 1px solid black" bgcolor="#663366"><strong>Navigateur</strong></td>
<td style="color: #ffffff; border: 1px solid black" bgcolor="#663366"><strong>Ogg</strong></td>
<td style="color: #ffffff; border: 1px solid black" bgcolor="#663366"><strong>MP3</strong></td>
<td style="color: #ffffff; border: 1px solid black" bgcolor="#663366"><strong>WAV</strong></td>
<td style="color: #ffffff; border: 1px solid black" bgcolor="#663366"><strong>MP4</strong></td>
</tr>
<tr>
<td style="border: 1px solid black"><strong>Firefox 3.5</strong></td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">-</td>
</tr>
<tr>
<td style="border: 1px solid black"><strong>Safari 4</strong></td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">Ok</td>
</tr>
<tr>
<td style="border: 1px solid black"><strong>Chrome 3</strong></td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">Ok</td>
</tr>
<tr>
<td style="border: 1px solid black"><strong>Opera 10</strong></td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">Ok</td>
<td style="border: 1px solid black">-</td>
</tr>
<tr>
<td style="border: 1px solid black"><strong>IE</strong></td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">-</td>
<td style="border: 1px solid black">-</td>
</tr>
</tbody>
</table>
<p>Internet Explorer est pour le moment hors-jeu, sauf si on installe <a title="Google Chrome Frame" href="http://code.google.com/intl/fr-FR/chrome/chromeframe/">Google Chrome Frame</a>. Mais il semblerait que Microsoft s'intéresse au sujet pour l'avenir et participe à la rédaction de la spécification. En attendant, Flash conserve une avance confortable et profite de sa très large base installée. Le changement arrive bizarrement par l'embarqué, iPhone et iPod Touch en tête, qui, d'une part, supportent pleinement les balises <code>audio</code>, et <code>video</code>, et d'autre part prouvent que les utilisateurs peuvent se passer de Flash sur le web.</p>
<h4><a name="LeCanvas"></a>Le Canvas</h4>
<p>Passons maintenant au <code>canvas</code>. Inventé par Apple pour le Dashboard d'OS X et ses widgets, le <code>canvas</code> fournit une API JavaScript pour le dessin 2D. La balise définit une aire de dessins avec sa hauteur et sa largeur. L'objet DOM donne accès au contexte graphique qui possède les primitives de dessins. Outre les formes géométriques standards, l'API permet de faire de la composition, des transformations, de manipuler des images et d'afficher du texte formaté. Avec un timeout ou un intervalle sur l'objet et un peu de JavaScript, il devient possible d'animer les dessins. Les implémentations ne sont pas encore très optimisées. Un simple gif animé reste pour le moment plus performant en terme d'animation. Il existe déjà un tas de librairie JS construites autour de l'élément <code>canvas</code> pour générer des graphes et des charts par exemple (<a title="Flotr" href="http://solutoire.com/flotr/">Flotr</a>, <a title="ProtoChart" href="http://www.deensoft.com/lab/protochart/">ProtoChart</a>, <a title="fgCharting" href="http://www.filamentgroup.com/lab/jquery_visualize_plugin_accessible_charts_graphs_from_tables_html5_canvas/">fgCharting</a>).</p>
<div class="syntax_hilite">
<div id="html-16">
<div class="html"><span style="color: #009900;">&lt;canvas <span style="color: #000066;">id</span>=firstCanvas<span style="color: #ff0000;">"&gt;</span>Browser does not support the canvas element.<span style="color: #009900;">&lt;/canvas&gt;</span><br />
<span style="color: #009900;">&lt;script type="</span><span style="color: #000066;">text</span>/JavaScript<span style="color: #ff0000;">"&gt;</span><br />
var canvas=document.getElementById('myCanvas');<br />
var ctx=canvas.getContext('2d');<br />
ctx.fillStyle='#FF0006';<br />
ctx.fillRect(0,0,80,120);<br />
<span style="color: #009900;">&lt;/script&gt;</span> </span></div>
</div>
</div>
<p></p>
<p>Les détracteurs déplorent l'utilisation d'une API procédurale, et l'absence d'éléments crées dans l'arbre DOM de la page comme le fait SVG. Autre inconvénient, <code>canvas</code> travaille la composition directement en pixels et non en calques. SVCKit a donc implémenté en grande partie SVG dans <code>canvas</code> dans <a title="SVGCanvas" href="http://svgkit.sourceforge.net/web/SVGCanvas.html">SVGCanvas</a>. Il existe déjà beaucoup de documentations et tutoriels autour de <code>canvas</code> qui rencontre, malgré ses défauts (de jeunesse ?), un grand succès. Mozilla a même développé un IDE en ligne basé sur <code>canvas</code>, nom de code : <a title="BeSpin" href="https://bespin.mozilla.com/">BeSpin</a>.</p>
<p>Voilà pour les domaines d'application, passons maintenant à la question des navigateurs. Avec Apple pour inventeur et Mozilla comme évangéliste, <code>canvas</code> est déjà supporté nativement sur Safari, Firefox, Chrome et Opéra. Comme d'habitude IE est à la traine, mais il existe des contournements comme le plugin <a title="IECanvas" href="http://hg.mozilla.org/users/vladimir_mozilla.com/iecanvas">IECanvas</a>, ou le portage Flash <a title="ExplorerCanvas" href="http://code.google.com/p/explorercanvas/">ExplorerCanvas</a>.</p>
<h3><a name="Conclusion"></a>Conclusion</h3>
<p>Nous voici à la fin de ce tour d'horizon des nouveautés d'HTML5, côté contenu du moins.<br />
Avec les grands du web dans la poche, HTML5 est déjà promis à un bel avenir, malgré son jeune age. La prochaine échéance du W3C devrait être le passage en recommandation dans le courant de cette année peut-être. Si les WebForms ne sont pas pour tout de suite, le multimédia et le canvas sont déjà suffisamment supportés pour être utilisés aujourd'hui. Il faudra attendre la sortie d'IE 9 pour connaître les plans concrets de Microsoft sur le sujet. A mon humble avis, Microsoft intégrera HTML5 au fur et à mesure qu'il s'imposera sur le web. Il faudra aussi regarder de près l'évolution du standard CSS car HTML5 ne va pas sans CSS3. De ce côté, pas de crainte à avoir puisque même IE est dans la course.</p>
<p>Il reste un problème d'outillage, car il n'existe pas pour le moment de WYSIWYG compatible HTML5. Et il ne faut sans doute pas compter sur Adobe pour le faire rapidement. Apple propose déjà DashCode pour créer des widgets ou des applications web iPhone avec un éditeur graphique bien monté. Mais l'export vers d'autres navigateurs est presque impossible tant les applications construites reposent sur des fonctionnalités spécifiques de Safari.</p>
<p>Dans le prochain article, je vous présenterai les nouveautés JavaScript poussées par HTML5 et leur état actuel d'implémentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/03/02/html-5-les-nouveaux-elements/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
