<?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>Robusta : Java &#38; RESTful Web Services &#187; Web 2.0</title>
	<atom:link href="https://blog.developpez.com/java_rest/pcategory/web-2-0/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/java_rest</link>
	<description></description>
	<lastBuildDate>Fri, 24 Dec 2010 11:23:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>L&#8217;introspection en Javascript</title>
		<link>https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript</link>
		<comments>https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript#comments</comments>
		<pubDate>Wed, 04 Aug 2010 12:40:26 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[ExtJs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Petit article rapide pour donner un exemple d&#8217;introspection, c&#8217;est-à-dire la faculté de récupérer la valeur d&#8217;un attribut, ou d&#8217;exécuter une fonction en connaissant le nom de l&#8217;attribut ou de la fonction. Vite fait : alert(myObject['attributeName']); affiche la valeur de l&#8217;attribut attributeName de l&#8217;objet myObject. alert ( (myObject['functionName'])() ); affiche ce que renvoie la fonction functionName() de myObject. A quoi ca sert ? L&#8217;introspection est courante en Java lorsque l&#8217;on travaille sur les Annotations. En Groovy, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Petit article rapide pour donner un exemple d&rsquo;introspection, c&rsquo;est-à-dire la faculté de récupérer la valeur d&rsquo;un attribut, ou d&rsquo;exécuter une fonction en connaissant le nom de l&rsquo;attribut ou de la fonction.</p>
<h3>Vite fait : </h3>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alert(myObject['attributeName']);</div></div>
<p>affiche la valeur de l&rsquo;attribut <strong>attributeName</strong> de l&rsquo;objet <strong>myObject</strong>.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alert ( (myObject['functionName'])() );</div></div>
<p>affiche ce que renvoie la fonction <strong>functionName()</strong> de <strong>myObject</strong>.</p>
<h3>A quoi ca sert ?</h3>
<p>L&rsquo;introspection est courante en Java lorsque l&rsquo;on travaille sur les <a href="http://adiguba.developpez.com/tutoriels/java/tiger/annotations/#L4">Annotations</a>. En <a href="http://ericreboisson.developpez.com/tutoriel/java/groovy/">Groovy</a>, c&rsquo;est la base du <em>metaprogramming </em> et autre &lsquo;magie&rsquo; du langage.</p>
<p>En Javascript, je l&rsquo;utilise surtout pour créer des composants ExtJs :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/* Au passage, voici une façon de créer une Class en Javascript */ <br />
function ComboObject(id, name){ <br />
&nbsp; &nbsp; this.id=id; <br />
&nbsp; &nbsp; this.name=name; <br />
} <br />
&nbsp;<br />
/* Et d'ajouter dynamiquement une fonction */ <br />
ComboObject.prototype.toString = function(){ <br />
&nbsp; &nbsp; return this.name+&quot; (&quot;+this.id+&quot;); &quot;; <br />
}; <br />
&nbsp;<br />
&nbsp;<br />
var o1 = new ComboObject(1, &quot;Jo&quot;); <br />
var o2 = new ComboObject(2, &quot;Jo2&quot;); <br />
var o3 = new ComboObject(3, &quot;Jo3&quot;); <br />
var o4 = new ComboObject(4, &quot;Jo4&quot;); <br />
&nbsp;<br />
var array = [o1, o2, o3, o4]; <br />
&nbsp;<br />
new SimpleCombo( <br />
{ <br />
&nbsp; &nbsp; xtype : 'simple-combo', <br />
&nbsp; &nbsp; model : array, <br />
&nbsp; &nbsp; valueField: 'id', <br />
&nbsp; &nbsp; displayField: 'name' <br />
} <br />
);</div></div>
<p>La machinerie interne de mon SimpleCombo utilise assez simplement l&rsquo;introspection et l&rsquo;on peut déclarer &lsquo;à droite&rsquo; l&rsquo;attribut sur lequel on travail. Le combo affichera l&rsquo;attribut <strong>name </strong>et le formulaire enverra la valeur <strong>id</strong>. Si <strong>displayField </strong>n&rsquo;est pas renseigné, on peut alors exécuter la fonction <strong>toString()</strong>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT n&#8217;est pas tout à fait du Java</title>
		<link>https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java</link>
		<comments>https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java#comments</comments>
		<pubDate>Sun, 16 Aug 2009 16:34:21 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[GWT émule en effet certaines fonctionnalités de Java pour les traduire en Javascript dans l&#8217;environnement d&#8217;un navigateur web standard. Importez simplement une bibliothèque quelconque, comme JDOM, et vous aurez des messages d&#8217;erreurs en pagaye. Seule des bibliothèques spécialement conçues pourront être utilisées à la fois en GWT client et dans n&#8217;importe quelle JVM. A chaque fois que vous écrivez du code Java fonctionnant à la fois côté serveur et client, il faut garder en tête [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>GWT émule en effet certaines fonctionnalités de Java pour les traduire en Javascript <strong>dans l&rsquo;environnement</strong> d&rsquo;un navigateur web standard.<br />
Importez simplement une bibliothèque quelconque, comme JDOM, et vous aurez des messages d&rsquo;erreurs en pagaye. Seule des bibliothèques spécialement conçues pourront être utilisées à la fois en GWT client et dans n&rsquo;importe quelle JVM.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/gwt/gwt-compatible.png" alt="GWT Compatible" title="" /><br />
<span id="more-26"></span></p>
<p>A chaque fois que vous écrivez du code Java fonctionnant à la fois côté serveur et client, il faut garder en tête de :</p>
<p>&#8211; GWT utilise directement les composants du navigateur : il utilise le DOM interne, ainsi que l&rsquo;objet XmlHttpRequest- et donc ne connait ni Sax, ni JDOM, si le java.net.HttpClient<br />
 &#8211; Ne pas utiliser de fonctions System : il n&rsquo;y a pas de compatibilité entre la JVM et le moteur du navigateur. java.util.Locale est incompatible avec GWT car est capable de lire une Locale par défaut dans le System de la JVM<br />
&#8211; Ne pas lire un fichier : il est très malheureusement impossible d&rsquo;utiliser les ResourceBundle pour internationaliser son code.<br />
&#8211; Ne pas se mêler des Charset : le fonctionnement est trop différent entre la JVM et le navigateur. Je ne suis pas spécialiste, mais concrètement, les fonctions de type public byte[] getBytes(&laquo;&nbsp;UTF-8&Prime;) ne fonctionneront pas. Cela rend les fonctions de types MD5 et base64 sont pour l&rsquo;instant incompatibles.<br />
&#8211; Vérifier <a href="http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html">la liste des fonctions émulées</a> : une fonction assez simple comme Class.getSimpleName() n&rsquo;est pas émulée.</p>
<p>Alors est-il possible d&rsquo;écrire une bibliothèque Java utilisable – et utile &#8211; côté client et serveur ? Oui, vous y arriverez en y passant suffisamment de temps et à la simple condition de maîtriser le concept de l&rsquo;interface. Vous pouvez aussi attendre Octobre et la sortie de <a href="http://www.robustaweb.com/library">Robusta Web Library</a> qui vous facilitera grandement la tâche.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google App Engine : De la grêle dans les nuages</title>
		<link>https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n</link>
		<comments>https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n#comments</comments>
		<pubDate>Fri, 03 Jul 2009 21:06:11 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Google App Engine est le système de Cloud Computing de Google. Par rapport à ses concurrents, il innove en quelques points : Aucune configuration du serveur ni de la base de donnée : on dépose son application dans un conteneur. Il n&#8217;y a pas à choisir dans une gamme de serveurs : les requêtes seront exécutées par Google, et on sait qu&#8217;ils le font bien La facturation est faite selon les coûts réels : si [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Google App Engine est le système de Cloud Computing de Google.  Par rapport à ses concurrents, il innove en quelques points :</p>
<ul>
<li>Aucune configuration du serveur ni de la base de donnée : on dépose son application dans un conteneur.</li>
<li>Il n&rsquo;y a pas à choisir dans une gamme de serveurs : les requêtes seront exécutées par Google, et on sait qu&rsquo;ils le font bien</li>
<li>La facturation est faite selon les coûts réels : si votre application fait un bide, vous ne payez rien</li>
<li>L&rsquo;application est développée en un seul langage : Python, ou Java depuis Mars</li>
</ul>
<p>Cette différentiation colle vraiment à l&rsquo;innovation. Un bon programmeur Java avec une idée peu créer son application sans perdre de temps à configurer linux+apache+ssl ni faire un prévisionnel des capacités de serveur. Avec <a href="http://www.edupassion.com">Edupassion.com</a>, je sais de quoi je parle. Et si personne ne se connecte, il n&rsquo;y a pas de coût de serveur inutile, et là aussi je sais&#8230; euh passons.</p>
<p>Malheureusement, concrètement, App Engine en Java ne marche pas.<br />
<span id="more-25"></span><br />
Il est très simple de créer une application HTML, avec Ajax et même GWT, puis de l&rsquo;uploader. C&rsquo;est ce que j&rsquo;ai fait pour le site de mon entreprise, <a href="http://www.robustaweb.com">Robusta Web</a>. Si le site en fonctionne pas, essayez&#8230; trois minutes plus tard ! D&rsquo;après le log, à cause d&rsquo;une jsp déclanchant com.google.apphosting.api.DeadlineExceededException et java.security.PrivilegedActionException. Il semble que la <strong>security</strong> passe ou bloque de temps à autre. Etonnnant !</p>
<p>J&rsquo;ai tout de suite essayé d&rsquo;installer JAX-RS avec Jersey, mais non, pas possible, le container refuse. On propose une version adaptée, qui marche un peu, mais bloque aléatoirement l&rsquo;accès au site &#8211; cette fois-ci avec une vraie exception. Normal, c&rsquo;est du bidouillage.</p>
<p>Plus gênant est l&rsquo;utilisation des JSP et son mapping. http://www.robustaweb.com/myjax/bond/ fonctionne, mais pas http://www.robustaweb.com/myjax/bond . Différence subtile, pas contraire aux <a href="http://jcp.org/aboutJava/communityprocess/final/jsr245/index.html">spécifications assez muettes</a>, mais juste incroyable.</p>
<p>Mais le grand problème est l&rsquo;accès aux données. D&rsquo;une part à cause des couches successives JPA->JDO->Implementation Google->DataNucleus->BigTable, comme l&rsquo;avait déjà fait remarqué <a href="http://www.dotnetguru2.org/bmarchesson/index.php?p=1045&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">Bruno Marchesson</a>. Pour faire court, quoi que vous tentiez, cela échouera :).</p>
<p>J&rsquo;ai quand même réussi à &laquo;&nbsp;persister&nbsp;&raquo; quelques objets, et même à les lire. Mais s&rsquo;il existe peut-être des logiciels permettant de visualiser ces données, aucun n&rsquo;est clairement référencé. Alors qu&rsquo;avec une table MySql, vous n&rsquo;avez aucun problème à savoir ce que vos tests ont générés.</p>
<p>Pour l&rsquo;instant App Engine me parait donc inutilisable dès qu&rsquo;il s&rsquo;agit de sauver des données. Il semble dangereux d&rsquo;y mettre un simple site avec des JSP. Quelques pages HTML peut-être&#8230;.</p>
<p>Mais n&rsquo;oublions pas que App Engine est en Early Access, et <strong>je suis plutôt optimiste</strong> : Google developpe très bien ses produits quand ils trouvent un public en face. J&rsquo;y retournerai dans six mois.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Je pense que je vais m&#8217;arrêter là</title>
		<link>https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la</link>
		<comments>https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la#comments</comments>
		<pubDate>Tue, 11 Nov 2008 15:48:10 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RESTful]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[JPA (Java Persistence API) sera sans doute le dernier de mes joujoux technologiques pour bâtir l&#8217;architecture de la plateforme pédagogique Edupassion.com. Tout cela fait beaucoup de technologies pour un seul homme. Ext-JS risque d&#8217;être le point faible&#8230; et le plus visible. Le projet est donc séparé en 6 modules : Code Browser : HTML reçu par la front view, Ajax vers le web service Front view (Module Edupassion) : Distribution du HTML, redirection au Web [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JPA (Java Persistence API) sera sans doute le dernier de mes joujoux technologiques pour bâtir l&rsquo;architecture de la plateforme pédagogique <a href="http://www.edupassion.com">Edupassion.com</a>.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/technos/diagramme.gif" alt="technologies web" title="" /><br />
Tout cela fait beaucoup de technologies pour un seul homme. Ext-JS risque d&rsquo;être le point faible&#8230; et le plus visible.<br />
<span id="more-14"></span><br />
Le projet est donc séparé en 6 modules :
<ul>
<li><strong>Code Browser</strong> : HTML reçu par la front view, Ajax vers le web service</li>
<li><strong>Front view</strong> (Module Edupassion) : Distribution du HTML, redirection au Web Service</li>
<li><strong>Web Service</strong> (module wsedupassion) : http -> JSP -> Javabean -> validation -> accès données -> analyse -> résultat xml</li>
<li><strong>Code métier</strong> (module e-library) : contient les classes School, Teacher, Student, Work, etc.</li>
<li><strong>Accès données</strong> (module JPA+Crud) : Les classes Entities sont générées par Netbeans 6.5. Le Crud convertit ces entities en classes métiers de e-library.</li>
<li><strong>La base de donnée</strong> : On y accède soit par les entities, soit par des requêtes JPA, et parfois par des requêtes jdbc.</li>
</ul>
<p>
<strong>JPA</strong><br />
La seule originalité est la séparation franche entre les Entities issues de la Bdd et les classes métiers qui en sont presque des clones. Mais pour moi il est hors de question de rajouter la moindre ligne au milieu d&rsquo;un code remplit d&rsquo;annotation et de requêtes à mon avis difficile à maintenir.</p>
<p>J&rsquo;apprécie cependant énormément de faire un Crud via ces Entities plutôt que par JDBC. La maintenance est plus simple, puisque, par exemple, en renommant une colonne de ma BDD, Netbeans génèrera des classes différentes et fera remarquer une erreur dans le code de mon CRUD. Cela est impossible avec du JDBC pur.
</p>
<p><strong>REST</strong><br />
L&rsquo;accès aux web service se fait par REST, via des requêtes GET, POST, PUT et DELETE. Il a fallut pour cela modifier le fichier de Prototype, ce qui n&rsquo;est pas très difficile. Un Web Service RESTFul permet principalement une montée en charge du projet sereine, sans modifier le code source.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Edupassion en version Alpha</title>
		<link>https://blog.developpez.com/java_rest/p5765/web-2-0/edupassion_en_version_alpha</link>
		<comments>https://blog.developpez.com/java_rest/p5765/web-2-0/edupassion_en_version_alpha#comments</comments>
		<pubDate>Tue, 27 May 2008 16:55:43 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce blog Rest &#38; Java tire ses exemples de l&#8217;écriture du site Edupassion.com Après le bulletin de notes, voici l&#8217;éditeur de cours. Vous pouvez tester de ce début de préversion en vous connectant via les login/pass : edupassion/edupassion ou me demander un compte (ou toute autre question) en m&#8217;écrivant à nzozol@edupassion.com Technologiquement parlant, l&#8217;éditeur incorpore côté Client TinyMCE et une interface Ajax spécifique au métier de l&#8217;enseignant. Le Client adresse ses requêtes à un serveur [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ce blog Rest &amp; Java tire ses exemples de l&rsquo;écriture du site <a href="http://www.edupassion.com">Edupassion.com</a><br />
Après le bulletin de notes, voici l&rsquo;éditeur de cours.</p>
<blockquote><p>
<img src="http://nicolas-zozol.ftp-developpez.com/blog/versionalpha/chapitres.jpg" alt="" title="Les Châpitres" />
</p></blockquote>
<p>Vous pouvez tester de ce début de préversion en vous connectant via les login/pass : edupassion/edupassion ou me demander un compte (ou toute autre question) en m&rsquo;écrivant à nzozol@edupassion.com</p>
<p><span id="more-13"></span></p>
<p>Technologiquement parlant, l&rsquo;éditeur incorpore côté Client <a href="http://tinymce.moxiecode.com/">TinyMCE </a>et une interface Ajax spécifique au métier de l&rsquo;enseignant. Le Client adresse ses requêtes à un serveur Tomcat jouant avec des JSP et des Beans. Je ferais prochainement un tutoriel sur l&rsquo;intérêt d&rsquo;un Web Service en JSP, par rapport aux Servlets ou JSF.</p>
<p>Le transfert Client-Serveur étant en XML, j&rsquo;inclus au passage des méta-données sur le texte comme &lt;lieu&gt;Angleterre&lt;/lieu&gt;. Cela permettra plus tard la génération d&rsquo;exercices automatiques.</p>
<blockquote><p>
<img src="http://nicolas-zozol.ftp-developpez.com/blog/versionalpha/guerre100ans.jpg" alt="" title="Guerre de Cent ans" />
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A la base, je n&#8217;ai rien contre Internet Explorer</title>
		<link>https://blog.developpez.com/java_rest/p5675/xml/web_a_la_base_je_n_ai_rien_contre_intern</link>
		<comments>https://blog.developpez.com/java_rest/p5675/xml/web_a_la_base_je_n_ai_rien_contre_intern#comments</comments>
		<pubDate>Mon, 12 May 2008 14:35:21 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[JsUnit]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mais les images parlent d&#8217;elles-mêmes : Après cette accroche quelque peu racoleuse, je m&#8217;explique : JsUnit est un outil permettant de tester ses fonctions écrit en JavaScript. C&#8217;est tout simplement l&#8217;équivalent Javascript de JUnit. J&#8217;ai programmé mes tests au fur et à mesure en utilisant Firefox, puis à la fin de la semaine, je me suis rappelé l&#8217;existence d&#8217;Internet Explorer. Au vu des résultats, je me suis dit que la compatibilité présumée de Prototype envers [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Mais les images parlent d&rsquo;elles-mêmes :</p>
<table width="100%" border="0">
<tr>
<td><img src="http://nicolas-zozol.ftp-developpez.com/blog/junit-ff-ie/Avec%20FF.png" alt="Avec FF" title="Avec Firefox" /></td>
<td><img src="http://nicolas-zozol.ftp-developpez.com/blog/junit-ff-ie/AvecIE.png" alt="Avec IE" title="Avec IE" /></td>
</tr>
</table>
<p>Après cette accroche quelque peu racoleuse, je m&rsquo;explique :<br />
<a href="http://www.jsunit.net/">JsUnit </a>est un outil permettant de tester ses fonctions écrit en JavaScript. C&rsquo;est tout simplement l&rsquo;équivalent Javascript de JUnit. J&rsquo;ai programmé mes tests au fur et à mesure en utilisant Firefox, puis à la fin de la semaine, je me suis rappelé l&rsquo;existence d&rsquo;Internet Explorer. Au vu des résultats, je me suis dit que la compatibilité présumée de Prototype envers FF et IE allait prendre du plomb dans l&rsquo;aile. Il m&rsquo;a donc fallu chercher l&rsquo;origine de ces bugs.</p>
<p><span id="more-17"></span></p>
<h3>Première partie : des variations minimes mais suffisantes</h3>
<p>Les lecteurs avisés me diront que je ne teste pas la même chose, puisque j&rsquo;ai 56 tests sur FireFox et 59 sur IE. C&rsquo;est parce que JUnit sous IE s&rsquo;amuse à évaluer des fonctions telles que celle-ci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/** <br />
function testControllers(){}; <br />
*/</div></div>
<p><center>***</center></p>
<p> Avec Prototype, j&rsquo;ai  étendu l&rsquo;objet Element pour y mettre la fonction getParentElement() qui  renvoit le paragraph le plus proche de l&rsquo;élément.<br />
  J&rsquo;utilise donc la ligne :<strong> parent=element.up(&quot;.paragraph&quot;);</strong><br id="s2ok" /><br />
  IE  me renvoit une erreur &quot;Not Implemented&quot;. Je pensais qu&rsquo;il y  avait une erreur avec l&rsquo;implémentation de up() par  Prototype mais en fait mÔnsieur Internet Explorer n&rsquo;accepte pas le nom de variable parent. Essayez<strong> parent=&quot;&quot;</strong> ou <strong>parent=&quot;java&quot;</strong> et vous aurez une erreur &quot;Not Implemented&quot;.<br id="me:o" /><br />
En déclarant la variable<strong> var parent=&quot;&quot;</strong>, tout va mieux.</p>
<p><center>***</center></p>
<p> Il faut ensuite savoir que lorsque vous écriver du code HTML, les moteurs de Firefox et IE les réécrivent derrière vous. Cela se voit en utilisant <strong>alert(monElement.innerHTML)</strong>. J&rsquo;ai repéré deux problèmes notables :</p>
<p>Internet Explorer réécrit <strong><input value=I number=&quot;I&quot;></strong>  au lieu de <strong><input value=&quot;I&quot; number=&quot;I&quot;></strong>. Les guillemets de l&rsquo;attribut value disparait : ce qui fait que value n&rsquo;est d&rsquo;ailleurs plus un attribut au sens xml. Assez génant pour  les tests unitaires tels que celui-ci :<br />
  <strong>assertTrue (divControllers.innerHTML.include(&lsquo; value=&quot;I&quot; &lsquo;));</strong></p>
<p><center>***</center></p>
<p>Internet Explorer réécrit ses balises en majuscules. InnerHTML renvoit H3 au lieu de h3. Il faut donc réécrire les tests :<br />
   <strong>assertTrue(divForm.innerHTML.toLowerCase().include(&lsquo;h3&prime;));</strong><br />
au lieu de   :<br />
   <strong>assertTrue(divForm.innerHTML.include(&lsquo;h3&prime;));</strong></p>
</p>
<h3>Deuxième partie : Le XML avec Prototype</h3>
<p>Dans mes tests unitaires, j&rsquo;utilise une String :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; var result=&amp;quot;&lt;object&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;lastname&gt;Zozol&lt;/lastname&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;firstname&gt;Nicolas&lt;/firstname&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;web-site&gt;http://www.edupassion.com&lt;/web-site&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;identifiant&gt;1&lt;/identifiant&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;role&gt;professeur&lt;/role&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;level&gt;admin&lt;/level&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;/object&gt;&amp;quot;;</div></div>
<p>Et je teste ma fonction sensée recevoir transport.responseText.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; transport=new Object(); <br />
&nbsp; transport.responseText=result; <br />
&nbsp; assertTrue(maFonction(result)==&amp;quot;tout va bien&amp;quot;);</div></div>
<p>Une fonction utilisant transport.responseText est à priori plus facile à tester qu&rsquo;une autre utilisant transport.responseXML.</p>
<p>  <strong>result.select(&quot;firstname&quot;)[0].innerHTML</strong>  fonctionne très bien sous FireFox et me renvoit &laquo;&nbsp;Nicolas&nbsp;&raquo;. Mais sous IE, impossible de parser un  élément non inscrit dans le document ! Prototype fonctionne bien, mais  considère, sous IE, <strong>result </strong>comme une string, et pas comme un ensemble  d&rsquo;élément organisés en arbre. Il est donc nécessaire de passer par responseXML et d&rsquo;ignorer ici les avantages de Prototype.</p>
<p>Le test unitaire de la fonction traitant le résultat devient plus compliqué : le Mock object n&rsquo;est plus une String mais un document. Si vous avez une petite fonction fiable transformant mon  String en document XML, je suis preneur.</p>
<h3>Finalement, on y arrive.</h3>
<table width="100%" border="0">
<tr>
<td><img src="http://nicolas-zozol.ftp-developpez.com/blog/junit-ff-ie/result-final.png" alt="Resultat" title="Résultat" /></td>
</tr>
</table>
<p><br id="fapi" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Récupérer en Javascript la valeur des boutons Radio Prototype</title>
		<link>https://blog.developpez.com/java_rest/p5353/ajax/recuperer_en_javascript_la_valeur_des_bo</link>
		<comments>https://blog.developpez.com/java_rest/p5353/ajax/recuperer_en_javascript_la_valeur_des_bo#comments</comments>
		<pubDate>Sat, 22 Mar 2008 17:00:43 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Astuce du Jour]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Classiquement, on récupère la valeur de boutons radios HTML grâce à une balise FORM incorporant l&#8217;attribut action pointant sur un script php : &#60;form action =&#34;script.php&#34; &#62; &#60;input type=&#34;radio&#34; name=&#34;radioGroup&#34; id=&#34;radio&#34; value=&#34;LEAVE_IT&#34; /&#62;Leave It &#60;input type=&#34;radio&#34; name=&#34;radioGroup&#34; id=&#34;radio2&#34; value=&#34;TAKE_IT&#34; /&#62; Take It &#60;input type=&#34;button&#34; value=&#34;OK&#34; /&#62; &#60;/form&#62; Cette astuce du jour a pour but de récupérer le bouton radio en Javascript, avec la bibliothèque Prototype, sans script php, ni même la balise form. En Ajax, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Classiquement, on récupère la valeur de boutons radios HTML grâce à une balise FORM incorporant l&rsquo;attribut action pointant sur un script php :</p>
