<?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>Espace de François &#187; Applications Web</title>
	<atom:link href="http://francois.goldgewicht.com/category/applications-web/feed/" rel="self" type="application/rss+xml" />
	<link>http://francois.goldgewicht.com</link>
	<description>Un peu de nouvelles technologies...</description>
	<lastBuildDate>Wed, 25 May 2011 23:44:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lancement d&#8217;Adaptive Labs</title>
		<link>http://francois.goldgewicht.com/2011/05/26/lancement-adaptive-labs/</link>
		<comments>http://francois.goldgewicht.com/2011/05/26/lancement-adaptive-labs/#comments</comments>
		<pubDate>Wed, 25 May 2011 23:44:07 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Mobiles]]></category>
		<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[Adaptive Labs]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=417</guid>
		<description><![CDATA[Je romps ce long silence radio pour vous informer que je suis l&#8217;heureux CEO et fondateur d&#8217;Adaptive Labs.
Adaptive Labs est une société qui réalise des applications web et mobiles centrées sur les utilisateurs. Cela signifie que nous nous concentrons sur les besoins, les volontés, les contraintes et les sentiments des utilisateurs à chaque étape de [...]]]></description>
			<content:encoded><![CDATA[<p>Je romps ce long silence radio pour vous informer que je suis l&#8217;heureux CEO et fondateur d&#8217;Adaptive Labs.</p>
<p><a href="http://www.adaptive-labs.fr" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adaptive-labs.fr');" target="_blank">Adaptive Labs</a> est une société qui réalise des applications web et mobiles centrées sur les utilisateurs. Cela signifie que nous nous concentrons sur les besoins, les volontés, les contraintes et les sentiments des utilisateurs à chaque étape de la conception.<br style="list-style-type: none; list-style-image: none; padding: 0px; margin: 0px;" /><br style="list-style-type: none; list-style-image: none; padding: 0px; margin: 0px;" />Adaptive Labs a 4 activités principales :<br style="list-style-type: none; list-style-image: none; padding: 0px; margin: 0px;" /></p>
<ul>
<li>Applications : nous créons des applications utiles, faciles à utiliser et rapides, qui exploitent pleinement les plateformes</li>
<li>Consulting : nous aimons notre travail et nous aimons le partager, donc nous pouvons vous aider à créer vos propres applications et définir vos propres stratégies</li>
<li>Support : nous travaillons dur pour vous fournir un support client rapide quand vous avez besoin d&#8217;aide avec nos applications</li>
<li>Veille technologique : nous passons 15% de notre temps à effectuer de la veille technologique pour découvrir et vous apporter des solutions innovantes</li>
</ul>
<p>Vous l&#8217;aurez deviné, la première création d&#8217;Adaptive Labs est&#8230; Rss Runner ! Qui, au passage, vient de passer la barre des 700 000 téléchargements.</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2011/05/26/lancement-adaptive-labs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave : premiers tests !</title>
		<link>http://francois.goldgewicht.com/2009/07/30/google-wave-premiers-tests/</link>
		<comments>http://francois.goldgewicht.com/2009/07/30/google-wave-premiers-tests/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 21:44:09 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Androïd]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Wave]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=325</guid>
		<description><![CDATA[Il y a déjà deux mois, suite à la présentation officielle de Google Wave à sa fameuse conférence Google IO, j&#8217;avais rédigé une présentation de cet outil en quelques mots. Je vous avais également fait part de ma hâte de tester cet outil qui a déjà tant fait parler de lui. Sauf que pour cela, [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a déjà deux mois, suite à la présentation officielle de <strong>Google Wave</strong> à sa fameuse conférence Google IO, j&#8217;avais rédigé <a href="http://francois.goldgewicht.com/2009/06/03/google-wave-en-quelques-mots/"  target="_blank">une présentation de cet outil en quelques mots</a>. Je vous avais également fait part de ma hâte de tester cet outil qui a déjà tant fait parler de lui. Sauf que pour cela, il fallait faire partie des quelques 25 000 chanceux invités par Google à tester le Google Wave Developer Sandbox.</p>
<p>J&#8217;avais, dès cette annonce, effectué une demande de compte sur la page dédiée. Imaginez donc ma joie lorsque j&#8217;ai découvert il y a 2/3 jours dans ma boîte de réception un e-mail intitulé &#8220;An invitation to Google Wave Developer Sandbox&#8221; ! J&#8217;ai donc gracieusement été invité à tester Google Wave, et j&#8217;en remercie vivement l&#8217;équipe Google Wave. Et, impatient comme un gamin, je ne me suis pas fait prier pour démarrer mes tests !</p>
<p>Avant toute chose, si vous souhaitez savoir ce qu&#8217;est Google Wave, je vous renvoie à <a href="http://francois.goldgewicht.com/2009/06/03/google-wave-en-quelques-mots/"  target="_blank">ma petite présentation</a>. Voici un premier bilan de mes deux premiers jours de test.</p>
<h2>Constat n°1 : Ouf, j&#8217;avais bien compris les concepts de Google Wave !</h2>
<p>J&#8217;ai en effet pu confirmer mon interprétation des notions et objectifs de l&#8217;outil Google Wave que j&#8217;avais présentés dans mon article après avoir étudié les vidéos et les slides diffusés par Google. Et donc, naturellement, mon grand intérêt à son égard, aux niveaux personnel et professionnel.</p>
<h2>Constat n°2 : L&#8217;application Web fonctionne bien&#8230; Dans l&#8217;ensemble !</h2>
<p>L&#8217;application Web, la composante &#8220;Produit&#8221; de l&#8217;outil Google Wave, est une sorte de GMail dopé. Elle fonctionne déjà bien dans son ensemble car elle permet de créer et manipuler des Waves avec des milliers d&#8217;autres participants du monde entier. Sa fluidité varie beaucoup : parfois très agréable à utiliser, elle l&#8217;est bien moins dans les périodes de grande activité. En effet, beaucoup de Waves atterrissent et évoluent dynamiquement dans notre boîte de réception car elles sont rattachées au groupe rassemblant tous les utilisateurs.</p>
<p>Il y a bien entendu des fonctionnalités non encore développées ainsi que de nombreux bugs mais cela ne fait que confirmer que la phase de maturation de ce produit va être longue. Ce serait de toute façon le cas puisque ce produit apporte une nouvelle façon de communiquer et de collaborer.</p>
<h2>Constat n°3 : Concernant les &#8220;vraies nouveautés&#8221;</h2>
<p>Quand je parle d&#8217;une &#8220;nouvelle façon de communiquer et de collaborer&#8221; : certains m&#8217;ont demandé quelles étaient les &#8220;vraies nouveautés&#8221; de cet outil, avec une certaine réserve due au fait que beaucoup des fonctionnalités de Google Wave existent déjà dans d&#8217;autres outils plus simples qui sont aujourd&#8217;hui largement utilisés. Je ne détaillerai pas ce point que j&#8217;avais largement décrit dans <a href="http://francois.goldgewicht.com/2009/06/03/google-wave-en-quelques-mots/"  target="_blank">ma petite présentation</a>, mais je rappellerais tout de même que <strong>Google Wave n&#8217;est pas révolutionnaire parce qu&#8217;il propose toutes ces fonctionnalités, mais parce qu&#8217;il les rassemble et les <span style="text-decoration: underline;">unifie de manière cohérente</span>, autour de la notion de Wave</strong>.</p>
<h2>Constat n°4 : Des extensions faciles à utiliser et à implémenter</h2>
<p>Plusieurs extensions existent déjà et sont agréables à utiliser. Même si parfois, les robots ne fonctionnent plus pendant quelques minutes. N&#8217;oublions pas qu&#8217;il s&#8217;agit d&#8217;une version de test !</p>
<p>J&#8217;ai voulu essayer d&#8217;implémenter une extension : il m&#8217;a fallu exactement <strong>une heure pour implémenter mon premier robot</strong> ! Pour rappel, un robot est un participant automatisé qui interagit avec les Waves et leurs participants : il s&#8217;agit en fait d&#8217;une application Google App Engine qui, une fois invitée à une Wave, réagit à des événement de type &#8220;un texte a été saisi par un participant&#8221; ou &#8220;un nouveau participant a rejoint la Wave&#8221;.</p>
<p>Mon robot, que j&#8217;ai nommé <strong>Dr. Maps</strong>, réagit simplement à des commandes du type /map adresse afin d&#8217;insérer dans une Wave la carte Google Maps associée à cette adresse. J&#8217;ai été frappé par l&#8217;engouement des utilisateurs de Google Wave : en un jour j&#8217;ai déjà reçu 67 e-mails de personnes intéressées par mon robot, dont beaucoup me font part de leurs idées pour l&#8217;améliorer !</p>
<p>J&#8217;ai donc créé un espace Web dédié à ce robot : <a href="http://code.google.com/p/golden-waves/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">http://code.google.com/p/golden-waves/</a>.</p>
<div class="mceTemp">
<dl class="wp-caption alignnone" style="width: 500px;">
<dt class="wp-caption-dt"><a href="http://code.google.com/p/golden-waves/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');"><img title="Dr. Maps screenshot" src="http://dr-maps.appspot.com/_wave/dr-maps-screenshot.png" alt="Dr. Maps screenshot" width="490" height="674" /></a></dt>
</dl>
</div>
<p>L&#8217;avenir nous dira ce qu&#8217;il adviendra de ce modeste robot !</p>
<h2>En conclusion</h2>
<p>Pour une fois je ferai court : <strong>il se passe quelque chose</strong>. Ce Google Wave ne laisse pas ses utilisateurs indifférents. Pour en être convaincu, il suffit de se perdre dans les centaines de Waves déjà créées dans le sandbox : beaucoup y voient des intérêts personnels (organisation de rendez-vous au restaurant ou au cinéma, partage de photos de vacances&#8230;) mais beaucoup d&#8217;autres y voient des intérêts professionnels (partage d&#8217;informations multi-sources, communication et collaboration homogènes&#8230;)</p>
<p>Il se passe quelque chose, donc. <strong>Mais concrètement, il est trop tôt pour prendre la pleine mesure de cet outil</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2009/07/30/google-wave-premiers-tests/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Comprendre REST en quelques points</title>
		<link>http://francois.goldgewicht.com/2009/07/22/comprendre-rest-en-quelques-points/</link>
		<comments>http://francois.goldgewicht.com/2009/07/22/comprendre-rest-en-quelques-points/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 10:18:32 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[Aeon Consulting]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=315</guid>
		<description><![CDATA[Si vous suivez ce blog alors vous connaissez mon &#8220;combat&#8221; contre les préjugés et incompréhensions concernant REST.
Dans cet esprit, j&#8217;ai initié sur le blog d&#8217;Aeon Consulting une série d&#8217;articles dont l&#8217;objectif est de définir ce qu&#8217;est vraiment REST en une dizaine de points. Les premiers concernent les notions de Ressource, URI et Adressabilité. Tout est [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous suivez ce blog alors vous connaissez mon &#8220;combat&#8221; contre les préjugés et incompréhensions concernant REST.</p>
<p>Dans cet esprit, j&#8217;ai initié sur le blog d&#8217;<a href="http://www.aeon-consulting.fr" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.aeon-consulting.fr');" target="_blank">Aeon Consulting</a> une série d&#8217;articles dont l&#8217;objectif est de définir ce qu&#8217;est vraiment REST en une dizaine de points. Les premiers concernent les notions de Ressource, URI et Adressabilité. Tout est là : <a href="http://www.aeon-consulting.fr/fr/blog/tag/rest/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.aeon-consulting.fr');" target="_blank">http://www.aeon-consulting.fr/fr/blog/tag/rest/</a>.</p>
<p>N&#8217;hésitez pas à donner votre avis, ces articles sont faits pour échanger !</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2009/07/22/comprendre-rest-en-quelques-points/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave en quelques mots</title>
		<link>http://francois.goldgewicht.com/2009/06/03/google-wave-en-quelques-mots/</link>
		<comments>http://francois.goldgewicht.com/2009/06/03/google-wave-en-quelques-mots/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 22:59:06 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Androïd]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Wave]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=279</guid>
		<description><![CDATA[Lars Rasmussen a annoncé tout récemment dans le blog officiel de Google ce qui pourrait bien être la killer app de Google : Google Wave. Il ne s&#8217;agit pas d&#8217;une simple application et elle ne sera ouverte au public que plus tard dans l&#8217;année mais elle fait déjà beaucoup parler d&#8217;elle.
Cet humble post s&#8217;adresse à [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Lars Rasmussen a annoncé tout récemment dans le <a href="http://googleblog.blogspot.com/2009/05/went-walkabout-brought-back-google-wave.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/googleblog.blogspot.com');" target="_blank">blog officiel de Google</a> ce qui pourrait bien être la <em>killer app</em> de Google : <strong>Google Wave</strong>. Il ne s&#8217;agit pas d&#8217;une simple application et elle ne sera ouverte au public que plus tard dans l&#8217;année mais elle fait déjà beaucoup parler d&#8217;elle.</p>
<p style="text-align: justify;">Cet humble post s&#8217;adresse à ceux qui m&#8217;ont demandé de leur faire une mini-présentation de Google Wave, ainsi qu&#8217;à ceux qui n&#8217;ont pas le courage de regarder la <a href="http://wave.google.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/wave.google.com');" target="_blank">démonstration qui a été présentée au Google IO</a>, qui dure tout de même 1h20. On trouve en effet beaucoup d&#8217;articles qui traitent de Google Wave et des concepts associés, et il est difficile de s&#8217;en faire une idée claire car ces concepts sont réellement novateurs.</p>
<p style="text-align: justify;"><span id="more-279"></span></p>
<h2 style="text-align: justify;"><strong>Les origines de Google Wave<br />
</strong></h2>
<p style="text-align: justify;">Avant de rentrer dans le vif du sujet, il me semble essentiel de comprendre l&#8217;idée à l&#8217;origine de Google Wave. Je préfère citer Lars Rasmussen (qui est très clair à ce sujet) plutôt que de le paraphraser. Lars et Jens Rasmussen, les deux frères à l&#8217;origine de Google Maps, sont partis du constat suivant il y a moins de trois ans :</p>
<blockquote style="text-align: justify;"><p>&#8220;[Jens] pointed out that two of the most spectacular successes in digital communication, email and instant messaging, were originally designed in the &#8217;60s to imitate analog formats — email mimicked snail mail, and IM mimicked phone calls. Since then, so many different forms of communication had been invented — blogs, wikis, collaborative documents, etc. — and computers and networks had dramatically improved. So Jens proposed a new communications model that presumed all these advances as a starting point [...]&#8220;</p></blockquote>
<p style="text-align: justify;">Ils ont donc alors démarré un projet nommé &#8220;Walkabout&#8221; afin de donner vie à ce fameux &#8220;nouveau mode de communication&#8221;. Lars Rasmussen résume leur démarche en trois questions :</p>
<ul style="text-align: justify;">
<blockquote>
<li>&#8220;Why do we have to live with divides between different types of communication — email versus chat, or conversations versus documents?</li>
<li>Could a single communications model span all or most of the systems in use on the web today, in one smooth continuum? How simple could we make it?</li>
<li>What if we tried designing a communications system that took advantage of computers&#8217; current abilities, rather than imitating non-electronic forms?&#8221;</li>
</blockquote>
</ul>
<p style="text-align: justify;">Ainsi, après plus de deux ans de travail, le projet Walkabout a pris vie, a été rebaptisé Google Wave, et a été présenté au grand public le 28 mai 2009.</p>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Google Wave au premier abord<br />
</strong></h2>
<p style="text-align: justify;">Le <a href="http://wave.google.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/wave.google.com');" target="_blank">site officiel</a> présente Google Wave de la manière suivante :</p>
<blockquote style="text-align: justify;"><p>&#8220;Google Wave is a new tool for communication and collaboration on the web&#8221;</p></blockquote>
<p style="text-align: justify;">Google Wave propose en effet une application Web dont l&#8217;interface n&#8217;est pas sans rappeler GMail :</p>
<p style="text-align: justify;"><a href="http://francois.goldgewicht.com/wp-content/uploads/2009/06/google_wave_snapshots_inbox.png" ><img class="aligncenter size-full wp-image-284" title="Google Wave" src="http://francois.goldgewicht.com/wp-content/uploads/2009/06/google_wave_snapshots_inbox.png" alt="" width="400" height="261" /></a></p>
<p style="text-align: justify;">On retrouve en effet une présentation en colonnes avec un menu, une liste de contacts, une boite de réception et un cadre de visualisation de l&#8217;élément sélectionné dans la boite de réception.</p>
<p style="text-align: justify;">Sauf que là, la boite de réception ne contient plus des e-mails mais des <strong>Waves</strong>.</p>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Une Wave, c&#8217;est quoi ?</strong></h2>
<p style="text-align: justify;">Une Wave est une entité à mi-chemin entre une <strong>conversation</strong> et un <strong>document</strong>. Cette entité est <strong>partagée</strong> par un ou plusieurs <strong>participants</strong>, qui peuvent être des humains ou des robots. Vous créez une Wave, ajoutez des participants et cette Wave peut être ensuite modifiée par les participants en temps réel :</p>
<blockquote style="text-align: justify;"><p>&#8220;The wave is a dynamic entity which  contains state and stores historical information. A wave is a living thing, with participants  communicating and modifying the wave in real time.&#8221;</p></blockquote>
<p style="text-align: justify;">Que signifie &#8220;modifier une Wave&#8221; ? Tout simplement taper du texte riche ou ajouter des photos, des vidéos ou même des gadgets (une carte par exemple). De quelle manière ? En insérant une réponse ou en éditant la Wave directement.</p>
<p style="text-align: justify;">Jusqu&#8217;ici, &#8220;rien d&#8217;extraordinaire&#8221; me direz-vous. Sauf que Google Wave supporte les modifications concurrentes des Waves : vous voyez la Wave évoluer en temps réel lorsque d&#8217;autres participants la modifient, caractère par caractère ! Ce nouveau mode de communication et de collaboration unifie donc les messageries instantanée (chat) et persistante (e-mail) au sein d&#8217;un concept plus avancé.</p>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Les Waves, une nouvelle façon unifiée de communiquer et de collaborer avec ses contacts </strong></h2>
<p style="text-align: justify;">Comme l&#8217;explique Lars Rasmussen dans sa démonstration au Google IO, on passe donc d&#8217;un mode de communication &#8220;point à point&#8221; (les e-mails) à un mode centralisé (à la façon d&#8217;un bus) : les participants participent aux Waves dès leur création ou au cours de leur vie. Ainsi, les participants peuvent visualiser les modifications des Waves :</p>
<ul style="text-align: justify;">
<li>en temps réel, dans le cas de modifications par d&#8217;autres participants connectés</li>
<li>en playback, dans le cas de modifications effectuées par des participants connectés ou non</li>
</ul>
<p style="text-align: justify;">La démonstration de cette fonctionnalité de <strong>playback</strong> est impressionnante. L&#8217;idée derrière cette fonctionnalité est simple, il s&#8217;agit d&#8217;indiquer aux participants :</p>
<blockquote style="text-align: justify;"><p>&#8220;Who said what and when&#8221;</p></blockquote>
<p style="text-align: justify;">Les participants peuvent donc visualiser l&#8217;historique des modifications, modification par modification, d&#8217;une manière animée ou par clics successifs.</p>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Google Wave, une &#8220;simple&#8221; application Web ?</strong></h2>
<p style="text-align: justify;">En fait, l&#8217;application Web décrite précédemment n&#8217;est qu&#8217;un des trois éléments qui constituent Google Wave, les trois &#8220;P&#8221; : il s&#8217;agit du <strong>Produit</strong>. Google Wave, c&#8217;est également une <strong>Plateforme</strong> et un <strong>Protocole</strong>.</p>
<p><br/></p>
<h3 style="text-align: justify;">Un Produit</h3>
<p style="text-align: justify;">L&#8217;objectif de l&#8217;application Web Google Web, c&#8217;est-à-dire du Produit, vous l&#8217;avez compris, est de permettre d&#8217;accéder aux Waves et de les éditer. Cette application a été développée en <strong>GWT</strong> et repose sur des apports de <strong>HTML 5</strong>.</p>
<p style="text-align: justify;">Les intéressés pourront découvrir ces fameux apports de HTML 5 dans <a href="http://radar.oreilly.com/2009/05/google-bets-big-on-html-5.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/radar.oreilly.com');" target="_blank">ce post très clair de Tim O&#8217;Reilly</a>, mais on peut en retenir au moins un : pour effectuer l&#8217;upload d&#8217;un fichier, avec HTML 5, on n&#8217;est plus obligé de passer par l&#8217;habituel bouton &#8220;Parcourir&#8221;. On peut par exemple le faire via un <em>drag and drop</em> du fichier depuis l&#8217;explorateur vers une zone de la page HTML. Cet apport est largement exploité par Google Wave, notamment lors de l&#8217;attachement de fichiers à une Wave. La démonstration montre ainsi l&#8217;insertion de plusieurs images dans une Wave grâce à un seul <em>drag and drop</em>.</p>
<p><br/></p>
<h3 style="text-align: justify;">Une Plateforme</h3>
<p style="text-align: justify;">Google Wave, c&#8217;est également une <strong>Plateforme</strong> ouverte et extensible constituée de <a href="http://code.google.com/intl/fr/apis/wave/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">plusieurs APIs</a> :</p>
<ul style="text-align: justify;">
<li><strong>Embed</strong> : API JavaScript permettant d&#8217;intégrer des Waves dans des pages Web, des blogs, etc.</li>
<li><strong>Extensions</strong> : APIs permettant de créer des extensions à l&#8217;application Web. Ces extensions sont faites pour travailler au sein des Waves.</li>
</ul>
<p><br/></p>
<h3 style="text-align: justify;">Un Protocole</h3>
<p style="text-align: justify;">Google Wave, c&#8217;est enfin un <strong>Protocole</strong> ouvert spécifiant le stockage et l&#8217;échange des Waves, en gérant les accès concurrents. Pour plus d&#8217;informations concernant ce protocole, consultez <a href="http://www.waveprotocol.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.waveprotocol.org');" target="_blank">le site officiel</a>.</p>
<p style="text-align: justify;">Notons que le code de Google Wave sera Open Source. L&#8217;objectif de Google est de le faire adopter par le plus de monde possible. Ainsi chaque entreprise pourra installer son propre Google Wave : on est loin de l&#8217;image de &#8220;Big Brother&#8221; si souvent attribuée à Google (néanmoins compréhensible concernant certaines applications)&#8230;</p>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Quelques mots sur les Extensions Google Wave<br />
</strong></h2>
<p style="text-align: justify;">Les Extensions peuvent être de deux natures : il y a les <strong>Gadgets</strong> et les <strong>Robots</strong>.</p>
<p><br/></p>
<h3 style="text-align: justify;">Gadgets</h3>
<p style="text-align: justify;">Les <strong>Gadgets</strong> sont des extensions côté client afin d&#8217;enrichir l&#8217;IHM des Waves. Elles peuvent bénéficier des interactions multi-utilisateurs (pour créer des jeux multi-joueurs par exemple). Notons que les Gadgets iGoogle et OpenSocial fonctionnent sur Google Wave, ce qui apporte des milliers d&#8217;applications d&#8217;entrée de jeu.</p>
<p style="text-align: justify;">Exemples de Gadgets présentés :</p>
<ul style="text-align: justify;">
<li>Are you coming? : permet de mettre en place un sondage dans une Wave</li>
<li>Maps : permet une collaboration sur une carte Google Map au sein d&#8217;une Wave</li>
</ul>
<p><br/></p>
<h3 style="text-align: justify;">Robots</h3>
<p style="text-align: justify;">Les <strong>Robots</strong> sont des extensions côté serveur afin d&#8217;automatiser des tâches. Il s&#8217;agit de participants à des Waves qui peuvent en modifier le contenu, interagir avec d&#8217;autres participants, ou encore transmettre de l&#8217;information à d&#8217;autres Waves ou au monde extérieur.</p>
<p style="text-align: justify;">Exemples de Robots présentés :</p>
<ul style="text-align: justify;">
<li>Tweety : synchronisation d&#8217;une Wave avec Twitter</li>
<li>Bloggy : synchronisation d&#8217;une Wave avec un blog</li>
<li>Un robot qui affiche une liste de suggestions lors de la saisie</li>
<li>Un robot de correction automatique lors de la saisie (qui repose comme le précédent, apparemment, sur le Web et non sur un dictionnaire lexical &#8220;statique&#8221;). La démonstration nous le montre par exemple capable de remplacer le phrase tapée &#8220;Icland is an icland&#8221; par &#8220;Iceland is an island&#8221;, au fur et à mesure de la saisie !</li>
<li>Un robot qui détecte &#8220;intelligemment&#8221; les liens lors de la saisie</li>
<li>Un robot qui transforme une Wave en un outil de reporting de bugs</li>
<li>Et surtout, Rosy, un robot de traduction lors de la saisie : je vous invite à regarder la fin de la démonstration, elle est vraiment impressionnante. En effet, on y voit qu&#8217;il suffit d&#8217;inviter le robot de traduction à la Wave puis de taper une phrase en Français pour que le robot la traduise en Anglais, au fur et à mesure de la saisie ! J&#8217;ai tout de même hâte de tester ce robot moi-même afin de voir si l&#8217;outil dépasse réellement les outils de traduction actuellement proposés&#8230;</li>
</ul>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Revenons à nos Waves : une Wave, ce n&#8217;est &#8220;que&#8221; cela ?<br />
</strong></h2>
<p style="text-align: justify;">En fait, il y a un découpage fin : une Wave rassemble des <strong>Wavelets</strong>. Par exemple, lorsque vous entamez une discussion privée avec un participant particulier au sein d&#8217;une Wave rassemblant plusieurs participants, cela crée des Wavelets privées au sein de cette Wave (en plus des autres Wavelets partagées avec les autres participants).</p>
<p style="text-align: justify;">Ces Wavelets rassemblent elles-mêmes une hiérarchie de <strong>blips</strong>. Une blip consiste en l&#8217;unité de base des conversations et leur contenu est un <strong>document</strong>.</p>
<p style="text-align: justify;">Voilà, vous connaissez tout le vocabulaire ! En fait l&#8217;utilisateur n&#8217;a pas à connaître cette terminologie, mais elle est essentielle pour le développeur. Elle est donc clairement définie dans la <a href="http://code.google.com/intl/fr/apis/wave/guide.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">documentation de l&#8217;API</a>.</p>
<p style="text-align: justify;">Notons également que vous pouvez attacher des tags à vos Waves, ou les relier entre elles par du drag and drop.</p>
<p><br/></p>
<h2 style="text-align: justify;"><strong>Un peu de recul&#8230;</strong></h2>
<p style="text-align: justify;">Ceux qui m&#8217;ont demandé de leur présenter Google Wave m&#8217;ont parfois demandé s&#8217;il ne s&#8217;agissait pas d&#8217;un énième outil à la Twitter, Facebook, E-mail, IM, Wiki, etc. En fait, Google Wave est un outil centralisé pour toutes vos communications et rassemble d&#8217;une certaine manière tous ces outils en un seul. Et, nous l&#8217;avons vu, c&#8217;est un outil extensible et ouvert.</p>
<p style="text-align: justify;">Cette ouverture est essentielle : Google Wave et ses trois &#8220;P&#8221; est un outil révolutionnaire tant il change notre façon de communiquer et de collaborer. Tellement révolutionnaire que son succès n&#8217;aura lieu que s&#8217;il est largement adopté. C&#8217;est pour cela que son ouverture est essentielle.</p>
<p style="text-align: justify;">Je suis plutôt optimiste quant à son succès à moyen/long terme : sa flexibilité et son ouverture le rendent &#8220;facilement&#8221; intégrable au sein du SI. En effet, il semble destiné à remplacer tous nos outils habituels, mais d&#8217;ici là il peut s&#8217;intégrer avec chacun d&#8217;eux afin d&#8217;en être complémentaire.</p>
<p style="text-align: justify;">En tout cas, vivement son ouverture au public ! Il semble qu&#8217;il reste quelques soucis à régler sur les autres navigateurs que Google Chrome : notamment sur les terminaux Mobiles (Androïd et iPhone). Car oui, Google Wave s&#8217;adresse également à ce monde là !</p>
<p style="text-align: justify;">Enfin, il est clair que Google Wave ne laisse pas indifférent alors qu&#8217;il est tout juste annoncé. A titre d&#8217;illustration, le fameux cabinet Gartner y a déjà consacré deux posts dont <a href="http://blogs.gartner.com/ray_valdes/2009/05/31/the-secret-sauce-behind-google-wave/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.gartner.com');" target="_blank">un sur les bases algorithmiques de Google Wave</a> (notamment l&#8217;OT, ou Operational Transformation, la théorie à la base de la gestion des accès concurrents de Google Wave). De mon côté, je pense que ce n&#8217;est pas mon dernier article sur le sujet&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2009/06/03/google-wave-en-quelques-mots/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>APIs RESTful et Marketing : l&#8217;avènement du REST-like</title>
		<link>http://francois.goldgewicht.com/2009/05/19/apis-restful-et-marketing-lavenement-du-rest-like/</link>
		<comments>http://francois.goldgewicht.com/2009/05/19/apis-restful-et-marketing-lavenement-du-rest-like/#comments</comments>
		<pubDate>Tue, 19 May 2009 00:13:58 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=271</guid>
		<description><![CDATA[Tout le monde parle de REST :

certains veulent essayer de comprendre ce qu&#8217;est vraiment REST : j&#8217;ai déjà commencé à apporter ma modeste contribution sur le sujet et je suis loin d&#8217;avoir dit mon dernier mot sur le sujet ! Je compte dès que possible y consacrer encore quelques posts bien précis&#8230;
d&#8217;autres exposent des APIs [...]]]></description>
			<content:encoded><![CDATA[<p>Tout le monde parle de REST :</p>
<ul>
<li>certains veulent essayer de comprendre ce qu&#8217;est vraiment REST : j&#8217;ai déjà commencé à apporter ma modeste contribution sur le sujet et je suis loin d&#8217;avoir dit mon dernier mot sur le sujet ! Je compte dès que possible y consacrer encore quelques posts bien précis&#8230;</li>
<li>d&#8217;autres exposent des <strong>APIs qu&#8217;ils présentent comme RESTful</strong> : Google, Yahoo, Twitter, Facebook, E-Bay, Flickr pour ne citer qu&#8217;eux&#8230; C&#8217;est à eux que je veux consacrer ce post.</li>
</ul>
<p>En effet, ces acteurs prépondérants de la sphère du Web 2.0 sont <em>de facto</em> des référents dans les technologies qu&#8217;ils mettent en avant : s&#8217;ils exposent des APIs en les déclarant RESTful, <strong>il est bon pour le &#8220;commun des mortels&#8221; de savoir si tel est vraiment le cas</strong>. Les aspects théoriques de REST sont déjà suffisamment difficiles à appréhender, alors si les exemples pratiques mis en avant ne sont pas de bons exemples, comment s&#8217;y retrouver ?</p>
<p>Prenons quelques exemples d&#8217;API dites RESTful au hasard (le hasard étant ici représenté par les trois premières pages de résultats d&#8217;une recherche Google sur l&#8217;expression &#8220;REST API&#8221;).</p>
<p><span id="more-271"></span></p>
<p><strong>Exemple n°1 : <a href="http://developer.ebay.com/DevZone/shopping/docs/HowTo/JS_Shopping/JS_SearchGS_NV_JSON/JS_SearchGS_NV_JSON.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/developer.ebay.com');" target="_blank">E-Bay </a></strong></p>
<p>Je n&#8217;ose pas m&#8217;aventurer dans les méandres de cette documentation plutôt austère. Cependant on repère rapidement un anti-pattern REST de base : dans les requêtes, le nom du service à invoquer est porté par un paramètre HTTP nommé &#8220;callname&#8221; et non par la méthode HTTP :</p>
<blockquote><p>http://open.api.ebay.com/shopping?<strong>callname</strong>=FindItems&amp;&#8230;</p></blockquote>
<p>En outre, on dispose d&#8217;un point d&#8217;entrée unique mais la notion de ressource n&#8217;apparaît pas vraiment.</p>
<p><strong>Exemple n°2 : <a href="http://apiwiki.twitter.com/Twitter-API-Documentation" onclick="javascript:pageTracker._trackPageview('/outbound/article/apiwiki.twitter.com');" target="_blank">Twitter</a></strong></p>
<p>Dans ce cas, la documentation est bien plus simple et attrayante. Elle repose a priori sur un découpage en ressources (timeline, status, user&#8230;) sauf que là encore le nom du service est transmis dans l&#8217;URI et non via la méthode HTTP :</p>
<blockquote><p>http://twitter.com/statuses/<strong>destroy</strong>/12345.json</p></blockquote>
<p>Ainsi on envoie une requête POST sur cet URI au lieu d&#8217;une requête DELETE sur un URI de la forme suivante :</p>
<blockquote><p>http://twitter.com/statuses/12345</p></blockquote>
<p>En outre, le format des représentations est lui aussi indiqué dans l&#8217;URI (voir le &#8220;.json&#8221;) au lieu de profiter des puissants mécanismes de négociation de contenu fournis par HTTP. Ceci dit, les réponses retournées semblent proposer quelques URIs (n&#8217;oublions pas <a href="http://francois.goldgewicht.com/2008/10/29/faire-du-rest-ce-nest-pas/"  target="_blank">l&#8217;importance de l&#8217;hypermédia</a>).</p>
<p><strong>Exemple n°3 : <a href="http://www.flickr.com/services/api/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');" target="_blank">Flickr</a></strong></p>
<p>La documentation de l&#8217;API rappelle celle de Twitter par sa clarté et son découpage par ressources. Et là encore, le nom du service à invoquer est porté par un paramètre HTTP, nommé &#8220;method&#8221; et non par la méthode HTTP :</p>
<blockquote><p>http://api.flickr.com/services/rest/?method=flickr.test.echo&amp;&#8230;</p></blockquote>
<p>Point intéressant, cette documentation donne sa propre vision de REST :</p>
<blockquote><p>&#8220;REST est le format de requête le plus simple à utiliser&#8221;</p></blockquote>
<p>Nous reviendrons plus tard sur cett vision de REST.</p>
<p><strong>Exemple n°4 : <a href="http://code.google.com/intl/fr/apis/ajaxsearch/documentation/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">Google</a></strong></p>
<p>Là on est bien plus proche des principes de REST même si la notion de ressource ne ressort pas clairement :</p>
<blockquote><p>http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=REST</p></blockquote>
<p>En effet, l&#8217;URI /search/web fait davantage penser à une opération qu&#8217;à une ressource.</p>
<p><strong>Exemple n°5 : <a href="http://wiki.developers.facebook.com/index.php/API" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.developers.facebook.com');" target="_blank">Facebook</a></strong></p>
<p>Il s&#8217;agit là encore d&#8217;un exemple d&#8217;API similaire aux précédentes, sur la transmission du nom du service et sur l&#8217;utilisation des seules méthodes GET et POST du protocole HTTP. Cependant la documentation se veut plus pragmatique :</p>
<blockquote><p>&#8220;The API uses a REST-like interface. This means that our Facebook method calls are made over the internet by sending HTTP GET or POST requests&#8221;</p></blockquote>
<p>On retrouve la vision de REST comme format de requête plus simple. Autre point intéressant, l&#8217;API est présentée comme REST-like et non comme RESTful, ce qui est déjà plus rigoureux (bien que moins marketing).</p>
<p><strong>Exemple n°6 : <a href="http://developer.yahoo.com/addressbook/guide/EndpointURLs.html#id305045" onclick="javascript:pageTracker._trackPageview('/outbound/article/developer.yahoo.com');" target="_blank">Yahoo</a></strong></p>
<p>Les APIs proposées par Yahoo sont assez proches des précédentes :</p>
<blockquote><p>http://address.yahooapis.com/v1/action?format=format&amp;params</p></blockquote>
<p>où &#8220;action&#8221; désigne le nom du service à invoquer. On retrouve donc les mêmes anti-patterns concernant la transmission du nom du service et du format des représentations. Et un autre : le numéro de version du service est indiqué dans l&#8217;URI.</p>
<p><a href="http://developer.yahoo.com/search/rest.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/developer.yahoo.com');" target="_blank">Yahoo</a> met en avant la même vision de REST que ses confrères :</p>
<blockquote><p>&#8220;The Yahoo! Search Web Services are all REST services. That means you can easily construct request URLs that will work in your browser, on the command line, and in your code&#8221;</p></blockquote>
<p><strong>Un peu de recul</strong></p>
<p>Les APIs étudiées violent grosso modo les mêmes principes de REST. Ces anti-patterns tournent notamment autour de la notion d&#8217;URI qui est mal exploitée : l&#8217;URI est souvent utilisé comme fourre-tout permettant par exemple d&#8217;indiquer le nom du service à invoquer, sa version, ou le format des représentations, sans même faire apparaître la notion de ressource. Alors que l&#8217;URI a pour simple objectif d&#8217;adresser une ressource (n&#8217;oublions pas la définition de ce sigle : &#8220;Uniform Resource Identifier&#8221;) et que le protocole HTTP dispose de moyens efficaces pour gérer toutes les autres problématiques évoquées (notamment : interface uniforme, négociation de contenu).</p>
<p>Si vous avez tenu jusqu&#8217;ici alors je vous félicite et je vous remercie. Mais ne vous arrêtez pas là ! A ce stade vous devez penser que je ne jure que par REST mais je n&#8217;ai aucunement la prétention de rejeter toutes ces APIs. Si de tels éditeurs partagent les mêmes anti-patterns REST, c&#8217;est qu&#8217;il y a une bonne raison. Et cette raison, je la partage !</p>
<p>En effet : effectivement, toutes ces APIs ne respectent pas toutes les contraintes imposées par REST. Mais cela les rend-elles moins flexibles, moins scalables, moins simples à utiliser ? Non, pas nécessairement. En un mot il faut du pragmatisme ! Il est clair qu&#8217;aujourd&#8217;hui tout éditeur qui se veut &#8220;high-tech&#8221; se doit de proposer une API dite &#8220;RESTful&#8221; pour des raisons marketing évidentes. Même si cette API est en réalité plutôt &#8220;REST-like&#8221; comme osent toutefois le préciser certains d&#8217;entre eux. C&#8217;est la simplicité qui est et qui doit être (justement) mise en avant et il ne faut simplement pas tomber dans le piège tendu par le marketing.</p>
<p>Toutes ces APIs ne sont pas RESTful. OK. Mais en pratique cela ne nuit pas à leur succès. Une API RESTful a des avantages. Mais cela ne signifie pas que seules les APIs RESTful ont ces avantages. En outre, je vous mets au défi de trouver une API <em>réellement</em> RESTful <img src='http://francois.goldgewicht.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2009/05/19/apis-restful-et-marketing-lavenement-du-rest-like/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vous voulez en savoir plus sur la sécurité des navigateurs ?</title>
		<link>http://francois.goldgewicht.com/2009/01/18/vous-voulez-en-savoir-plus-sur-la-securite-des-navigateurs/</link>
		<comments>http://francois.goldgewicht.com/2009/01/18/vous-voulez-en-savoir-plus-sur-la-securite-des-navigateurs/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 02:06:08 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=235</guid>
		<description><![CDATA[Google propose depuis quelques jours une sorte de livre blanc sur la sécurité des navigateurs.
Dans cette synthèse de plusieurs années d&#8217;expérience en la matière, tous les navigateurs classiques sont passé au crible : Internet Explorer 6 et 7, Firefox 2 et 3, Safari, Opera, Chrome, et même le navigateur embarqué dans Android. Tout y passe [...]]]></description>
			<content:encoded><![CDATA[<p>Google propose depuis quelques jours une sorte de <a href="http://code.google.com/p/browsersec/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">livre blanc sur la sécurité des navigateurs</a>.</p>
<p>Dans cette synthèse de plusieurs années d&#8217;expérience en la matière, tous les navigateurs classiques sont passé au crible : Internet Explorer 6 et 7, Firefox 2 et 3, Safari, Opera, Chrome, et même le navigateur embarqué dans Android. Tout y passe : HTTP, URI, HTML, CSS, etc. Les points abordés sont plus ou moins techniques mais tous sont intéressants. Comme on pouvait s&#8217;y attendre, les différences entre navigateurs sont très nombreuses et parfois surprenantes ! Ce livre est une véritable mine d&#8217;or pour ceux qui doivent assurer la sécurité de leurs applications, mais également pour ceux qui souhaitent comprendre le fonctionnement des navigteurs : dès la première section sur les concepts de base on est plongé dans un univers qui nous fait rapidement comprendre que la bataille des navigateurs n&#8217;est pas prête de s&#8217;arrêter&#8230;</p>
<p>Merci au site <a href="http://www.programmez.com/actualites.php?titre_actu=Google-evalue-les-navigateurs&amp;id_actu=4076" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.programmez.com');" target="_blank">&#8220;Programmez.com&#8221;</a> pour l&#8217;information.</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2009/01/18/vous-voulez-en-savoir-plus-sur-la-securite-des-navigateurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery pour améliorer l&#8217;expérience utilisateur</title>
		<link>http://francois.goldgewicht.com/2009/01/18/jquery-pour-ameliorer-lexperience-utilisateur/</link>
		<comments>http://francois.goldgewicht.com/2009/01/18/jquery-pour-ameliorer-lexperience-utilisateur/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 01:48:55 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=231</guid>
		<description><![CDATA[jQuery est devenue en quelques mois une des librairies JavaScript de référence. Souvent étiquetée comme étant &#8220;moins portée sur les effets visuels&#8221; que des librairies comme ExtJS ou Script.aculo.us, elle dispose tout de même de quoi se défendre sur ce sujet et j&#8217;essaie souvent d&#8217;en faire passer le message.
jQuery ayant vraiment le vent en poupe, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jquery.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/jquery.com');" target="_blank">jQuery</a> est devenue en quelques mois une des librairies JavaScript de référence. Souvent étiquetée comme étant &#8220;moins portée sur les effets visuels&#8221; que des librairies comme ExtJS ou Script.aculo.us, elle dispose tout de même de quoi se défendre sur ce sujet et j&#8217;essaie souvent d&#8217;en faire passer le message.</p>
<p>jQuery ayant vraiment le vent en poupe, j&#8217;étais persuadé que <a href="http://www.smashingmagazine.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.smashingmagazine.com');" target="_blank">Smashing Magazine</a> allait présenter quelques unes de ses possibilités. C&#8217;est chose faite, avec <a href="http://www.smashingmagazine.com/2009/01/15/45-new-jquery-techniques-for-a-good-user-experience/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.smashingmagazine.com');" target="_blank">une liste de 45 techniques permettant d&#8217;améliorer l&#8217;expérience utilisateur</a>. Même les experts en jQuery y verront quelques bonnes idées à prendre : comme je le dis souvent, le JavaScript a donné beaucoup de moyens pour améliorer l&#8217;ergonomie des applications Web classiques, mais également beaucoup de moyens pour la réduire !</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2009/01/18/jquery-pour-ameliorer-lexperience-utilisateur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Une petite rétrospective sur AJAX</title>
		<link>http://francois.goldgewicht.com/2008/10/30/une-petite-retrospective-sur-ajax/</link>
		<comments>http://francois.goldgewicht.com/2008/10/30/une-petite-retrospective-sur-ajax/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 22:23:04 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=199</guid>
		<description><![CDATA[Dion Almaer vient de poster sur son célèbre blog Ajaxian une synthèse de sa vision d&#8217;AJAX.
Il nous ramène d&#8217;abord dans le passé afin de nous rappeler ce qui a permis selon lui le succès d&#8217;AJAX : l&#8217;apport de réactivité et d&#8217;interactivité dans les applications Web. Comme il le dit :
&#8220;This bridged us from pages to [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Dion Almaer vient de <a href="http://ajaxian.com/archives/ajax-revolution" onclick="javascript:pageTracker._trackPageview('/outbound/article/ajaxian.com');" target="_blank">poster</a> sur son célèbre blog <a href="http://www.ajaxian.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ajaxian.com');">Ajaxian</a> une synthèse de sa vision d&#8217;AJAX.</p>
<p style="text-align: justify;">Il nous ramène d&#8217;abord dans le passé afin de nous rappeler ce qui a permis selon lui le succès d&#8217;AJAX : l&#8217;apport de réactivité et d&#8217;interactivité dans les applications Web. Comme il le dit :</p>
<blockquote style="text-align: justify;"><p>&#8220;This bridged us from pages to apps&#8221;</p></blockquote>
<p style="text-align: justify;">Il s&#8217;agit là d&#8217;une idée à laquelle j&#8217;adhère également. Mais il y a selon moi une autre raison, d&#8217;ordre technique : AJAX a permis une véritable séparation entre les données et leur présentation. Cela a ouvert la voie à une infinité de nouvelles architectures. Je ne détaillerai pas ces deux idées dans ce post : j&#8217;en ai eu l&#8217;occasion aux <a href="http://francois.goldgewicht.com/2008/10/09/22/"  target="_blank">Valtech Days</a>, vous aurez donc tout le loisir de savoir ce que j&#8217;ai en tête sur le sujet lorsque les vidéos seront en ligne.</p>
<p style="text-align: justify;">Ensuite, Dion Almaer nous présente les directions qu&#8217;il envisage pour l&#8217;avenir AJAX-ien : il nous rappelle d&#8217;abord les progrès qu&#8217;il y a encore à accomplir en terme de productivité. Puis il nous invite à arrêter de réfléchir aux habituelles questions de choix de frameworks pour se concentrer sur les nouveaux facteurs AJAX-iens d&#8217;enrichissement des applications Web :</p>
<blockquote style="text-align: justify;"><p>&#8220;We have spent a lot of time in the weeds talking about the engine of the car. We jump on a point release of some framework, and argue about the minutia of framework differences. Maybe it is time to pop our heads up a little and think about how we can build compelling, feature rich applications&#8221;</p></blockquote>
<p style="text-align: justify;">Il évoque ainsi Comet, HTML 5 et les clients Web tactiles.  J&#8217;adhère à son invitation à prendre du recul et je suis tout aussi intéressé que lui par ce que va devenir AJAX. Par contre, plutôt que de penser aux évolutions d&#8217;AJAX seul, dans mes réflexions sur l&#8217;avenir je préfère repositionner AJAX face aux technologies RIA comme Flex ou Silverlight. Surtout à l&#8217;approche de l&#8217;année 2009 qui pourrait bien être une année charnière pour toutes ces technologies&#8230; Et là encore, je vous renvoie à ma dernière présentation aux Valtech Days <img src='http://francois.goldgewicht.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2008/10/30/une-petite-retrospective-sur-ajax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sortie de Restlet 1.1</title>
		<link>http://francois.goldgewicht.com/2008/10/30/restlet-11/</link>
		<comments>http://francois.goldgewicht.com/2008/10/30/restlet-11/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 21:28:48 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=184</guid>
		<description><![CDATA[Décidément, que d&#8217;actualité en ce moment sur la planète REST ! Jérôme Louvel vient d&#8217;annoncer sur le blog de sa société Noelios la sortie de la version 1.1 du framework Restlet. Pour ceux qui ne connaissent pas ce framework, il permet de concevoir très facilement des applications RESTful.
Cette nouvelle version apporte notamment :

Une meilleure gestion [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Décidément, que d&#8217;actualité en ce moment sur la planète REST ! Jérôme Louvel vient d&#8217;annoncer sur <a href="http://blog.noelios.com/2008/10/28/restlet-110-released/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.noelios.com');" target="_blank">le blog de sa société Noelios</a> la sortie de la version 1.1 du <a href="http://www.restlet.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.restlet.org');" target="_blank">framework Restlet</a>. Pour ceux qui ne connaissent pas ce framework, il permet de concevoir très facilement des applications RESTful.</p>
<p style="text-align: justify;">Cette nouvelle version apporte notamment :</p>
<ul style="text-align: justify;">
<li>Une meilleure gestion des documents WADL : si l&#8217;intérêt de cette spécification dans le cadre de REST est remise en cause par certains (dont je fais partie&#8230; En partie !) elle en intéresse toutefois plus d&#8217;un alors cette nouveauté restlet-ienne est à relever.</li>
<li>Une <a href="http://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/57-restlet.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.restlet.org');" target="_blank">extension</a> implémentant la <a href="http://jcp.org/en/jsr/detail?id=311" onclick="javascript:pageTracker._trackPageview('/outbound/article/jcp.org');" target="_blank">spécification JAX-RS</a> (Java API for RESTful Web Services), aussi connue sous le nom de code JSR 311. Rappelons que la version finale de cette JSR est parue le 10 octobre dernier. Il s&#8217;agit là d&#8217;une évolution intéressante, même si à titre personnel je n&#8217;approuve pas forcément l&#8217;utilisation massive des annotations imposée par cette spécification.</li>
<li>Un <a href="http://wiki.restlet.org/docs_1.1/13-restlet/144-restlet.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.restlet.org');" target="_blank">module</a> pour GWT permettant de faire communiquer le front-end et le back-end de votre application grâce à REST sans avoir à en implémenter les couches basses vous-mêmes.</li>
<li>Une <a href="http://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/70-restlet.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.restlet.org');" target="_blank">extension</a> permettant divers modes d&#8217;intégration avec Spring.</li>
</ul>
<p style="text-align: justify;">Je n&#8217;ai pas encore testé cette nouvelle version mais j&#8217;en ai hâte car :</p>
<ul style="text-align: justify;">
<li>Restlet est le framework REST que je préfère parmi les quelques-uns qui existent : parmi ses qualités, j&#8217;apprécie depuis longtemps sa facilité de mise en œuvre, ses nombreuses extensions et sa documentation claire et concise. Mais il a également ce formidable avantage de vous permettre de (et même de vous amener à) vous concentrer sur la conception orientée ressources que nécessite la mise en place d&#8217;une architecture REST. Tous les frameworks REST n&#8217;ont pas cette qualité et il s&#8217;agit d&#8217;un point important car cette conception n&#8217;est pas toujours triviale.</li>
<li>Jusqu&#8217;ici j&#8217;avais principalement deux regrets : D&#8217;abord la non implémentation de la spécification JAX-RS. Ensuite, la non intégration aisée avec Spring. En effet, étant un vrai aficionados de ce framework, j&#8217;avais assez rapidement développé ce qui me fallait pour utiliser facilement Restlet avec Spring : a minima, la déclaration et la configuration des restlets via un fichier de configuration Spring. Or cette nouvelle version semble fournir une solution à ces deux &#8220;problèmes&#8221;.</li>
</ul>
<p style="text-align: justify;">
<p style="text-align: justify;">À suivre, donc&#8230; En tout cas, bravo à Jérôme Louvel et son équipe !</p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2008/10/30/restlet-11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Faire du REST, ce n&#8217;est pas&#8230;</title>
		<link>http://francois.goldgewicht.com/2008/10/29/faire-du-rest-ce-nest-pas/</link>
		<comments>http://francois.goldgewicht.com/2008/10/29/faire-du-rest-ce-nest-pas/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 09:31:33 +0000</pubDate>
		<dc:creator>François</dc:creator>
				<category><![CDATA[Applications Web]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://francois.goldgewicht.com/?p=143</guid>
		<description><![CDATA[Il y a de l&#8217;agitation dans l&#8217;air sur la planète REST ! Roy Fielding, l&#8217;inventeur de ce concept et l’un des auteurs principaux de la spécification du protocole HTTP, vient de poster deux articles du genre &#8220;coup de poing sur la table&#8221; sur son blog.

Avant de parler de ces deux posts, je vous invite à [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Il y a de l&#8217;agitation dans l&#8217;air sur la planète REST ! Roy Fielding, l&#8217;inventeur de ce concept et l’un des auteurs principaux de la spécification du protocole HTTP, vient de poster deux articles du genre &#8220;coup de poing sur la table&#8221; sur son blog.</p>
<p style="text-align: justify;"><span id="more-143"></span></p>
<p style="text-align: justify;">Avant de parler de ces deux posts, je vous invite à lire l&#8217;<a href="http://blog.valtech.fr/wordpress/2007/10/12/introduction-a-rest-et-aux-roa/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.valtech.fr');" target="_blank">Introduction à REST et aux ROA</a> que j&#8217;avais écrite il y a un an pour le blog Valtech : si vous ne connaissez pas REST, j&#8217;espère que cet article vous aidera à mieux comprendre les posts de Roy Fielding&#8230;</p>
<p style="text-align: justify;">Aux <a href="http://francois.goldgewicht.com/?p=140"  target="_blank">Valtech Days</a>, j&#8217;ai eu des échanges très intéressants sur REST avec plusieurs personnes : j&#8217;ai notamment été très heureux de rencontrer des personnes ayant comme moi mis en œuvre ces principes au sein de projets concrets, et de constater que nous partagions certaines idées pourtant méconnues ou sous-estimées. Pour résumer, <strong>concevoir une architecture RESTful, ce n&#8217;est pas uniquement exposer des services via HTTP : il y a plusieurs règles à respecter</strong>. En particulier :</p>
<p style="text-align: justify;">1. Faire du REST, c&#8217;est utiliser tant que possible le protocole HTTP de manière standard afin de garantir la généricité des interfaces des services.</p>
<p style="text-align: justify;">2. Faire du REST, c&#8217;est s&#8217;affranchir de la nécessité d&#8217;une description préalable des services : pour cela, il ne faut pas sous-estimer l&#8217;importance des liens hypertextes et des types de représentation des ressources.</p>
<p style="text-align: justify;">3. Faire du REST, c&#8217;est repenser son SI en termes de ressources : si ce n&#8217;est pas toujours trivial (loin de là !), il s&#8217;agit d&#8217;un exercice très enrichissant.</p>
<p style="text-align: justify;">Alors imaginez ma hâte lorsque j&#8217;ai découvert <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven" onclick="javascript:pageTracker._trackPageview('/outbound/article/roy.gbiv.com');" target="_blank">un post</a> de Roy Fielding qui commence par la phrase suivante :</p>
<blockquote style="text-align: justify;"><p>&#8220;I am getting frustrated by the number of people calling any HTTP-based interface a REST API&#8221;</p></blockquote>
<p style="text-align: justify;">Dans ce post du 20 octobre, il rappelle une série de règles non intuitives mais essentielles lorsqu&#8217;on conçoit une architecture RESTful. Ces règles rejoignent les trois points que j&#8217;ai évoqués.</p>
<h3 style="text-align: justify;"><strong>1.  L&#8217;importance de l&#8217;utilisation standard du protocole HTTP pour assurer la généricité des interfaces </strong></h3>
<blockquote style="text-align: justify;"><p>&#8220;A REST API should not contain any changes to the communication protocols aside from filling-out or fixing the details of underspecified bits of standard protocols&#8221;</p></blockquote>
<p style="text-align: justify;">En effet, le problème est que bien souvent, des modifications à ce niveau sont révélatrices d&#8217;un design des interfaces qui est spécifique aux objets manipulés : les interfaces ne sont alors plus génériques.</p>
<h3 style="text-align: justify;"><strong>2. La non-nécessité d&#8217;une description préalable des services et l&#8217;importance des liens hypertextes et des types de représentation des ressources</strong></h3>
<p style="text-align: justify;">Il ne faut pas sous-estimer l&#8217;importance des types de représentation des ressources. Le client d&#8217;un service REST ne doit pas avoir besoin d&#8217;une description préalable du service, il doit pouvoir s&#8217;appuyer sur les types de représentation des ressources :</p>
<blockquote style="text-align: justify;"><p>&#8220;A REST API should spend almost all of its descriptive effort in defining the media type(s) used for representing resources and driving application state, or in defining extended relation names and/or hypertext-enabled mark-up for existing standard media types. Any effort spent describing what methods to use on what URIs of interest should be entirely defined within the scope of the processing rules for a media type&#8221;</p></blockquote>
<p style="text-align: justify;">On me demande souvent de quelle manière les types de représentation des ressources peuvent-elles permettre au client de déterminer quelles opérations il peut effectuer sur quelles ressources. J&#8217;aime assez les exemples donnés par Roy Fielding dans l&#8217;un de ses commentaires :</p>
<blockquote style="text-align: justify;"><p>&#8220;media type tells the client either what method to use (e.g., anchor implies GET) or how to determine the method to use (e.g., form element says to look in method attribute)&#8221;</p></blockquote>
<p style="text-align: justify;">Ces exemples sont appliqués au cas d&#8217;un client interprétant du HTML, mais on peut aisément les généraliser.</p>
<p style="text-align: justify;">Il ne faut pas non plus sous-estimer l&#8217;importance des liens hypertextes. Le client d&#8217;un service REST ne doit pas avoir besoin d&#8217;une description préalable du service, c&#8217;est également en suivant les liens hypertextes proposés dans les représentations des ressources qu&#8217;il pourra déterminer quelles opérations il peut effectuer sur quelles ressources :</p>
<blockquote style="text-align: justify;"><p>&#8220;A REST API should be entered with no prior knowledge beyond the initial URI [...] From that point on, all application state transitions must be driven by client selection of server-provided choices that are present in the received representations or implied by the user’s manipulation of those representations.</p></blockquote>
<p style="text-align: justify;">En effet, les transitions doivent être permises par les liens hypertextes et non par des informations descriptives situées hors des représentations des ressources. Ce point, souvent occulté, est sujet à de nombreuses discussions entre les défenseurs de REST et ceux qui n&#8217;acceptent pas l&#8217;idée de ne pas se reposer sur une description des services (comme le WSDL le permet avec les services WS-*).</p>
<p style="text-align: justify;">En fait, les représentations des ressources doivent être auto-descriptives, le client d&#8217;un service REST n&#8217;a pas à savoir quelle est la nature d&#8217;une ressource, il ne fait que manipuler une de ses représentations grâce aux liens hypertextes :</p>
<blockquote style="text-align: justify;"><p>&#8220;Think of it in terms of the Web. How many Web browsers are aware of the distinction between an online-banking resource and a Wiki resource? None of them. They don’t need to be aware of the resource types. What they need to be aware of is the potential state transitions — the links and forms — and what semantics/actions are implied by traversing those links&#8221;</p></blockquote>
<p style="text-align: justify;">Lorsqu&#8217;on conçoit un service RESTful, il faut arriver à faire évoluer notre vision du modèle classique Request/Reply : si le client émet une requête afin d&#8217;obtenir des représentations de plusieurs ressources, la réponse du service ne doit pas contenir un ensemble de représentations (comme dans le modèle traditionnel), mais un ensemble de liens permettant d&#8217;accéder à chacune de ces représentations :</p>
<blockquote style="text-align: justify;"><p>&#8220;Query results are represented by a list of links with summary information, not by arrays of object representations&#8221;</p></blockquote>
<h3 style="text-align: justify;"><strong>3. Sur la difficulté de concevoir une Architecture Orientée Ressources </strong></h3>
<p style="text-align: justify;">En lisant ce post de Roy Fieding, on réalise la difficulté de concevoir des services RESTful. Ceux qui pensent que faire du REST c&#8217;est uniquement exposer des services HTTP occultent des caractéristiques essentielles de REST, les intérêts inhérents à ces caractéristiques mais également les difficultés. Concevoir une Architecture Orientée Ressources n&#8217;est pas facile. Mais il s&#8217;agit là d&#8217;un exercice très enrichissant.</p>
<p style="text-align: justify;">Ce post a suscité de nombreuses réactions car plutôt difficile à comprendre pour le profane. Il a donc posté quelques jours plus tard, le 24 octobre, <a href="http://roy.gbiv.com/untangled/2008/specialization" onclick="javascript:pageTracker._trackPageview('/outbound/article/roy.gbiv.com');" target="_blank">un autre article</a> dans lequel il explique sa démarche afin de répondre à ces critiques. Pour résumer, il part simplement du principe que ses lecteurs ont un certain niveau de formation et de compétences. Je laisse le soin à ses autres lecteurs de s&#8217;attarder sur ce point, j&#8217;ai souhaité citer ce post pour une autre raison.</p>
<p style="text-align: justify;">Cette raison est qu&#8217;il est intéressant de constater que Roy Fielding explique lui-même que faire du REST n&#8217;est pas facile : le premier post évoquait un ensemble de règles non intuitives et donc méconnues, et celui-ci rappelle qu&#8217;il n&#8217;y a pas de recette standard pour concevoir une Architecture Orientée Ressources et que comme d&#8217;habitude tout dépend du contexte. Et surtout, que s&#8217;il est difficile de déterminer si une architecture est réellement RESTful, il est bien plus facile de savoir si elle ne l&#8217;est pas :</p>
<blockquote style="text-align: justify;"><p>&#8220;I don’t try to tell them exactly what to do because, quite frankly, I don’t have anywhere near enough knowledge of their specific context to make such a decision. What I can do is tell them what isn’t REST or that doesn’t fit my definitions, because that is something about which I am guaranteed to know more than anyone else on this planet&#8221;</p></blockquote>
<p style="text-align: justify;">Toutefois, contrairement à Roy Fielding, je pense qu&#8217;il est important de trouver un moyen pour démocratiser ces idées, justement parce qu&#8217;elles sont méconnues et incomprises : j&#8217;espère pouvoir rédiger bientôt une sorte de checklist qui serait utilisable par les connaisseurs comme par les profanes. Le tout en essayant de faire preuve d&#8217;un peu plus d&#8217;ouverture&#8230; <img src='http://francois.goldgewicht.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://francois.goldgewicht.com/2008/10/29/faire-du-rest-ce-nest-pas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