<blockquote>
<p>&lt;form action =&quot;script.php&quot; &gt; </p>
<p>&lt;input type=&quot;radio&quot; name=&quot;radioGroup&quot; id=&quot;radio&quot; value=&quot;LEAVE_IT&quot; /&gt;Leave It<br />
&lt;input type=&quot;radio&quot; name=&quot;radioGroup&quot; id=&quot;radio2&quot; value=&quot;TAKE_IT&quot; /&gt;  Take It<br />
&lt;input type=&quot;button&quot; value=&quot;OK&quot; /&gt;</p>
<p>&lt;/form&gt;</p>
</blockquote>
<p>Cette astuce du jour a pour but de récupérer le bouton radio en Javascript, avec la bibliothèque <a href="http://www.prototypejs.org/">Prototype</a>, sans script php, ni même la balise form.<br />
<span id="more-4"></span></p>
<p>En Ajax, on veut éviter le plus souvent possible l&rsquo;action sur les balises FORM. Même si l&rsquo;action est nulle : &lt;form action =&quot;&quot; &gt;, alors le navigateur affiche une nouvelle url : http://mypage?Submit=OK, par exemple. On peut utiliser un bouton de type &laquo;&nbsp;button&nbsp;&raquo; ou &laquo;&nbsp;submit&nbsp;&raquo; utilisant l&rsquo;attribut onclick=&nbsp;&raquo;doIt();&nbsp;&raquo;</p>
<p>La fonction javascript doIt() pourra alors récupérer la valeur du bouton radio avec cette fonction qui ne nécessite que l&rsquo;attribut name du groupe de boutons radio :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/** <br />
* Returns the value of the selected radio button in the radio group <br />
* returns &quot;&quot; if the radio is not found or if nothing is checked <br />
* Public Domain <br />
*/ <br />
function $RF(radioName){ <br />
&nbsp; &nbsp; array=$$('input'); <br />
&nbsp; &nbsp; var value=&quot;&quot;; <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; array.each( <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function (radio){ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (radio.hasAttribute(&quot;name&quot;) &amp;&amp; radio.readAttribute(&quot;name&quot;)==radioName) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (radio.checked==&quot;true&quot; || radio.checked) value=radio.getValue(); &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />
&nbsp; &nbsp;);//End of each() <br />
&nbsp; &nbsp;return value; &nbsp;<br />
}</div></div>
</blockquote>
<p>Le nom de la fonction est dans le plus (im)pur style Prototype, RF signifiant RadioForm.<br />
On l&rsquo;utilisera ainsi :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function doIt(){ <br />
&nbsp; alert($RF(&quot;radioGroup&quot;)); <br />
}</div></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft lance une OPA sur Yahoo !</title>
		<link>https://blog.developpez.com/java_rest/p5008/web-2-0/microsoft_lance_une_opa_sur_yahoo</link>
		<comments>https://blog.developpez.com/java_rest/p5008/web-2-0/microsoft_lance_une_opa_sur_yahoo#comments</comments>
		<pubDate>Fri, 01 Feb 2008 12:06:00 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ca y est, c&#8217;est fait, le loup est bel et bien sorti. M$ propose 45 milliards de dollards, soit le double de son trésor de guerre accumulé par la vente de licences Windows et Office. A ce prix-là, elle est pour sûr amicale. Selon moi, Yahoo! poosède trois activités majeures : le contenu, la publicité et les logiciels web (e-mails, jeux). Est-ce que ces activités combinées remporterons un succès équivalent à Office et Windows ? [&#8230;]]]></description>
				<content:encoded><![CDATA[<div align="justify">
<p>Ca y est, c&rsquo;est fait, le loup est bel et bien sorti. M$ propose 45 milliards de dollards, soit le double de son trésor de guerre accumulé par la vente de licences Windows et Office. A ce prix-là, <a href="http://www.techcrunch.com/2008/02/01/wow-microsoft-offers-446-billion-to-acquire-yahoo/">elle est pour sûr amicale</a>.</p>
<p>Selon moi, Yahoo! poosède trois activités majeures : le contenu, la publicité et les logiciels web (e-mails, jeux). Est-ce que ces activités combinées remporterons un succès équivalent à Office et Windows ? Quoi qu&rsquo;il en soit, Steve Balmer a pour ambition d&rsquo;avoir 30% de son chiffre d&rsquo;affaire issu de la publicité en ligne, et cela ne pouvait passer sans le rachat de Yahoo!</p>
<p>Sérieusement concurencé et souvent défait par Google sur la plupart de ses marchés, les actions de Yahoo! n&rsquo;ont pas cessé de chuter ces derniers trimesres bien qu&rsquo;elles furent, à l&rsquo;instar d&rsquo;Ebay et Amazon, encensées au sortir de la crise. Il y a déjà 4 ans&#8230; Ce sont ces succès à durée déterminée qui me font toujours douter des prix faramineux atteints par Yahoo et surtout Facebook. Ce matin l&rsquo;action valait 20$ et augmente de 50% car l&rsquo;offre de M$ correspond à 30$ l&rsquo;action. </p>
<p><a href="http://www.edupassion.com">Edupassion.com</a> n&rsquo;est pas à vendre, mais si il y a emballement, on peut négocier :D.
</div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Astuce du Jour : Création dynamique d&#8217;Elements HTML avec Prototype 1.6</title>
		<link>https://blog.developpez.com/java_rest/p5007/ajax/creation_dynamique_d_elements_html_avec_6</link>
		<comments>https://blog.developpez.com/java_rest/p5007/ajax/creation_dynamique_d_elements_html_avec_6#comments</comments>
		<pubDate>Fri, 01 Feb 2008 06:27:28 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Astuce du Jour]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[L&#8217;essence d&#8217;Ajax est de manipuler un objet ou un document sur le navigateur sans être géné par le temps de latence du serveur. Cette astuce du jour propose de préparer un peu le terrain en créant dynamiquement sur la page du contenu HTML. Nous verrons dans des articles plus fouillés comment enregistrer la modification sur le serveur. Le deuxième objectif est de documenter en français la fonction Element#insert( ) de Prototype, qui a ce jour [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>L&rsquo;essence d&rsquo;Ajax est de manipuler un objet ou un document sur le navigateur sans être géné par le temps de latence du serveur.</p>
<p>Cette astuce du jour propose de préparer un peu le terrain en créant dynamiquement sur la page du contenu HTML. Nous verrons dans des articles plus fouillés comment enregistrer la modification sur le serveur.<br />
Le deuxième objectif est de documenter en français la fonction <strong>Element#insert( ) de Prototype</strong>, qui a ce jour a été &laquo;&nbsp;oubliée&nbsp;&raquo; par les faiseurs de documentation.</p>
<p>Voici comment créer un Element HTML à l&rsquo;intérieur d&rsquo;un autre élément : </p>
<p><span id="more-15"></span></p>
<blockquote><p>
&lt;script type=&quot;text/javascript&quot; src=&quot;js/prototype.js&quot;&gt;&lt;/script&gt;</p>
<p>&lt;div id=&quot;haut&quot;&gt;Haut&lt;/div&gt;<br />
&lt;div id=&quot;bas&quot;&gt;Bas&lt;/div&gt;</p>
<p>&lt;script type=&quot;text/javascript&quot;&gt;<br />    /* Création de l&rsquo;élément */<br />    var numero = new Element(&lsquo;h3&prime;, { &lsquo;class': &lsquo;pNumber&rsquo; }).update(&lsquo;Titre&rsquo;);<br />    /* Insertion de l&rsquo;élément */<br />    $(&lsquo;haut&rsquo;).insert( {bottom: numero});</p>
<p>&lt;/script&gt;
</p></blockquote>
<p>&laquo;&nbsp;Mon dieu quelle horreur !&nbsp;&raquo; s&rsquo;écrierait tout programmeur orthodoxe de Java. J&rsquo;en fus et pourtant cette écriture complexe est extrèmement productive. Le fait d&rsquo;être compact est également un plus quand c&rsquo;est mélangé au milieu du XHTML.</p>
<p>Pour la création de l&rsquo;élément, vous trouverez la documentation et les exemples <a href="http://www.prototypejs.org/api/element">ici</a>. L&rsquo;insertion de l&rsquo;élément necessite plus d&rsquo;explications :</p>
<p><strong>$(&lsquo;haut&rsquo;)</strong> correspond bien-sûr à l&rsquo;élément HTML ayant pour id : &lsquo;haut&rsquo;. Pour les non-initiés à Prototype, cela correspond à <strong>document.getElementById(&lsquo;haut&rsquo;);</strong> tout en s&rsquo;assurant que <strong>$(&lsquo;haut&rsquo;)</strong> aura des propriétés compatibles avec tous les navigateurs.</p>
<p><strong>{bottom : numero}</strong> contient d&rsquo;une part la position, puis l&rsquo;élément OU le contenu à rajouter.<br />
On peut par exemple faire :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$('haut').insert( {after: '&lt;h3 class=&quot;pClass&quot;&gt;Petit paragraph&lt;/h3&gt;'}); <br />
$('haut').insert( {before: 'Un peu de texte, sans balise'});</div></div>
</blockquote>
<p>Il y a quatre positions possibles :  <strong>before, after, top , bottom</strong>. Voici ce que les différentes positions  donnent en pratique avec le code suivant : </p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var numero = new Element('h3', { 'class': 'pNumber' }).update('Titre'); /* nouvel element */ &nbsp; <br />
$('haut').insert( {position : numero }); /* Insertion */</div></div>
</blockquote>
<table width="95%" border="1">
<tr>
<td>position</td>
<td>code créé</td>
<td>resultat</td>
<td width="250">commentaire</td>
</tr>
<tr>
<td>before</td>
<td>
<h3>Titre</h3>
<p></p>
<div id=&quot;haut&quot;>Haut</div>
<p></p>
<div id=&quot;bas&quot;>Bas</div>
</p>
</td>
<td>
<h3>Titre</h3>
<div>Haut</div>
<div>Bas</div>
</td>
<td width="250">L&rsquo;element h3 est créé avant l&rsquo;élément &lsquo;haut&rsquo;</td>
</tr>
<tr>
<td>after</td>
<td>
<div id=&quot;haut&quot;>Haut</div>
<p></p>
<h3>Titre</h3>
<p></p>
<div id=&quot;bas&quot;>Bas</div>
<p>
      </td>
<td>
<div>Haut</div>
<h3>Titre</h3>
<div>Bas</div>
</td>
<td width="250">L&rsquo;element h3 est créé après l&rsquo;élément &lsquo;haut&rsquo;.<br /> <br />
    Il s&rsquo;intercalle donc entre les deux DIV</td>
</tr>
<tr>
<td>top</td>
<td>
<div id=&quot;haut&quot;>
<h3>Titre</h3>
<p>Haut</p></div>
<p></p>
<div id=&quot;bas&quot;>Bas</div>
</td>
<td>
<div>
<h3>Titre</h3>
<p>Haut</p></div>
<div>Bas</div>
</td>
<td width="250">L&rsquo;element h3 est créé à l&rsquo;intérieur de l&rsquo;élément &lsquo;haut&rsquo;.<br /> <br />
      Parmi les fils de  l&rsquo;élément &lsquo;haut&rsquo;, h3 est rajouté en tout premier.</td>
</tr>
<tr>
<td>bottom</td>
<td>
<div id=&quot;haut&quot;>Haut<br />
<h3>Titre</h3>
</div>
<p></p>
<div id=&quot;bas&quot;>Bas</div>
</td>
<td>
<div> Haut<br />
<h3>Titre</h3>
</div>
<div>Bas</div>
</td>
<td width="250">L&rsquo;element h3 est créé à l&rsquo;intérieur de l&rsquo;élément &lsquo;haut&rsquo;.<br />
Parmi les fils de  l&rsquo;élément &lsquo;haut&rsquo;, h3 est rajouté tout à la fin..</td>
</tr>
</table>
<p>Ces quatres possibilités rendent l&rsquo;ajout d&rsquo;Elements bien plus aisés que le temps du document.write(&#8230;). Attention toutefois au style de programmation : comme pour le PHP et sans doute le Ruby, on peut toutefois facilement faire proliférer les abominables guillemets simples, doubles et backslachés.</p>
<p>Dernière astuce :il est possible de raccourcir l&rsquo;écriture en se passant de la position et des accolades en écrivant simplement :</p>
<blockquote><p><code class="codecolorer text default"><span class="text">$('haut').insert( numero);</span></code></p></blockquote>
<p>
Cela revient à utiliser la position <strong>bottom</strong>, ce qui sera probablement 80% de vos insertions.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netvibes Ginger : une petite deception</title>
		<link>https://blog.developpez.com/java_rest/p4836/web-2-0/netvibes_ginger_une_petite_deception</link>
		<comments>https://blog.developpez.com/java_rest/p4836/web-2-0/netvibes_ginger_une_petite_deception#comments</comments>
		<pubDate>Wed, 23 Jan 2008 06:52:14 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai depuis quelque mois troqué ma page iGoogle pour Netvibes, plus pratique et faisant moins ramer mon Firefox. En passant à la conférence LeWeb3, j&#8217;ai pu obtenir une invitation à l&#8217;utilisation de Netvibes Ginger. Rappelons que Netvibes est une société francaise dont le but premier est d&#8217;offrir sur une seule page tout ce qui vous interesse dans le web via des flux RSS ou des Widgets. Netvibes a été très recemment courroné meilleure start-up internationale [&#8230;]]]></description>
				<content:encoded><![CDATA[<div align="justify">
<p>
J&rsquo;ai depuis quelque mois troqué ma page iGoogle pour <a href="http://www.netvibes.com">Netvibes</a>, plus pratique et faisant moins ramer mon Firefox. En passant à la conférence LeWeb3, j&rsquo;ai pu obtenir une invitation à l&rsquo;utilisation de Netvibes Ginger.
</p>
<p>
Rappelons que Netvibes est une société francaise dont le but premier est d&rsquo;offrir sur une seule page tout ce qui vous interesse dans le web via des flux RSS ou des Widgets. Netvibes  a été très recemment courroné meilleure start-up internationale par les blogs &laquo;&nbsp;influents&nbsp;&raquo;.
</p>
<p>
<img src="http://nicolas-zozol.developpez.com/blog/images/netvibes/goUniverse.png" width="480" height="86" alt="Go to universes" /></p>
<p>Avec Ginger, Netvibes devient social. Vous gardez vos flux dans des pages privées, et vous pouvez maintenant partager ces flux avec vos amis dans des &laquo;&nbsp;universes&nbsp;&raquo; (en anglais dans le texte).<br />

</p>
</div>
<p><span id="more-11"></span></p>
<div align="justify">
<p>
<img src="http://nicolas-zozol.developpez.com/blog/images/netvibes/envoyer%20univers.png" alt="Envoyer univers" />
</p>
<p>
<br />
Afin de trouver des amis à qui partager, on vous propose la méthode de la recherche par mail, ce qui a fait le succès de Facebook. C&rsquo;est <a href="http://www.kelblog.com/2007/10/facebook-le-tou.html">Cathy de Kelblog </a>qui va être contente. Autant je comprend que l&rsquo;on protège sa vie privée sur Facebook, surtout quand on classe ses amis par ordre de préférence, mais quel est le coté privé dans son organisation de flux déjà publics ? Notons que pour l&rsquo;instant vous ne trouverez par cette méthode que vos contacts <strong>déjà </strong>inscrits.<br />
<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/netvibes/findFriends.png" alt="Find friends" title="Trouver ses amis" /><br />

</p>
<p>
Ce que je ne comprend vraiment plus, c&rsquo;est pourquoi mettre un calendrier et un gestionnnaire d&rsquo;activités avec ses amis ? Je suppose que c&rsquo;est pour faire une synchronisation vers son Blackberry (vive la convergence et ses investisseurs !). Evidemment, ils savent ce qu&rsquo;ils font chez Netvibes, mais je me demande ce que cela m&rsquo;apporterait. Je suis allé chez Netvibes parceque les flux sont plus propres et plus rapides que iGoogle, pas pour me mettre à gérer des iCal (vous gérez vos iCal ?).<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/netvibes/activities.png" alt="Activités avec vos amis" title="Activités" /><br />
La bonne nouvelle, c&rsquo;est que je n&rsquo;ai pas d&rsquo;amis, donc pas d&rsquo;invitations à vérifier à chaque passage sur Netvibes.
</p>
<p>
<br />
Ce qui sera sans doute le plus utile est la recherche de flux et widgets par thèmes. Je n&rsquo;ai pas très bien compris si on arrrive sur le flux des Universes d&rsquo;autres personnes ou sur l&rsquo;ancienne fonctionnalité de recherche. Toujours est-il qu&rsquo;en tapant Education, j&rsquo;obtient les flux filtrés par Libération, ce qui est bien sympathique.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/netvibes/education.png" alt="Education" title="Education" />
</p>
<p>
<br />
Enfin, pour que Netvibes fasse de l&rsquo;argent, il sera plus tard possible d&rsquo;accéder aux flux de &laquo;&nbsp;Channels&nbsp;&raquo;. Peut-être des contenus travaillés, ou avec des droits &#8211; et de la publicité.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/netvibes/channels.png" alt="Channels" title="Channels" /></p>
<p>
<br />
 Pour l&rsquo;instant Netvibes est toujours aussi excellent, gratuit et sans pub. Bien utilisés, les réseaux sociaux peuvent être extrèmement utiles, mais Ginger ne m&rsquo;apporte rien et j&rsquo;espère que  cette extension restera discrète !
</p>
<p>PS : Techcrunch offre des invitations pour Netvibes Ginger <a href="http://www.techcrunch.com/2008/01/22/500-invites-for-netvibes-ginger-beta/">ici</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
